0

大量の文のリストがあり、各文に固有のキーワードをタグ付けして、グループ化の目的でどの文が類似しているかを識別できるようにしたいと考えています。

例として:

その犬は速く走った。- タグ: 犬
猫が寝ている - タグ付け: 猫
ジャーマン・シェパードが目覚めた。- 犬としてタグ付けされました

私はキーワード抽出のために alchemy api や openCalais などのツールを調べてきましたが、何千ものユニークだが類似した個人にタグを付けるのではなく、ドキュメント全体や段落など、データのブロックから意味を抽出するためにこれらを使用しているようです。文章。

要するに、理想的には次のことをしたいと思います。

  1. ドキュメントまたは Web ページから文を取得します (おそらく、大きなスプレッドシートまたはツイートのリストから)
  2. その上に一意の識別子を配置します(ある種のキーワード)
  3. 文をキーワードでグループ化する
4

1 に答える 1

4

識別子を付けることの意味は、nltk の POS-Tagging (Parts of Speech ) とステミングを組み合わせたものに似ていると思います。これは、役立つかもしれない nltkbook へのリンクです。ダウンロード手順はこちら
IMO の選択言語は Python である必要があります。いくつかの例を参考にしてください。

単語のステミング

>>>import nltk
>>>from nltk.stem import PorterStemmer
>>>stemmer = PorterStemmer()
>>>stemmer.stem('cooking')
#'cook' 

品詞タグ付き単語コーパスの作成

>>> from nltk.corpus.reader import TaggedCorpusReader
>>> reader = TaggedCorpusReader('.', r'.*\.pos')
>>> reader.words()
['The', 'expense', 'and', 'time', 'involved', 'are', ...]
>>> reader.tagged_words()
[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ...]
>>> reader.sents()
[['The', 'expense', 'and', 'time', 'involved', 'are', 'astronomical', '.']]
>>> reader.tagged_sents()
[[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ('time', 'NN'), ('involved', 'VBN'), ('are', 'BER'), ('astronomical', 'JJ'), ('.', '.')]]
>>> reader.paras()
[[['The', 'expense', 'and', 'time', 'involved', 'are', 'astronomical', '.']]]
>>> reader.tagged_paras()
[[[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ('time', 'NN'), ('involved', 'VBN'), ('are', 'BER'), ('astronomical', 'JJ'), ('.', '.')]]]

>>> from nltk.tokenize import SpaceTokenizer
>>> reader = TaggedCorpusReader('.', r'.*\.pos', word_tokenizer=SpaceTokenizer())
>>> reader.words()
['The', 'expense', 'and', 'time', 'involved', 'are', ...]

>>> from nltk.tokenize import LineTokenizer
>>> reader = TaggedCorpusReader('.', r'.*\.pos', sent_tokenizer=LineTokenizer())
>>> reader.sents()
[['The', 'expense', 'and', 'time', 'involved', 'are', 'astronomical', '.']]

>>> reader = TaggedCorpusReader('.', r'.*\.pos', tag_mapping_function=lambda t: t.lower())
>>> reader.tagged_words(simplify_tags=True)
[('The', 'at-tl'), ('expense', 'nn'), ('and', 'cc'), ...]

>>> from nltk.tag import simplify
>>> reader = TaggedCorpusReader('.', r'.*\.pos', tag_mapping_function=simplify.simplify_brown_tag)
>>> reader.tagged_words(simplify_tags=True)
[('The', 'DET'), ('expense', 'N'), ('and', 'CNJ'), ...]
>>> reader = TaggedCorpusReader('.', r'.*\.pos', tag_mapping_function=simplify.simplify_tag)
>>> reader.tagged_words(simplify_tags=True)
[('The', 'A'), ('expense', 'N'), ('and', 'C'), ...]

上記の 2 つのコード サンプルは、nltk の書籍のサンプルから抜粋したものです。使用の有無にかかわらず、額面どおりに受け取ることができるように投稿しました。
両方の機能を組み合わせた線に沿って考えてください。彼らはあなたの目的を果たしていますか?
また、あなたが与えた最初の文から犬だけを取り出すために、STOPWORDSを調べることもできます。

于 2012-03-18T18:18:39.713 に答える