基于Python的汉字字频统计实验

实验内容

针对不同语料统计汉字的字频,并进行比较。

实验要求和目的

给出前 100 个汉字高频字的频率统计结果;

分别给出前 1、20、100、600、2000、3000、6000 汉字的字频总和;

计算汉字的熵值;

针对不同规模语料重复上述实验;

以图表的形式表示上述结果;

提交实验报告,给出详细实验过程和结果;提交源代码和可执行程序。

实验环境

操作系统 macOS Sierra

内存 16G

开发语言 Python

程序主要算法

统计字频,利用 Python 内置的逐行读取和行内逐字读取功能进行字频统计,建立一个 dict 类型的变量用于记录每个字对应的个数,如果读取的字在 dict 中出现过,则 value 值加一,如果读取到的字在 dict 中未出现过,则在 key 值中添加新读取的字。核心代码如下:

with open(filepath, 'r') as txt_file:
for line in txt_file:
ustr = line.decode(encoding)
       for uchar in ustr:
           if is_chinese(uchar):
                       account += 1
                                  if _dict.has_key(uchar):
                                      _dict[uchar] = _dict[uchar] + 1
                                 else:
                                                         _dict[uchar] = 1

实验过程

首先进行语料的收集,我收集到有“人民日报 800 万字语料库”、“搜狗新闻库”,并在网上找了一些金庸的小说 TXT 版本。

然后进行代码的编写,先确定了核心算法,就是第四步中提及的代码,然后编写了如下函数完成实验指导中的要求:

给出前 100 个汉字高频字的频率统计结果,对应函数为:def cal_chinese_word_top100(_dict,_account):

分别给出前 1、20、100、600、2000、3000、6000 汉字的字频总和。对应代码为:def cal_chinese_word_7(_dict,_account):

计算汉字的熵值。对应代码为:def cal_entropy(_list):

实验结果

针对人民日报(800 万级语料)和金庸的小说《倚天屠龙记》(30 万级语料),进行字频分析,对比如下:

人民日报语料:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PEJsQfBE-1654688388067)(https://www.writebug.com/myres/static/uploads/2022/6/8/843c6929780c7f869e15ab45c2ff1042.writebug)]

前 1、20、100、600、2000、3000、6000 汉字的字频总和: 0.035573727683 0.169908955911 0.403422616933 0.834240279379 0.988090484587 0.998732545555 0.998732545555

《倚天屠龙记》

前 1、20、100、600、2000、3000、6000 汉字的字频总和: 0.018951611838 0.213809263413 0.472524917909 0.837447793249 0.983958229316 0.997836441303 0.997836441303

实验结论和体会

实验结论:

通过对字频的统计。我发现了汉语的以下几个特征:

常用字大概为 2000 个左右,剩下的字可被看作是不常用字

汉字是一种熵值很大的文字,换句话说,汉字是一种文字意义丰富的文字。
频的统计。我发现了汉语的以下几个特征:

常用字大概为 2000 个左右,剩下的字可被看作是不常用字

汉字是一种熵值很大的文字,换句话说,汉字是一种文字意义丰富的文字。

猜你喜欢

转载自blog.csdn.net/newlw/article/details/125191071