Создание словаря с процентами частоты слов в порядке убывания - PullRequest
0 голосов
/ 23 марта 2020

Я создал словарь, показывающий частоты слов в качестве значений. Прежде всего мне нужно преобразовать эти частоты в проценты. Общее количество слов составляет 150482. Во-вторых, мне нужно поместить этот словарь в порядке убывания (на основе значений, которые являются частотами для слов в качестве ключей) и сравнить его с другим словарем, в котором часто встречаются слова. Любая идея, как сделать это двумя вещами: а именно изменить значения в процентах и ​​поместить их в порядке убывания в одном дицитаре (эта последняя часть, если необходимо только для сравнения) и во-вторых, сравнивая этот словарь со словарем частых слов. Вот первый словарь, который мне нужен, чтобы изменить значения в процентах.


di=dict()
with open('content.txt',encoding='utf8') as newtext:
    for line in newtext:
        line=line.rstrip()
        words=line.split()
        for word in words:
            di[word]=di.get(word,0)+1

Цель состоит в том, чтобы выяснить, какой процент часто встречающихся слов в словаре частых слов встречается в ди (который показывает частоту слов в текстовом файле). Первый словарь похож на {the: TRUE}. Другими словами, нет ценностей. Просто ключи - это слова, которым необходимо найти их встречаемость с соответствующим процентом частоты в тексте файла.

Ответы [ 2 ]

4 голосов
/ 23 марта 2020

Хороший старт - использование collections.Counter и его most_common метод:

from collections import Counter

with open('content.txt',encoding='utf8') as newtext:
    c = Counter(word for line in newtext for word in line.rstrip().split())

by_count = c.most_common()  # e.g. [('the', 123), ('a', 83), ...]

Затем вы можете манипулировать этим, чтобы получить частоты:

total = sum(c.values())
by_freq = [(k, v/total) for k, v in by_count]
# or in Python2:
# by_freq = [(k, float(v)/total) for k, v in by_count]
0 голосов
/ 23 марта 2020

Это должно сработать и вывести процентный словарь, как вы ожидали.

from collections import Counter
percentage_dict = {}
with open('content.txt',encoding='utf8') as newtext:
    c = Counter(word for line in newtext for word in line.rstrip().split())
total_words = sum([j for j in dict(c).values()])
for i, j in dict(c).items():
    percentage_dict[i] = (j/total_words)*100
print(sorted(percentage_dict.items(), reverse=True))
...