用于在NLTK中解析的英语语法

rob*_*ren 63 python grammar nlp nltk

是否有现成的英语语法,我可以加载它并在NLTK中使用?我搜索了使用NLTK解析的示例,但似乎我必须在解析句子之前手动指定语法.

非常感谢!

小智 31

你可以看一下pyStatParser,一个简单的python统计解析器,返回NLTK解析树.它带有公共树库,它只在您第一次实例化Parser对象时生成语法模型(大约8秒钟).它使用CKY算法,并在一秒钟内解析平均长度的句子(如下面的句子).

>>> from stat_parser import Parser
>>> parser = Parser()
>>> print parser.parse("How can the net amount of entropy of the universe be massively decreased?")
(SBARQ
  (WHADVP (WRB how))
  (SQ
    (MD can)
    (NP
      (NP (DT the) (JJ net) (NN amount))
      (PP
        (IN of)
        (NP
          (NP (NNS entropy))
          (PP (IN of) (NP (DT the) (NN universe))))))
    (VP (VB be) (ADJP (RB massively) (VBN decreased))))
  (. ?))
Run Code Online (Sandbox Code Playgroud)


syl*_*sm_ 23

我的库spaCy提供了一个高性能依赖解析器.

安装:

pip install spacy
python -m spacy.en.download all
Run Code Online (Sandbox Code Playgroud)

用法:

from spacy.en import English
nlp = English()
doc = nlp(u'A whole document.\nNo preprocessing require.   Robust to arbitrary formating.')
for sent in doc:
    for token in sent:
        if token.is_alpha:
            print token.orth_, token.tag_, token.head.lemma_
Run Code Online (Sandbox Code Playgroud)

崔等人.(2015)发现spaCy是最快的依赖解析器.它在一个线程上每秒处理超过13,000个句子.在标准的WSJ评估中,它得分为92.7%,比任何CoreNLP模型的准确率高出1%.

  • 请注意,正确的用法是"在doc.sents中发送:" (2认同)

小智 7

有一个名为Pattern的库.它非常快速且易于使用.

>>> from pattern.en import parse
>>>  
>>> s = 'The mobile web is more important than mobile apps.'
>>> s = parse(s, relations=True, lemmata=True)
>>> print s

'The/DT/B-NP/O/NP-SBJ-1/the mobile/JJ/I-NP/O/NP-SBJ-1/mobile' ... 
Run Code Online (Sandbox Code Playgroud)


Fre*_*Foo 5

nltk_data分发中有一些语法.在你的Python解释器中,问题nltk.download().

  • @roboren:你可以把'nltk_data`中的Penn树库部分,并通过简单地将树片段(节点及其直接子节点)转换为规则来从中导出CFG.但是除非你研究统计解析,否则你可能找不到"真正的"语法; 没有人构建非随机语法,因为它们只是不起作用,除了非常特定于域的应用程序. (5认同)
  • nltk是否提供统计解析?否则,我可能想切换到斯坦福解析器.再次,非常感谢=) (2认同)

小智 5

使用 MaltParser,你有一个预训练的英语语法,还有一些其他的预训练语言。Maltparser 是一个依赖解析器,而不是一些简单的自底向上或自顶向下的解析器。

只需从http://www.maltparser.org/index.html下载 MaltParser并像这样使用 NLTK:

import nltk
parser = nltk.parse.malt.MaltParser()
Run Code Online (Sandbox Code Playgroud)

  • MaltParser 看起来不错,但我无法让它与 nltk 一起工作(它一直失败并显示消息“找不到 MaltParser 配置文件:malt_temp.mco”。MaltParser 本身,我工作正常。 (4认同)