27

NLTK ツールキットを使用して、テキスト メッセージから場所、日付、時刻を抽出しようとしています。ツールキットを自分のマシンにインストールしたばかりで、テスト用に次の簡単なスニペットを作成しました。

sentence = "Let's meet tomorrow at 9 pm";
tokens = nltk.word_tokenize(sentence)
pos_tags = nltk.pos_tag(tokens)
print nltk.ne_chunk(pos_tags, binary=True)

日付 (明日) と時刻 (午後 9 時) を識別できると想定していました。しかし、驚くべきことにそれを認識できませんでした。上記のコードを実行すると、次の結果が得られます。

(S (GPE Let/NNP) 's/POS meet/NN tomorrow/NN at/IN 9/CD pm/NN)

何かが欠けているのか、それとも NLTK が時間と日付を適切にタグ付けするのに十分なほど成熟していないのかを誰かが理解するのを手伝ってくれますか? ありがとう!

4

3 に答える 3

30

nltk のデフォルトの NE チャンカーは、ACE コーパス ( http://catalog.ldc.upenn.edu/LDC2005T09 ) でトレーニングされた最大エントロピー チャンカーです。日付と時刻を認識するようにトレーニングされていないため、そうしたい場合は独自の分類子をトレーニングする必要があります。

http://mattshomepage.com/articles/2016/May/23/nltk_nec/をご覧ください。プロセス全体が非常によく説明されています。

また、 nltk_contrib に timex というモジュールがあり、ニーズに役立つ可能性があります。https://github.com/nltk/nltk_contrib/blob/master/nltk_contrib/timex.py

于 2013-10-16T09:44:33.570 に答える
6

名前付きエンティティの認識は簡単な問題ではありませ。ライブラリが 100% 正確であるとは期待しないでください。1 つの文に基づいて NLTK のパフォーマンスについて結論を下すべきではありません。別の例を次に示します。

sentence = "I went to New York to meet John Smith";

私は得る

(S
  I/PRP
  went/VBD
  to/TO
  (NE New/NNP York/NNP)
  to/TO
  meet/VB
  (NE John/NNP Smith/NNP))

ご覧のとおり、ここでは NLTK が非常にうまく機能します。しかし、NLTK に認識させtodayたりtomorrow、一時的な式として認識させることはできませんでした。スタンフォード SUTime を試すことができます。これはスタンフォードCoreNLPの一部です。私はそれを以前に使用したことがありますが、これは非常にうまく機能します (Java ではありますが)。

于 2013-10-11T08:48:57.847 に答える
3

テキスト メッセージから日付または時刻を正確に識別したい場合は、スタンフォード大学の NERを使用できます。

CRF (Conditional Random Fields) 分類子を使用します。CRF は順次分類器です。そのため、単語のシーケンスが考慮されます。

どのように文を構成または設計するかによって、分類されたデータが得られます。

入力文が だった場合Let's meet on wednesday at 9am.、スタンフォード NER はwednesday日付と9am時刻を正しく識別します。

NLTK はスタンフォード NER をサポートしています。使ってみてください。

于 2016-06-21T14:36:37.873 に答える