dri*_*her 10 python tagging grammar nlp nltk
寻求针对奇怪要求的最佳解决方案的建议. 我是大学四年级的(文学)学生,只有我自己的编程指导.我对Python有足够的能力,我不会在实现我发现的解决方案(大部分时间)和开发它们时遇到麻烦,但是由于我的新意,我正在寻找有关解决这个特殊问题的最佳方法的建议.
已经使用NLTK,但与NLTK书中的示例不同.我已经在使用NLTK的很多东西了,特别是WordNet,所以这些材料对我来说并不陌生.我读过大部分的NLTK书.我更懂得如何处理,如果我试图分析现有的文本,或者目标文本是散文般的-但我的应用程序是专注于诗歌,特别是对即时构建诗意文本的基础上,不可预见的输入来自用户.
我正在使用零碎的原子语言.我的应用程序逐字移动:每轮,几个用户输入单词(每个用户一个单词).我的程序试图统一或组合这些输入词以产生单个输出词.我已经开发了字选择算法 - 它利用WordNet的各种功能来提出单字结果.结果是WordNet synset的形式 - 一个未反射的单词(剥离多个和紧张).结果被附加到"诗"的文本中(在一些空格之后).添加所产生的字会影响用户对什么词来扔进锅里下一个选择,那就是如何这个游戏/程序一起运动,在每次添加一个机器演变字的诗句.
问题:如何以语法合理的方式影响结果?没有任何语法处理,结果只是一个字典可搜索的单词列表,没有单词之间的协议.第一步是我的应用程序根据上下文来阻止/复数/共轭/变形根词.(我所说的"根词"是来自WordNet和/或其人类可读等同物的同义词.)想象一下,诗中已经有一些语法敏感的文本开始,我的应用程序需要反映一个新的结果 - 同意现有序列的词.如果它只是像一个3字的窗口或其他东西一样工作,这很好,但我正在寻找有关最佳操作顺序的建议.我希望有人可以给我一些指示(我希望它很难实现,但我想确保我从正确的想法开始).
让我们假设我们已经有了一首诗,用户正在向其中添加新的输入.新结果需要以语法合理的方式进行变换.
The river bears no empty bottles, sandwich papers,
Silk handkerchiefs, cardboard boxes, cigarette ends
Or other testimony of summer nights. The nymphs
Run Code Online (Sandbox Code Playgroud)
比方说,我的算法已经采取了一批从输入的用户,现在需要打印的4个可能接下来的话1 /同义集(非正式代表): ['departure', 'to have', 'blue', 'quick']
.在我看来'blue'
应该被抛弃; 'The nymphs blue'
似乎语法奇怪/不太可能.从那里它可以使用这些动词中的任何一个.
如果它选择'to have'
的结果可以被合理地活用为'had'
,'have'
,'having'
,'will have'
,'would have'
,等(但不包括'has'
).(由此产生的结果将是类似的'The nymphs have'
,明智的结果将为未来的结果提供更好的背景......)
'depature'
在这种情况下,我希望成为一个有效的可能性; 虽然'The nymphs departure'
没有意义(它不是"nymphs'"
),'The nymphs departed'
(或其他动词变形)会.
看似'The nymphs quick'
没有意义,但是类似'The nymphs quickly [...]'
或'The nymphs quicken'
可能的东西,'quick'
也是明智的变化的可能性.
'having'
而不是一些其他时态,则选择had/have/having之间的选择可能比随机选择更直接).我听说Stanford POS标签很好,它有一个NLTK的实现.我不知道如何在这里处理时态检测.'The nymphs'
我们不想要另一篇文章(或者我自己能说的确定者)之后,也不想要一个形容词,但是一个副词或动词可以起作用.当前的东西与标记语料库(和/或马尔可夫链?)中的序列的比较 - 或语法检查功能的咨询 - 可以为此提供解决方案.我正在寻找有关此例程健全性的建议,以及添加步骤的建议.如何进一步分解这些步骤也会有所帮助.最后,我正在寻找有关哪种工具可以最好地完成每项任务的建议.
我尽量提供尽可能简洁的信息,同时提供足够的信息.请不要犹豫,请我澄清一下!我会感激我得到的任何信息,我会接受最清晰/最有启发性的答案:)谢谢!
我认为上面关于n-gram语言模型的评论比解析和标记更符合您的要求.解析器和标记器(除非被修改)将受到目标词缺少正确上下文的影响(即,在查询时您没有其余的句子可用).另一方面,语言模型有效地考虑过去(左上下文),尤其是对于最多5个单词的窗口.n-gram的问题在于它们不模拟长距离依赖性(超过n个单词).
NLTK有一个语言模型:http://nltk.googlecode.com/svn/trunk/doc/api/nltk.model.ngram-pysrc.html.标签词典可以帮助您更加平滑模型.
我看到的步骤:1.从用户那里获取一组单词.2.创建一组更大的单词的所有可能变形.3.询问模型哪个词最有可能.