Создание словаря с процентным содержанием слов в порядке убывания

Я создал словарь, показывающий частоты слов как значения. Прежде всего мне нужно преобразовать эти частоты в проценты. Общее количество слов - 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

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


person Community    schedule 23.03.2020    source источник
comment
collections.Counter может быть для вас хорошим вариантом docs.python.org/3/ library / collections.html # collections.Counter   -  person Iain Shelvington    schedule 23.03.2020
comment
Вам также может понадобиться OrderedDict() вместо обычного dict.   -  person Ala Tarighati    schedule 23.03.2020


Ответы (2)


Хорошим началом будет использование collections.Counter и его _ 2_:

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]
person schwobaseggl    schedule 23.03.2020
comment
Что именно заканчивается пустым диктатом? - person schwobaseggl; 23.03.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))
person Underoos    schedule 23.03.2020
comment
Я просто получаю слова без частот. Просто слова, некоторые повторялись по несколько раз в разных местах. - person ; 23.03.2020
comment
Для меня это сработало именно так, как и ожидалось. Не могли бы вы опубликовать полученный результат. - person Underoos; 23.03.2020