テキストからの意味の解析
-
16-09-2019 - |
質問
これが広範なトピックであることは承知していますが、理想的には Python でテキストから意味を解析するための優れた入門書を探しています。私がやりたいことの例として、ユーザーが次のようなブログ投稿を作成したとします。
「マニー・ラミレスは今日のヒューストン・アストロズ戦でドジャースに復帰する」、
文から名詞を取り出す軽量で簡単な方法は何ですか?まず、固有名詞に限定すると思いますが、それだけには限定したくありません(そして、タイトルキャップ付きのものはすべて固有名詞であると想定する単純な正規表現に依存したくありません)。
この質問をさらに悪化させるには、私が求めていないことは何ですか?始めるために既存の単語のコーパスが必要ですか?これを機能させるにはどのような字句解析について知っておく必要がありますか?出会ってしまった もう一つの質問 このトピックについては、現在それらのリソースを調べています。
解決
のhref = "<特にhttp://www.nltk.org、 NLTK に使用/book/ch07.html」のrel = "nofollowをnoreferrer">情報抽出に関する章7。に
あなたが意味を抽出する、意味解析のためのモジュールがあると言うが、私はIEはあなたが必要とするすべてだと思う - 。と正直NLPコンピュータの領域のみの一つは、今扱うことができます。
(チャンクにし、人としてマニーRamerezを分類し、ドジャースのスポーツ組織として、ヒューストン・アストロズ他のスポーツ団体として、またはドメインに合ったものは何でも)固有表現の認識のサブトピックにセクション7.5と7.6を参照して、関係の抽出。あなたはNLTKがインストールされていたら、あなたはプラグインすることができますNERのチャンカがあります。彼らの例から、地政学的エンティティ(GPE)と人物を抽出します:
>>> 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)
...)
前の章で説明したようにあなたはまだこれらのIEのタスクのための適切なフォーマットにテキストを取得するには、トークン化とタグ付けを知っておく必要があります注意します。
他のヒント
見る必要があります 自然言語ツールキット, 、これはまさにこの種のものです。
マニュアルのこのセクションは非常に関連性が高いと思われます。 単語の分類とタグ付け - これが抜粋です:
>>> 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、または副詞です。 のために INは前置詞です。 何か NNは名詞です。そして 違う JJは形容詞です。
自然言語処理(NLP)は、よく、自然言語を解析するための名前です。多くのアルゴリズムや経験則が存在し、それは研究の活発な分野です。あなたがコーディングしますどのようなアルゴリズムは、コーパスで訓練する必要があります。ただ、人間のように:我々は他の人(および/または他の人が発した文章を聞くことによって)によって書かれたテキストを読むことによって言語を学ぶ
。実際には、自然言語ツールキットのを見てみましょう。あなたがコードに行っているものは何でもの理論的基盤について、あなたは<統計的自然言語処理の基盤をチェックアウトすることができます/>クリス・マニングとハインリックSchützeによるます。
の
<サブ>(ソース: stanford.edu の)サブ>
ここで私は最近につまずいた本がある:のPythonで自然言語処理
何が欲しいのはNP(名詞句)チャンキング、または抽出と呼ばれます。
ここをこれは本当に複雑なトピックです。一般的に、原料のこの種は、自然言語処理の朱書きに該当し、最高の状態でトリッキーになりがち。まだ顧客サービスなどを扱うための完全に自動化されたシステムはありません正確に、なぜもののこの種の困難がある。
一般的に、このようなものへのアプローチは、本当にあなたの問題領域が何であるかを正確に依存します。あなたは問題領域をダウン選り抜くことができるしている場合、あなたはいくつかの非常に深刻な利益を得ることができます。あなたはあなたの問題領域が野球であると判断することができるしている場合、あなたの例を使用するために、それはあなたが本当に強いヘッドスタートを与えます。それでも、それは起こっ特に便利何かを得るために多くの仕事です。
何が価値があるため、はい、言葉の既存のコーパスが便利になるだろう。さらに重要なことは、システムに期待される機能の複雑さを決定することが重要になるだろう。あなたは、簡単な文章を解析する必要がある、または複雑な挙動を解析する必要性があるのですか?あなたは比較的簡単なセットへの入力を制約することはできますか?
正規表現は、いくつかのシナリオで役立ちます。詳細な例を次に示します。 CNET フォーラムで最も言及されたスキャナーは何ですか, 、正規表現を使用して、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)))
次のいずれかに一致するようにするには:
- 2 つの単語、次にモデル番号 (オールインワンを含む)、次に「スキャナー」
- "scanner"、1 つまたは 2 つの単語、モデル番号 ( オールインワン)
その結果、投稿から抽出されたテキストは次のようになりました。
- 生産終了した HP C9900A フォト スキャナ
- 彼の古いX線写真をスキャンしている
- 新しい Epson V700 スキャナ
- HP ScanJet 4850 スキャナー
- Epson Perfection 3170 スキャナー
この正規表現ソリューションはある意味でうまくいきました。