首页 > 解决方案 > 我得到的结果与我在 python 中的代码不一致。需要为我的字母频率代码省略一些字符,但它们仍然出现

问题描述

我正在编写一个小东西来计算文本文件中每个字母的数量,计算它们的频率并将它们与这个进行比较,我用英文做了,没问题,但是当我换成法语文本文件时,我得到了一些奇怪的东西出现。首先这是我的代码:

from unidecode import unidecode
fhand = open('samplefr.txt')
c = dict()
total = 0
for line in fhand:
    line = line.rstrip()
    line = line.replace(" ","")
    line = line.translate(line.maketrans('','',string.punctuation))
    line = line.lower()
    line = unidecode(line, "utf-8")
    for words in line:
        total = total + 1
        c[words] = c.get(words,0)+1
print(total)
f = sorted([(v,k) for k,v in c.items()])
print(f)
for v in f:
    print(v[1],'=',v[0]/total*100, '%')

这是我得到的结果我 不明白为什么字符“'<>()甚至空格都出现在结果中。感谢您的帮助。

标签: pythonpunctuation

解决方案


对于空格的问题,可能是文本包含不同类型的空格。Unicode 包含多个空格(请参阅此处),您只过滤掉这一行中的一个:

line = line.replace(" ","")

我认为其他符号可能存在​​同样的问题。我手动测试了您的代码,当我使用您提到的符号创建一个字符串时它可以工作。

如果没有输入文件,很难进一步研究问题。我建议您检查文件的编码。此外,查看文本中符号的 unicode 是否与您在代码中过滤掉的符号的 unicode 相同。


推荐阅读