编辑:此代码已作为基本模块处理和发布:https://github.com/hyperreality/Poetry-Tools
我是一名语言学家,他最近选择了python,我正在开展一个项目,希望自动分析诗歌,包括检测诗歌的形式.即如果它找到一个带有0101010101应力模式的10音节线,它会声明它是抑扬格五音阶.一首5-7-5音节模式的诗将是ha句.
我正在使用以下代码,一个更大的脚本的一部分,但我有许多问题,列在程序下面:
脚本中的语料库只是诗歌的原始文本输入.
import sys, getopt, nltk, re, string
from nltk.tokenize import RegexpTokenizer
from nltk.util import bigrams, trigrams
from nltk.corpus import cmudict
from curses.ascii import isdigit
...
def cmuform():
tokens = [word for sent in nltk.sent_tokenize(corpus) for word in nltk.word_tokenize(sent)]
d = cmudict.dict()
text = nltk.Text(tokens)
words = [w.lower() for w in text]
regexp = "[A-Za-z]+"
exp = re.compile(regexp)
def nsyl(word):
lowercase = word.lower()
if lowercase not in d:
return 0
else:
first = [' '.join([str(c) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Casperjs从页面获取链接列表,然后打开每个链接,并从这些页面向数组对象添加特定类型的数据.
我遇到的问题是在每个列表项上执行的循环.
首先,我listOfLinks从原始页面获得了一个.这部分工作和使用长度我可以检查这个列表是否已填充.
但是,使用如下的循环语句this.each,没有任何控制台语句出现,并且casperjs似乎跳过此块.
this.each用标准for循环替换,执行只在第一个链接的一部分,因为语句"在对象中为x.html创建新数组"出现一次,然后代码停止执行.使用IIFE不会改变这种情况.
编辑:在详细调试模式下,会发生以下情况:
Creating new array object for https://example.com
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
Run Code Online (Sandbox Code Playgroud)
因此,由于某种原因,传递给thenOpen函数的URL变为空白...
我觉得有一些关于Casperjs的异步性质的东西,我在这里并没有把握,并且很感激被指向一个有效的例子.
casper.then(function () {
var date = Date.now();
console.log(date);
var object = {};
object[date] = {}; // new object for date
var listOfLinks = this.evaluate(function(){
console.log("getting links");
return document.getElementsByClassName('importantLink');
});
console.log(listOfLinks.length);
this.each(listOfLinks, function(self, link) {
var eachPageHref = link.href;
console.log("Creating new array in object for " + eachPageHref);
object[date][eachPageHref] = []; // array …Run Code Online (Sandbox Code Playgroud) 我需要有关 SQL 决策的帮助,该决策让我困惑了一段时间。
我正在尝试制作一个短篇小说网站,用户可以在其中写自己的故事,也可以浏览彼此的故事等等。我还收集了过去伟大作家写的经典短篇小说集。我很困惑是否应该将两种类型的故事存储在同一个数据库表中。
我希望在某种程度上保持两种类型的故事(经典作者/用户)不同,因为您应该能够搜索网站并从结果中过滤掉用户故事。但我不能只在表中使用单个数据库行来表示这一点,即布尔值 CLASSIC,因为对于经典的短存储,其他几行也会不同 - 没有用户,日期将是 YYYY (即 1869)而不是用户提交时的完整日期时间。
但我也不能完全证明将它们放在单独的表中是合理的。当大多数属性相同时,我真的应该为短篇小说拥有两个不同的数据库表吗?目前,我正在将 NULL 填充到经典短篇小说的用户行中,并且我的过滤搜索有一个仅搜索经典作品的选项,该选项从用户为 NULL 的数据库中进行选择。不过,当您在包含数百万个用户故事的庞大数据库中搜索只是为了找到几千个经典故事时,这似乎会影响性能。
请注意,还有其他表格,例如链接到短篇故事表格的故事标签。
所以我基本上问你们 SQL 专家 - 是否有足够的理由将两种类型的信息分成不同的表?我目前在开发中使用 SQLite,但稍后会切换到 MySQL 或 PostgreSQL。