web-dev-qa-db-ja.com

テキストで使用されているキーワードを抽出するにはどうすればよいですか?

使用量ごとにキーワードを取得するために、テキストの山をデータマイニングするにはどうすればよいですか? (「Jacob Smith」または「fence」)

そして、これを行うソフトウェアはすでにありますか?半自動であっても、「the」、「and」、「or」などの単純な単語を除外できる場合は、トピックをすばやく取得できます。

36
Robinicks

一般的なアルゴリズムは次のようになります。

-テキストの取得
-句読点、特殊文字などの除去
-「単純な」単語の除去
-スペースでの分割
-ループオーバーテキストの分割
-存在しない場合はArray/HashTable/Etcにワードを追加します; 
存在する場合は、そのワードのカウンターをインクリメントします

最終結果は、テキスト内のすべての単語の頻度カウントです。次に、これらの値を取得し、単語の総数で除算して頻度の割合を取得できます。それ以上の処理はあなた次第です。

また、 Stemming を調べることもできます。語幹を使用して、語をルートに減らします。例えば ​​going => gocars => carなど.

このようなアルゴリズムは、スパムフィルター、キーワードインデックス作成などで一般的になります。

39
Gavin Miller

これはNLPの未解決の質問なので、簡単な答えはありません。

簡単で汚い「works-for-me」の推奨事項は、 topia.termextract です。

Yahooにはキーワード抽出サービス( http://developer.yahoo.com/search/content/V1/termExtraction.html )があり、これは再現率は低いが精度は高い。つまり、少数の高品質の用語が提供されますが、ドキュメント内の多くの用語が欠落しています。

Pythonには、topia.termextract( http://pypi.python.org/pypi/topia.termextract/ )があります。それは比較的騒々しく、多くの偽のキーワードを提案しますが、使いやすいです。

Termine( http://www.nactem.ac.uk/software/termine/ )は、比較的騒々しい英国のWebサービスであり、多くの偽のキーワードを提案します。ただし、topia.termextractよりもわずかに正確であるように思われます。 YMMV。

キーワード(たとえば、topia.termextractやtermine)が多すぎる結果のノイズを除去する1つの方法は、頻繁に発生する用語の語彙を作成し、その語彙にない提案された用語を破棄することです。つまり、コーパスに対して2つのパスを実行します。最初のパスでは、各キーワードの頻度をカウントします。 2番目のパスでは、あまりにもまれなキーワードを破棄します。

独自に作成したい場合、おそらく最良の紹介は、現在IBMにいるParkによって書かれています。

  • 「自動用語集抽出:用語の識別を超えて」 http://portal.acm.org/citation.cfm?id=107237 で利用可能
  • 「IBM技術サポート用の情報検索および配信システムでの用語集の抽出および使用」

さらに詳しく知りたい場合は、以下の参考文献をご覧ください。

  • http://en.wikipedia.org/wiki/Terminology_extraction
  • 「CorePhrase:ドキュメントクラスタリングのキーフレーズ抽出」
  • NAACL HLTのLiu et al 2009
  • 「非構成句の自動識別」
  • 「データマイニングとコロケーションの発見の出会い」
  • 他の参照のホストと同様に、主題について掘り下げることができます。
119
Joseph Turian

また、用語抽出、概念タグ付け、センチメント分析などを実行できる Alchemy というサービスがあります。

それは有効です、私はそれをテストしましたが、私は彼らが商業政策(もしあれば)を知りません。それらは、あらゆる種類の言語(ほとんど)のAPIを提供します。

私はどこかで(ジョセフが提案したものに比べて、錬金術によって与えられた出力のノイズが少ないことを残念に思います)。

9

使用しているテクノロジを指定しなかったため、シェルスクリプトも可能性があると思います。

Advanced Bash-Scripting Guide (12-11)のWord頻度分析の例には常に感銘を受けました。

たとえば、以下はプロジェクトGutenburgから本を取得し、Word頻度分析「レポート」を書き出します。

wget http://www.gutenberg.org/files/20417/20417-8.txt -q -O- | 
sed -e 's/\.//g'  -e 's/\,//g' -e 's/ /\
/g' | tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr > output.txt

「共通」リスト(the、and、a ...)などから単語を除外するために拡張可能である必要があります。

5
ChristopheD

個人的にマウイをお勧めします( http://code.google.com/p/maui-indexer/ ):KeAに依存していますが、さまざまな方法で拡張しています。これはトレーニング可能で、RDF=フォーマットされた用語を使用できます。

1
bongo

NTLKを使用して 名前付きエンティティを認識する をいくつか成功させました。人や組織の名前を認識するのに特に適しています。

0
litso