统计文本中单字母双字母三字母的频率

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计文本中单字母双字母三字母的频率相关的知识,希望对你有一定的参考价值。

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)

以上是关于统计文本中单字母双字母三字母的频率的主要内容,如果未能解决你的问题,请参考以下文章

2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ‘ ‘ 。 每个单词只由小写

统计单词频率

文章字母频率统计

单词统计

单词统计

课堂测试-统计单词个数和字母出现频率