Получить частоту букв в предложении - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь создать код, в который я мог бы ввести случайное предложение и посчитать частоту повторения буквы в этой строке:

def getfreq(lines):
    """ calculate a list with letter frequencies

    lines - list of lines (character strings)

    both lower and upper case characters are counted.
    """
    totals = 26*[0]
    chars = []
    for line in lines:
       for ch in line:
           chars.append(totals)

    return totals

    # convert totals to frequency
    freqlst = []
    grandtotal = sum(totals)

    for total in totals:
        freq = totals.count(chars)
        freqlst.append(freq)
    return freqlst

До сих пор я достиг добавления каждой буквыввода в списке (символы).Но теперь мне нужен способ подсчитать, сколько раз персонаж возвращается в этот список, и выразить это с частотой.

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Без collections.Counter:

import collections

sentence = "A long sentence may contain repeated letters"

count = collections.defaultdict(int)  # save some time with a dictionary factory
for letter in sentence:  # iterate over each character in the sentence
    count[letter] += 1  # increase count for each of the sentences

Или, если вы действительно хотите сделать это полностью вручную:

sentence = "A long sentence may contain repeated letters"

count = {}  # a counting dictionary
for letter in sentence:  # iterate over each character in the sentence
    count[letter] = count.get(letter, 0) + 1  # get the current value and increase by 1

В обоих случаях в словаре count каждая буква будет отличатьсятак как его ключ и его значение будут указывать количество раз, с которым встречалась буква, например:

print(count["e"])  # 8

Если вы хотите, чтобы оно не чувствительно к регистру, обязательно добавьте letter.lower() при добавлении его всосчитать.

0 голосов
/ 19 мая 2018

Вы можете использовать набор для сокращения текста до уникальных символов, а затем просто считать:

text = ' '.join(lines)  # Create one long string
# Then create a set of all unique characters in the text
characters = {char for char in text if char.isalpha()}
statistics = {}         # Create a dictionary to hold the results
for char in characters: # Loop through unique characters
    statistics[char] = text.count(char) # and count them
0 голосов
/ 19 мая 2018

В модуле collections есть очень удобная функция, Counter, которая будет вычислять частоту объектов в последовательности:

import collections
collections.Counter('A long sentence may contain repeated letters')

, которая выдаст:

Counter({' ': 6,
         'A': 1,
         'a': 3,
         'c': 2,
         'd': 1,
         'e': 8,
         'g': 1,
         'i': 1,
         'l': 2,
         'm': 1,
         'n': 5,
         'o': 2,
         'p': 1,
         'r': 2,
         's': 2,
         't': 5,
         'y': 1})

В вашем случае вы можете объединить свои строки, например, используя ''.join(lines), прежде чем переходить в Counter.

Если вы хотите достичь аналогичного результата, используя необработанные словари, вы можете захотеть сделать что-то вроде следующего:

counts = {}
for c in my_string:
    counts[c] = counts.get(c, 0) + 1

В зависимости от вашей версии Python это может быть медленнее, но использует метод .get() из dict, чтобы либо вернуть существующий счетчик, либозначение по умолчанию перед увеличением числа для каждого символа в вашей строке.

...