Векторизация n-грамм с использованием TfidfVectorizer - PullRequest
0 голосов
/ 31 августа 2018

Я использую TfidfVectorizer со следующими параметрами:

smooth_idf=False, sublinear_tf=False, norm=None, analyzer='word', ngram_range=(1,2)

Я векторизовал следующий текст: "красное солнце, розовое конфета. Зеленый цветок."

Здесь вывод get_feature_names():

['candy', 'candy green', 'coffee', 'flower', 'green', 'green flower', 'hate', 'icecream', 'like', 'moon', 'pink', 'pink candy', 'red', 'red sun', 'sun', 'sun pink']

Поскольку " candy " и " green " являются частью отдельных предложений, почему "candy green" n-грамм создан?

Есть ли способ предотвратить создание n-грамм, порождающих несколько предложений?

1 Ответ

0 голосов
/ 31 августа 2018

Зависит от того, как вы передаете это TfidfVectorizer!

Если передается как один документ, TfidfVectorizer сохранит только те слова, которые содержат 2 или более буквенно-цифровых символов. Пунктуация полностью игнорируется и всегда рассматривается как разделитель токенов. Таким образом, ваше предложение становится:

['red', 'sun', 'pink', 'candy', 'green', 'flower'] 

Теперь из этих токенов генерируются нграммы.

Поскольку TfidfVectorizer - это метод «мешка слов», работающий со словами, появляющимися в документе, он не хранит никакой информации о структуре или порядке слов в одном документе. Если вы хотите, чтобы с ними обращались по отдельности, вы должны сами определить предложения и передать их как разные документы.

Или же передайте свой собственный анализатор и генератор ngram в TfidfVectorizer.

Для получения дополнительной информации о том, как на самом деле работает tfidfvectorizer, см. Мой другой ответ:

...