我正在开发一个带有 Unicode 字符的非英语解析器。为此,我决定使用 NLTK。
但它需要预定义的上下文无关语法,如下所示:
S -> NP VP
VP -> V NP | V NP PP
PP -> P NP
V -> "saw" | "ate" | "walked"
NP -> "John" | "Mary" | "Bob" | Det N | Det N PP
Det -> "a" | "an" | "the" | "my"
N -> "man" | "dog" | "cat" | "telescope" | "park"
P -> "in" | "on" | "by" | "with"
在我的应用程序中,我应该使用基于规则的语法来最大限度地减少硬编码。
例如,我可以假设任何以-ed or -ing作为动词。所以它应该适用于任何给定的上下文。
我如何将这样的语法规则提供给 NLTK?或者使用有限状态机动态生成它们?
如果您正在创建一个解析器,那么您have在实际解析之前添加词性标记步骤——没有办法在脱离上下文的情况下成功确定单词的词性标记。例如,“close”可以是形容词或动词;词性标注器会从单词的上下文中为您找到正确的标签。然后您可以使用 POS 标记器的输出来创建您的 CFG。
您可以使用许多现有的词性标注器之一。在 NLTK 中,您可以简单地执行以下操作:
import nltk
input_sentence = "Dogs chase cats"
text = nltk.word_tokenize(input_sentence)
list_of_tokens = nltk.pos_tag(text)
print list_of_tokens
输出将是:
[('Dogs', 'NN'), ('chase', 'VB'), ('cats', 'NN')]
您可以使用它来创建语法字符串并将其提供给nltk.parse_cfg()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)