Метод / Инструмент для извлечения ключевых слов из списка предложений - PullRequest
0 голосов
/ 18 марта 2012

У меня большой список предложений, и я хотел бы пометить каждое из них своими уникальными ключевыми словами, чтобы помочь мне определить, какие предложения похожи для группирования.

В качестве примера:

The dog ran fast. - tagged as: dog
The cat is sleeping - tagged as: cat
The German Sheppard is awake. - tagged as dog

Я искал такие инструменты, как alchemy api и openCalais для извлечения ключевых слов, однако, кажется, что вы также используете их для извлечения значения изблок данных, как целый документ или абзац, а не тегирование 1000 уникальных, но похожих отдельных предложений.

Короче говоря, в идеале я хотел бы:

  1. Взять предложение из документа или веб-страницы (возможно, из большой электронной таблицы или списка твитов)
  2. Поместите на него уникальный идентификатор (какой-либо тип ключевого слова)
  3. Сгруппируйте предложения по ключу

1 Ответ

4 голосов
/ 18 марта 2012

Я думаю, что вы подразумеваете под прикреплением идентификатора, это похоже на POS-тегирование (части речи) nltk в сочетании со стеммингом.Это ссылка на nltkbook, которая может вам помочь.Инструкции по загрузке: здесь
Выбор языка IMO должен быть Python. У меня есть несколько примеров, на которые вы, возможно, захотите посмотреть:

Stemming Words

>>>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'), ...]

Два приведенных выше примера кода взяты из примеров книг nltk.Я написал, чтобы вы могли принять его за чистую монету независимо от того, используется он или нет.
Подумайте, как совмещать обе функции.Они служат вашей цели?
Также вы можете заглянуть в STOPWORDS для того, чтобы вывести только собаку из первого предложения, которое вы дали.

...