Python3: подсчет вхождения символов во вложенном дикте - PullRequest
0 голосов
/ 17 февраля 2020

В настоящее время я работаю над небольшим фрагментом кода и, похоже, наткнулся на контрольно-пропускной пункт. Мне было интересно, можно ли найти наиболее распространенное вхождение символа, который следует за определенной c группой символов?

Например, скажем, у меня есть следующее предложение:

"fishies are super neat, a fish is a good pet. also, fishing is for dads."

Как бы я мог определить, например, наиболее распространенный символ, который появляется после фрагмента "fish"?

В этом конкретном c примере, выполняя это вручную, я получаю что-то вроде этого:

{"i": 2, " ": 1}

В настоящее время у меня есть этот кусок кода, написанный для захвата части слова "fi sh":

b = Class(n, 'file.txt')
ngrams = [b.file[i:i+n] for i in range(len(b.file)-1)]

это разделит весь текст на 4 части следующим образом: ['fish', 'ishi', 'shie', 'hies', 'ies ', 'es a'.....]

Моя цель - объединить эти две мысли, чтобы я мог напечатать что-то похожее на следующее:

{'fish' : {'i':2, ' ':1} ..... }

В настоящее время у меня также есть defaultdict, определенный в __init__, например, так: self.counts=defaultdict(lambda: defaultdict(int))

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

b.counts = {i : { j : 5 for j in ngrams } for i in ngrams }

5 - это просто заполнитель, чтобы я мог видеть, что напечатано. j in ngrams также был заполнителем, чтобы увидеть, что напечатано. Любой вклад или идеи от кого-либо будет принята с благодарностью!

Ответы [ 3 ]

1 голос
/ 17 февраля 2020

Вы можете попробовать что-то вроде этого:

import re
from collections import Counter

sentence = "fishies are super neat, a fish is a good pet. also, fishing is for dads."
word = 'fish'
result = {}
result[word] = Counter(re.findall(f'{word}(.)', sentence, flags=re.IGNORECASE))

print(result)

Обратите внимание, что это также будет подсчитывать случаи, когда искомый фрагмент появляется в середине слова. Если вы хотите считать только слова, начинающиеся с фрагмента, вы можете использовать что-то вроде re.findall(f'\\W{word}(.)').

1 голос
/ 17 февраля 2020
sentence = "fishies are super neat, a fish is a good pet. also, fishing is for dads."
s_list = sentence.split("fish")
stat = {}
for i in s_list[1:]:
    if i[0] in stat.keys():
        stat[i[0]] += 1
    else:
        stat[i[0]] = 1

print(stat)
1 голос
/ 17 февраля 2020
import re

raw_string = "fishies are super neat, a fish is a good pet. also, fishing is for dads."

key =  ['fish', 'ishi', 'shie', 'hies']
out = {}
for item in key:
    data = []
    for word in re.findall(item+'.', raw_string):
        data.append(word[-1])
    results = {item:data.count(item) for item in data}
    out[item] = results

Выход:

{'fish': {'i': 2, ' ': 1}, 'ishi': {'e': 1, 'n': 1}, 'shie': {'s': 1}, 'hies': {' ': 1}}
...