Cha*_*gaD 9 python parsing nlp nltk context-free-grammar
我正在研究一个带有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"
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我应该使用基于规则的语法来最小化硬编码.例如,我可以假设以-ed或-ing结尾的任何单词作为动词.所以它应该适用于任何给定的上下文.
如何将这些语法规则提供给NLTK?或者使用有限状态机动态生成它们?
如果要创建解析器,则必须在实际解析之前添加pos-tagging步骤 - 无法成功确定单词脱离上下文的POS标记.例如,'封闭'可以是形容词或动词; POS标签可以从单词的上下文中找到适合您的标签.然后,您可以使用POS标记器的输出来创建CFG.
您可以使用众多现有POS标签之一.在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
Run Code Online (Sandbox Code Playgroud)
输出将是:
[('Dogs', 'NN'), ('chase', 'VB'), ('cats', 'NN')]
Run Code Online (Sandbox Code Playgroud)
您可以使用它来创建语法字符串并将其提供给nltk.parse_cfg().
也许您正在寻找CFG.fromstring()(以前parse_cfg())?
来自NLTK 书第 7 章(更新为 NLTK 3.0):
> grammar = nltk.CFG.fromstring("""
S -> NP VP
VP -> V NP | V NP PP
V -> "saw" | "ate"
NP -> "John" | "Mary" | "Bob" | Det N | Det N PP
Det -> "a" | "an" | "the" | "my"
N -> "dog" | "cat" | "cookie" | "park"
PP -> P NP
P -> "in" | "on" | "by" | "with"
""")
> sent = "Mary saw Bob".split()
> rd_parser = nltk.RecursiveDescentParser(grammar)
> for p in rd_parser.parse(sent):
print p
(S (NP Mary) (VP (V saw) (NP Bob)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10625 次 |
| 最近记录: |