2009-07-17 7 views
10

これは幅広い話題ですが、私は理想的にはPythonの中で、テキストから意味を解析する上で優れたプライマーを探しています。私は、ユーザーが行った場合、行うことを探しているものの一例として、のようなブログ記事:構文解析の意味テキストからの意味

軽量何、

「マニー・ラミレスがヒューストン・アストロズに対してドジャースのための彼のリターン今日になります」 /文から名詞を得る簡単な方法?まず、適切な名詞に限定したいと思いますが、それだけに制限されることは望ましくありません(タイトルキャップされたものが固有名詞であると仮定する単純な正規表現に頼りたくはありません)。

この質問をさらに悪化させるために、私は私がすべきことを求めていないことは何ですか?既存の単語のコーパスが必要ですか?この作業をするには、どのような字句解析の知識が必要ですか?私はトピックについてone other questionに出くわしました、そして、私はそれらのリソースを今掘り下げています。

答えて

8

あなたが意味を抽出する、意味解析のためのモジュールがあると言うが、私はIEはあなたが必要とするすべてだと思うNLTK、特にchapter 7 on Information Extraction.

を使用する - と正直の1 NLPコンピュータの唯一の領域は現在処理できます。

名前付きエンティティ認識のサブトピック(Manny Ramerezを人物、Dodgersをスポーツ団体、ヒューストン・アストロズを別のスポーツ団体、またはあなたのドメインに合ったものに分類する)とRelationship Extraction 。 NLTKをインストールすると、プラグインできるNERチャンクがあります。適切なフォーマットにテキストを取得するには、前の章で説明したようにあなたはまだ、トークン化とタグ付けを知る必要があります

>>> sent = nltk.corpus.treebank.tagged_sents()[22] 
>>> print nltk.ne_chunk(sent) 
(S 
    The/DT 
    (GPE U.S./NNP) 
    is/VBZ 
    one/CD 
    ... 
    according/VBG 
    to/TO 
    (PERSON Brooke/NNP T./NNP Mossman/NNP) 
    ...) 

注:地政学的なエンティティ(GPE)と人物を抽出し、その例から、これらのIEタスクのために。

10

Natural Language Toolkitを参照する必要があります。これはまさにこの種のものです。

マニュアルのこのセクションでは、非常に関連見えます:Categorizing and Tagging Words - ここエキスです:

ここ
>>> text = nltk.word_tokenize("And now for something completely different") 
>>> nltk.pos_tag(text) 
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), 
('completely', 'RB'), ('different', 'JJ')] 

我々ははCC、コーディネート組み合わせであることがわかり、 今や完全にはRBです、または副詞です。前置詞である; である。 何かはNN、名詞です。 と異なるはJJ、形容詞です。

1

これは本当に複雑なトピックです。一般的に、この種のものは自然言語処理の綱領に該当し、せいぜいトリッキーな傾向があります。この種のものの難しさは、なぜ顧客サービスなどを扱うための完全に自動化されたシステムがまだ存在しないのかということです。

一般的に、このようなものへのアプローチは、問題のドメインが正確に何であるかに大きく依存します。問題のドメインを解明できれば、非常に大きな利益を得ることができます。あなたの例を使用するには、問題のドメインが野球であると判断できれば、それは本当に強く頭を上げます。それでも、特に役立つものを得ることはたくさんの仕事です。

これは価値がありますが、既存の言葉のコーパスが役立つでしょう。さらに重要なことは、システムの期待される機能的な複雑さを決定することが重要になることです。単純な文章を解析する必要がありますか、複雑な動作を解析する必要がありますか?入力を比較的簡単なセットに制限できますか?

3

あなたが望むものは、NP(名詞句)チャンクまたは抽出と呼ばれます。

Some links here

としては、これは非常に問題のあるドメイン固有のものである、と指摘しました。より絞り込むことができれば、より効果的になります。そしてあなたはあなたの特定のドメインであなたのプログラムを鍛える必要があります。ここで

4

私は最近つまずいブックれる:Natural Language Processing with Python

+0

ハ、私はちょうどここに戻ってくる前にAmazonでカートに追加しました。何かいいことがあるの?私はレビューの不足について不思議だった。 – Tom

+0

NTLKに関するかなりまともな記述があるようです - – zakovyrya

7

自然言語処理(NLP)は、よく、自然言語を解析するための名前です。多くのアルゴリズムと経験則が存在し、研究の活発な分野です。どのアルゴリズムをコーディングするにしても、コーパスで訓練する必要があります。人間と同じように:他の人が書いたテキストを読むことによって(そして/または他の人が発声した文章を聞いて)、言語を学びます。

実際には、Natural Language Toolkitをご覧ください。あなたがコード化しようとしていることを理論的に裏付けるために、Chris ManningとHinrichSchützeによってFoundations of Statistical Natural Language Processingをチェックしたいかもしれません。

alt text http://nlp.stanford.edu/fsnlp/fsnlp-bigger.jpg

+1

この本はStatistical NLPの概念の優れた入門書です! –

-1

一部のシナリオでは、正規表現が役立ちます。詳細な例を次に示します:What’s the Most Mentioned Scanner on CNET Forum、正規表現を使用して、CNETフォーラムの投稿に記載されているすべてのスキャナーを検索します。ポストで

は、例えば、正規表現を使用した:

(?i)((?:\w+\s\w+\s(?:(?:(?:[0-9]+[a-z\-]|[a-z]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one)\s(\w+\s){0,1}(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner))|(?:(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner)\s(\w+\s){1,2}(?:(?:(?:[0-9]+[a-z\-]|[a-z]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one))) 

ために、以下のいずれかと一致する:(全インを含む

  • 二つの単語を、次いで、モデル番号を1)、次いで「スキャナ」
  • 「スキャナ」は、一つまたは二つの単語を、次いで、モデル番号( オールインワン)
を含みます0

その結果、ポストから抽出されたテキストが

  1. 中止HP C9900Aフォトスキャナ新しいエプソンV700スキャナは
  2. HPのScanJetを彼の古いX線をスキャンする
  3. 、のようだったが4850スキャナ
  4. エプソンパーフェクション3170スキャナ

この正規表現ソリューションはある意味で機能しました。