#python #nltk
#python #nltk
Вопрос:
Я пытаюсь извлечь некоторую ключевую информацию, используя NLTK и токенизацию word в рекламных объявлениях.
Например: «Максимальная вместимость помещения — 800 человек, курение запрещено, детям старше 12 лет запрещено …»
Мой вопрос: — (максимальная емкость) имеет значение, отличное от емкости. — отсутствие курения отличается от курения.
Как я могу маркировать составные слова для анализа? Я не хочу прерывать [«нет», «курение»] Я хочу иметь токен [«не курить»]
word_tokenize(text)
Кроме того, когда я помечаю и удаляю стоп-слова, я теряю отрицательное значение слов.
Ответ №1:
Я думаю, что вы ищете ngrams от NLTK
from nltk import ngrams
text = "The room has max capacity of 800 people no smoking allowed no children above 12 yr old ..."
pairs = ngrams(text.split(), 2) # change the 2 here to however many words you want in each group
for pair in pairs:
print(pair)
> ('The', 'room')
('room', 'has')
('has', 'max')
('max', 'capacity')
('capacity', 'of')
('of', '800')
('800', 'people')
('people', 'no')
('no', 'smoking')
('smoking', 'allowed')
('allowed', 'no')
('no', 'children')
('children', 'above')
('above', '12')
('12', 'yr')
('yr', 'old')
('old', '...')
Надеюсь, это поможет
Редактировать:
Могу ли я порекомендовать, если вы собираетесь использовать TF-IDF, sklearn.feature_extraction.text.TfidfVectorizer
который имеет ngram_range
в качестве параметра ngram_range=(2, 2)
нужные вам пары, что означает, что вам не нужно использовать приведенный выше код заранее.