Метод/инструмент для извлечения ключевых слов из списка предложений

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

Например:

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, для извлечения ключевых слов, однако, похоже, вы используете их больше для извлечения значения из блока данных, например всего документа или абзаца, а не для пометки тысяч уникальных, но похожих отдельных предложения.

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

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

person Steven    schedule 18.03.2012    source источник
comment
Что вы подразумеваете под уникальным ключевым словом? Например, если вы вводите, что собака бежала быстрее, чем кошка, вы помечаете это как собаку или кошку? Как можно ожидать, что алгоритм определит одиночный уникальный тег, суммирующий все предложение?   -  person jogojapan    schedule 19.03.2012
comment
Извините, просто имею в виду ключевые слова... в вашем примере подходят собака и кошка.   -  person Steven    schedule 21.03.2012


Ответы (1)


Я думаю, что то, что вы подразумеваете под присоединением идентификатора, похоже на POS-теги nltk (части речи) в сочетании с определением корней. Это ссылка на книгу 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'), ...]

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

person Aamir Mushtaq    schedule 18.03.2012