在Python中使用NLTK进行Chink

时间:2012-11-30 06:13:42

标签: python nltk

我一直在试用Python NLTK Book中的一些例子。例如,第7章用这个例子讨论了Chinking:

grammar = r"""
    NP:
    {<.*>+}          # Chunk everything
    }<VBD|IN>+{      # Chink sequences of VBD and IN
  """
sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"),
       ("dog", "NN"), ("barked", "VBD"), ("at", "IN"),  ("the", "DT"), ("cat", "NN")]
cp = nltk.RegexpParser(grammar)
result = cp.parse(sentence)

据我说,这应该从结果中删除“吠叫”。但事实并非如此。我是python和nltk的新手,但我在这里缺少什么?有什么明显的东西需要在这里更新吗?感谢..

1 个答案:

答案 0 :(得分:0)

  

chunking会创建块,而chinking会破坏这些块。

这正是Jacob Perkins所说的“使用NLTK 2.0 Cookbook进行Python文本处理”(我建议你这本书,因为你是NLTK的新手)。

这意味着{}会创建一些块并且} {将这些块拆分为较小的块(即将它们分开)但不会删除任何内容。

根据你的例子,看看显示什么

result.draw()

或者运行

from nltk.tree import Tree

Tree('S', [Tree('NP', [('the', 'DT'), ('little', 'JJ'), ('yellow', 'JJ'), ('dog', 'NN')]), ('barked', 'VBD'), ('at', 'IN'), Tree('NP', [('the', 'DT'), ('cat', 'NN')])]).draw()

(上面的代码示例显示了相同的东西。不同之处在于,第一个示例需要您运行初始示例,而第二个示例不需要任何内容​​)