Мешок слов после токенизации - PullRequest
0 голосов
/ 02 ноября 2019

Я изучил многие подходы к анализу текста и застрял при создании пакета слов. Я понимаю, что это означает преобразование слов в числа, чтобы машина могла их понять, но проблема в том, что я только что закончил токенизацию, удаление стоп-слов, лемматизацию. И закончился списком слов вроде:

['a', 'b', 'a', 'c', 'd', 'a', 'b']

В основном я решил токенизировать по словам . Некоторые слова повторяются, а не отчетливо. Каждый пример с пакетом слов, который я прочитал, имеет в начале массив предложений, а не массив слов:

['Tom likes blue.', 'Adam likes yellow.' ,'Ann likes red and blue']

Правильно ли подходит мой подход? Имеет ли смысл готовить пакет слов, если у меня есть массив отдельных слов? Или мой токенизация неверна? А может, заказ не тот? Но в некоторых примерах (например, здесь: https://medium.com/@bedigunjit/simple-guide-to-text-classification-nlp-using-svm-and-naive-bayes-with-python-421db3a72d34) мы обычно токенизируем тексты в начале.

Это должно быть частью классификации текста и подготовки к использованию таких алгоритмов, как Наивный Байес, SVM и т. Д., НоЯ застрял в этой точке ... Может быть, я неправильно понял, и из всех моих вхождений следует создать пакет слов, а не один документ?

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

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

['hello', 'like', mountain', 'spring']

просто сделайте его

'hello like mountain spring'

Сделайте это со всеми документами, чтобы у вас был массив, аналогичный массиву из примера

['hello like mountain summer', 'another string here', 'another also here']

И вот с этой формы мы можем начать готовить пакет слов, здесь будет:

{hello, like, mountain, summer, another, string, here, also}

И с этого момента будет довольно легко сосчитать TF, TFID, и именно эту форму ожидает fit_transform от CountVectorizer.

0 голосов
/ 02 ноября 2019

Если вы поделитесь конвейером, будет лучшее обновление. Но с вашим примером это довольно просто -

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(stop_words='english')
op = vec.fit_transform(['Tom likes blue.', 'Adam likes yellow.' ,'Ann likes red and blue'])
print(op.todense())
print(vec.vocabulary_)

Вывод

[[0 0 0 1 1 0 1 0]
 [1 0 0 0 1 0 0 1]
 [0 1 1 1 1 1 0 0]]
{'tom': 6, 'likes': 4, 'blue': 3, 'adam': 0, 'yellow': 7, 'ann': 2, 'red': 5, 'and': 1}
...