Как найти все слова с определенной частотой встречаемости, исключая некоторые слова - PullRequest
0 голосов
/ 22 марта 2020

Я хочу найти все слова с частотой вхождения >= 30, исключая слова "the", "and", "to" и "a".

Я попробовал следующий код:

import json
from pprint import pprint

with open ('clienti_daune100.json') as f:
    data=json.load(f)

word_list=[]

for rec in data:   
      word_list=word_list + rec['Dauna'].lower().split()
print(word_list[:100], '...', len(word_list), 'Total words.' )

dict = {}

for word in word_list:
    if word not in dict:
        dict[word] = 1
    else:
        dict[word] += 1

w_freq = []

for key, value in dict.items():
    w_freq.append((value, key))   

w_freq.sort(reverse=True)
pprint(w_freq[:100])

Я знаю, что должен поставить условие в словарь, но не могу понять, какое из них.

1 Ответ

2 голосов
/ 22 марта 2020

Сначала отфильтруйте свои данные, а затем вы можете использовать itertools.Counter

from collections import Counter

# I think your data is just a list. So image you have
data = ['the', 'box', 'and', 'the','cat', 'are', 'in', 'that', 'other', 'box']
# List the words we don't like
bad_words = ['the','to', 'a', 'and']
# Filter these words out
words = [word for word in data if word not in bad_words]
# Get the counts
counter = Counter(words)

Результат (который вы можете просто преобразовать в обычный dict, если необходимо)

Counter({'box': 2, 'cat': 1, 'are': 1, 'in': 1, 'that': 1, 'other': 1})

Наконец, вы делаете Ваш фильтр по количеству слов (который в данном случае пуст)

{word: count for word,count in counter.items() if count>=30}
...