Классификация текста с помощью токена из двух слов

#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) нужные вам пары, что означает, что вам не нужно использовать приведенный выше код заранее.