0

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

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

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

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

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

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

Что вы подразумеваете под «уникальным ключевым словом»? Например, если вход «собака бежит быстрее, чем кошка», вы отмечаете ее как «собака» или «кошка»? Как ожидать, что алгоритм определит уникальный тег _single_, который суммирует все предложение? – jogojapan

+0

Извините, просто средние ключевые слова ... в вашем примере будут применяться собака и кошка. – Steven

ответ

4

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

Морфологических Слова

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

Создания Неполного из -Speech Tagged Слово Корпус

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

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

Смежные вопросы