2009-10-15 34 views
36

データを使用してキーワードを取得するには、どのようにデータをマイニングしますか? ( "Jacob Smith"または "fence")テキストで使用されるキーワードを抽出するにはどうすればよいですか?

これを行うソフトウェアは既にありますか?半自動でも、 "the"、 "and"、 "or"などの単純な単語を除外することができれば、トピックにすばやく到達することができます。

答えて

39

一般的なアルゴリズムは次のように行くつもりされています

 
- Obtain Text 
- Strip punctuation, special characters, etc. 
- Strip "simple" words 
- Split on Spaces 
- Loop Over Split Text 
    - Add word to Array/HashTable/Etc if it doesn't exist; 
     if it does, increment counter for that word 

最終結果は、テキスト内のすべての単語の頻度数です。これらの値をとって、単語の総数で割って、頻度のパーセンテージを得ることができます。それ以上の処理はあなた次第です。

また、Stemmingを見てみることにします。ステミングは単語を根本的に減らすために使用されます。例えば、going => go,cars => carなど

このようなアルゴリズムは、スパムフィルタやキーワードインデックス作成などでよく使用されます。

+0

あなたは - >ストリップの "シンプルな"単語リストをいくつか出すことができますか?私はそれらを見つけることができません –

+0

自然言語では、 "シンプルな"言葉は最も頻繁にストップワードと呼ばれます。 http://en.wikipedia.org/wiki/Stop_words周りにはたくさんのstopwords.txtファイルがあります。 http://ir.dcs.gla.ac.uk/resources/linguistic_utils/stop_words – roy

+0

英語のストップワードのリスト:http://xpo6.com/list-of-english-stop-words/ –

119

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

クイックダーティーな "works-for-me"の私のお勧めは、topia.termextractです。

ヤフーには、低リコールで高精度のキーワード抽出サービス(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/)は、比較的ノイズの多い英国のウェブサービスであり、多くの偽のキーワードを提案しています。しかし、topia.termextractよりも若干正確であるように見えます。 YMMV。

キーワードが多すぎる結果(たとえば、topia.termextractおよびtermine)を排除する1つの方法は、頻繁に発生する用語のボキャブラリを作成し、ボキャブラリにない提案された用語を投げ捨てることです。言い換えれば、あなたのコーパスを2回通過します:最初のパスは、各キーワードの頻度を数えます。 2回目のパスでは、あまりにも稀なキーワードを破棄します。

あなたがあなた自身を書きたい場合は、おそらく最高の導入をIBMに今ある公園で書かれている:

  • 「自動用語集抽出:用語の識別を超えた」http://portal.acm.org/citation.cfm?id=1072370
  • で入手可能な「用語集あなたが詳細を知りたい場合は、IBM技術サポートのための情報検索および配信システムの抽出と活用」

ここでは、いくつかのより多くの参照です:

  • http://en.wikipedia.org/wiki/Terminology_extraction
  • "CorePhrase:文書クラスタリングのためのキーフレーズ抽出"
  • Liuら2009
  • NAACL HLTからは
  • "非組成フレーズの自動識別は、" "データ・マイニングは、コロケーションディスカバリーミーツ"
  • 他の参考文献と同様に、あなたはその主題を掘り下げることができます。
5

あなたが使っている技術を指定していないので、シェルスクリプトも可能性があります。私はいつもAdvanced Bash-Scripting Guide(12-11)

に単語頻度分析例に感銘を受けてきた

例えば以下は、プロジェクト・グーテンベルクから本を取り出し、単語頻度分析「レポート」書き出し:

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 

「共通の」リストから言葉除外する拡張であるべき(と、...)など

9

用語抽出を行うことができますAlchemyと呼ばれるサービス、コンセプトタギングもあります、感情分析など。

私はそれをテストしましたが、商用ポリシー(もしあれば)はわかりません。 これらは、あらゆる種類のAPI(ほとんど)を提供します。

私は、Alchemyによって与えられた出力がJosephによって提案されたものと比較してノイズが少ないことを、私はもう覚えていません。

+0

「錬金術」の外観非常に効果的です。しかし、オフラインに相当するものはありますか? Coz、lotsaデータを扱う場合、クラウドベースのソリューションはあまり効率が悪いようです。 – bdhar

+1

非常に有望なPython Toolkitがあります(これまで私が経験したいくつかの評価から):http://www.nltk.org/ –

0

これまでNTLKをrecognize named entitiesに使用して成功しました。人々の名前や組織の名前を認識することが特に効果的です。

1

私は個人的にはマウイ(http://code.google.com/p/maui-indexer/)をお勧めします:KeAに依存していますが、さまざまな方法で拡張しています。それは訓練可能であり、RDF形式の用語を使用することができます。

関連する問題