web-dev-qa-db-ja.com

NLTKで解析するための英語の文法

すぐにロードしてNLTKで使用できるすぐに使える英語の文法はありますか? NLTKを使用した解析の例について検索しましたが、文を解析する前に文法を手動で指定する必要があるようです。

どうもありがとう!

61
roboren

pyStatParser 、NLTK解析ツリーを返す単純なpython統計パーサー。パブリックツリーバンクが付属し、初めて文法モデルを生成するParserオブジェクトをインスタンス化する(約8秒で)CKYアルゴリズムを使用し、1秒未満で平均的な長さの文(以下のような)を解析します。

>>> 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))))
  (. ?))
31
emilmont

私のライブラリ spaCy は、高性能の依存関係パーサーを提供します。

インストール:

pip install spacy
python -m spacy.en.download all

使用法:

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_

Choi et al。(2015) spaCyが利用可能な最速の依存関係パーサーであることがわかりました。 1スレッドで1秒間に13,000を超える文を処理します。標準のWSJ評価では、スコアは92.7%で、CoreNLPのどのモデルよりも1%以上正確です。

21
syllogism_

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' ... 
7
user3798928

_nltk_data_ ディストリビューションにはいくつかの文法があります。 Pythonインタープリターで、nltk.download()を発行します。

5
Fred Foo

NLTK、PyStatParser、Patternを試しました。私見パターンは、上記の記事で紹介した最高の英語パーサーです。それはpipインストールをサポートしており、ウェブサイトに豪華なドキュメントがあります( http://www.clips.ua.ac.be/pages/pattern-en )。 NLTKの妥当なドキュメントを見つけることができませんでした(そして、デフォルトでは不正確な結果をもたらしました。そして、それを調整する方法を見つけることができませんでした)。 pyStatParserは、上記の環境で説明したよりもはるかに遅いです。 (初期化に約1分かかり、長い文を解析するのに数秒かかりました。たぶん私はそれを正しく使用しなかったでしょう)。

4
Piyo Hoge

MaltParserを使用すると、事前に訓練された英語の文法と他の事前に訓練された言語があります。また、Maltparserは依存関係パーサーであり、単純なボトムアップまたはトップダウンパーサーではありません。

http://www.maltparser.org/index.html からMaltParserをダウンロードして、次のようにNLTKを使用します。

import nltk
parser = nltk.parse.malt.MaltParser()
4
blackmamba

NLTKでPOSタグを試しましたか?

text = Word_tokenize("And now for something completely different")
nltk.pos_tag(text)

答えはこのようなものです

[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),('completely', 'RB'), ('different', 'JJ')]

ここからこの例を入手しました NLTK_chapter

3
maverik_akagami