我需要获取要提取和清除的文件中字符和字母对的频率。
当前代码提取文件,清理文本并删除所有空格。代码的后半部分输出字符的频率,但是输出在multiDimension_list中,这不是所需的输出。
我一直无法弄清楚如何获得字母对。
例如:我的文字中的项目按顺序包含多个字母。
aa aaaa oooo zzz ssss等。我需要获得这些组合。
预先感谢您提出解决这些问题的建议和帮助。
from collections import Counter
new_words = []
with open ('words.txt', 'r') as infile:
lines = [line for line in infile.readlines() if line.strip()]
for line in lines:
clean_line = re.sub(r'(\b(section\s[\d]{1,2})\b)', '', line)
clean_line_2 = re.sub(r'([()])', '', clean_line)
new_words.append(clean_line_2.lower().replace('.', '').replace(';', '').replace('\n', '').replace('-', ' ').replace(" ", ""))
if len(new_words) > 0:
for item in new_words:
print (Counter(item))
**outout:**
Counter({'a': 8, 'l': 3, 'i': 2, 'h': 2, 'z': 1, 'j': 1, 'n': 1, 's': 1, 'r': 1, 'u': 1, 'w': 1, 'f': 1, 't': 1})
Counter({'a': 14, 'n': 4, 'e': 4, 'i': 3, 'h': 3, 'l': 3, 'w': 2, 'd': 2, 'o': 2, 'f': 2, 'r': 1, 't': 1, 's': 1, 'y': 1, 'k': 1, 'u': 1, 'j': 1})
Counter({'a': 15, 'b': 6, 'i': 6, 'h': 4, 'w': 3, 'n': 3, 'f': 2, 's': 2, 'r': 2, 'k': 2, 't': 2, 'm': 1, 'd': 1, 'g': 1, ',': 1, 'u': 1})
答案 0 :(得分:1)
如果我正确地理解了这个问题,则所有字符都需要一个计数器,而对字符则需要另一个计数器。
import re
from collections import Counter
new_words = []
with open('words.txt', 'r') as infile:
lines = [line for line in infile.readlines() if line.strip()]
for line in lines:
clean_line = re.sub(r'(\b(section\s[\d]{1,2})\b)', '', line)
clean_line_2 = re.sub(r'([()])', '', clean_line)
new_words.append(clean_line_2.lower().replace('.', '').replace(';', '').replace('\n', '').replace('-', ' ').replace(" ", ""))
加入所有行以计算文件中的总频率:
new_words_unit = ''.join(new_words)
if len(new_words_unit) > 0:
print (Counter(new_words_unit))
Out: # smth like this
Counter({'a': 8, 'l': 3, 'i': 2, 'h': 2, 'z': 1, 'j': 1, ...})
现在定义chunk
函数可以将字符分为几对并对其进行计数:
def chunk(iterable, size=2):
length = len(iterable) - 1 # stop before reaching last character
result = []
for i in range(length):
result.append(iterable[i:i+size])
return result
size = 2
new_words_pairs = chunk(new_words_unit, size) # chunk string
new_words_pairs = [''.join(i) for i in new_words_pairs if len(i) == size] # filter single chars
print(Counter(new_words_pairs))
Out:
Counter({'aa': 'ao': 1, 'dd': 2, 'df': 1, 'dr': 1, ...})
注意:所有这些对都相互交织。即'abcc' -> 'ab', 'bc', 'cc'
答案 1 :(得分:0)
第二部分:
from itertools import groupby
my_counts=[(key, len(list(group))) for key, group in groupby(new_words)]
这应该让您为列表中的每个唯一项计数