Я тренирую себя с некоторыми текстовыми данными, пытаясь сделать некоторые простые действия над ним. Сначала слово "данные" было с частотой 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
Кто-нибудь может объяснить, почему?
Что не так с вашим кодом
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)
которые возвращают dict, который будет иметь каждое слово только один раз.
В вашем случае это дает вам счет как 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)