1 前言
这篇文章是对网友在文章的下的提问,做出的解答。
2 问题描述
如何统计文本中单字母、双字母、三字母的频率,考虑单词之间的空格和符号。
3 算法思路
对于统计单字母、双字母、三字母的出现频率:
(1)将文本中单词提取出来(遍历输入的文本,判断当前遍历到的元素是否为字母,若为字母则继续遍历,若不为字母就以此为断点分割出单词)。
注意:在遍历输入的文本时,为保证可以得到所有的单词需要在输入的文本最后加上一个非字母的符号(防止文章最后没有标点符号导致最后一个单词没有被分割出来)。
(2)在遍历输入文本的同时,统计分割出的所有单词数(计算频率时使用),判断该单词是否为单字母、双字母、三字母单词,若是则相应的变量值加1。
(3)在遍历完成后,利用各个变量的值去计算相关类型单词在文本中出现的频率,最后输出即可。
代码清单
统计文本中单字母、双字母、三字母的频率
# 输入文本
str1 = input()
# 和flag和循环中的i组成双指针
flag = 0
# 统计各种单词的数量,用于计算比例
all_word, length1, length2, length3 = 0, 0, 0, 0
# 防止输入文本最后没有标点符号导致最后一个单词没有被算在内
str1 += " "
# 循环分割单词
for i in range(len(str1)):
# i如果字母就跳过
if 65 <= ord(str1[i]) <= 90 or 97 <= ord(str1[i]) <= 122:
continue
# i不是字母就分割
else:
if flag != i:
a = str1[flag:i]
all_word += 1
if len(a) == 1:
length1 += 1
elif len(a) == 2:
length2 += 1
elif len(a) == 3:
length3 += 1
flag = i + 1
print("长度为1单词的比例:", "{:.2f}".format(length1/all_word))
print("长度为2单词的比例:", "{:.2f}".format(length2/all_word))
print("长度为3单词的比例:", "{:.2f}".format(length3/all_word))
实习编辑:李欣容
稿件来源:深度学习与文旅应用实验室(DLETA)