计算每种字符类型的数量,并将结果显示为条形图



我正在尝试使用Ascii字符集来计算"priority and prejurist.txt"的每个字符类型的数量,并将结果显示为条形图。

这是我的导师提供的代码。

Max_ascii = 127
Min_ascii = 32
a_place = 97
z_place = 122
file = open('pride-and-prejudice.txt')
training = file.read()
int_text = []
maxchars = len(training)
int_text = np.zeros(maxchars)
i = 0
for letter in training:
ascii_val = ord(letter)
if (ascii_val >= Min_ascii) and (ascii_val <= Max_ascii):
int_text[i] = ascii_val
i+=1
counts = np.zeros(Max_ascii-Min_ascii+1)
num_chars = len(counts)
ascii_vals = np.arange(Min_ascii,Max_ascii+1,1)
i=0
for val in ascii_vals:
counts[i] = np.sum(int_text==val)
i+=1
plt.bar(np.arange(1,z_place-a_place+2,1),counts[a_place-Min_ascii:z_place-Max_ascii])
plt.show()

我的问题是这个代码的含义是什么?

counts[a_place-Min_ascii:z_place-Max_ascii]

我知道它确实计算了从A到Z的字符,但为什么它应该写为"[A_place-Min_ascii:Z_place-Max_ascii]"?为什么"计数[a_place:z_place]"不起作用?

谢谢!

我不知道你的导师在说什么,但我会说他/她有一种…有趣的编码风格。

让我给你看看。除了你导师的最后两行外,所有的都可以重写成这样:

from collections import Counter
from string import ascii_lowercase
with open('pride_and_predjudice.txt') as f:
chars = Counter(char for line in f for char in line.lower())
chars = {char: chars[char] for char in ascii_lowercase}

此时,chars包含一个按字母顺序排列的dict(假设您使用的是python 3.6+(,其中包含所有(小写(字母的计数。你应该能够做下面这样的事情来显示它:

plt.bar(np.arange(len(chars)), np.array(chars.values()))
plt.show()

试试这个,看看你是否取得了一些成功。祝你好运

最新更新