НЛП - когда я «опускаю» свой текст, некоторые слова теряют свою частоту вместо того, чтобы добавлять больше - PullRequest
0 голосов
/ 16 октября 2018

Я тренируюсь с некоторыми текстовыми данными, пытаясь выполнить с ними несколько простых действий.Сначала слово «Данные» было с частотой 7, но затем я нашел в том же тексте больше слов, связанных с ним «данные», поэтому я опустил весь текст, чтобы получить пропущенные слова.конечная частота для «данных» - только 3. Может ли кто-нибудь попытаться мне помочь?

## First Word Frequency calculation:

from nltk.corpus import stopwords

import string

stop_list = stopwords.words('english') + list(string.punctuation)

tokens_no_stop = [token for token in tokens if token not in stop_list]

word_frequency_no_stop = Counter(tokens_no_stop)

for word, freq in word_frequency_no_stop.most_common(20):
     print(word, freq)

Данные 7

проекты 5

Люди 4

системы 4

Высокие 4

## Second Word Frequency calc:

all_tokens_lower = [t.lower() for t in word_frequency_no_stop] 

total_term_frequency_normalised = Counter(all_tokens_lower )

for word, freq in total_term_frequency_normalised.most_common(20):
    print(word, freq)

данные 2

проект 2

управление 2

навыки 2

Кто-нибудь может объяснить, почему?

1 Ответ

0 голосов
/ 16 октября 2018

Что не так с вашим кодом

all_tokens_lower = [t.lower() for t in word_frequency_no_stop]

В строке выше используйте токены вместо word_frequency_no_stop.

Вы получили значение word_frequency_no_stop из

word_frequency_no_stop = Counter(tokens_no_stop)

, которые возвращают дикт, который будет иметь каждое слово только один раз.

В вашем случае это означает, что вы рассчитываете как 2 coz, у него будет слово с заглавными буквами и слово в нижнем регистре.

например.word_frequency_no_stop = { 'Project': 7, 'project': 2}

, поэтому он будет возвращать счет как 2 и для других слов

Используйте код ниже

stop_list = stopwords.words('english') + list(string.punctuation)

tokens_no_stop = [token.lower() for token in tokens if token not in stop_list]

word_frequency_no_stop = Counter(tokens_no_stop)

for word, freq in word_frequency_no_stop.most_common(20):
     print(word, freq) 
...