汉字字频统计程序(Python版+C语言版)

用Python和C语言写了一个统计汉字字频的小程序,作为笔记,以供借鉴。
先上Python版本:

#python 3.4.3 #功能:统计文本中的字频 with open('test.txt', mode='r', encoding='utf-8') as inFile: dict={} # 创建一个空字典 for char in inFile.read(): if '啊'< char <'齄': if char in dict: dict[char]+=1 else: dict.setdefault(char, 1)# 字符不在字典中,则创建键为char,值为1的键值对 with open('HzFreq.txt', mode='w', encoding='utf-8') as outFile:for char, freq in dict.items(): s = '{0}\t{1}\n'.format(char, freq) outFile.write(s)

再看C语言版本:
/* 功能:统计文本文件中的字频 */ #include #define HzNum 6768 int main(void) { int i, c1, c2, j, k, t; unsigned hzfreq[HzNum] = {0}; char inname[20]; printf("请输入源文件名,包含扩展名:"); gets(inname); FILE *in; if ((in = fopen(inname, "rb")) == NULL) { printf("文件打开失败!\n"); return 0; }while (!feof(in)) { c1 = getc(in); if (c1 < 128) // 过滤单字节字符,如\t,\n,英文空格等 continue; c2 = getc(in); if (c1 < 176) // 过滤非汉字,因为这些非汉字也占两个字节,所以要放在c2=getc(in)此行之后 continue; i = (c1-176) * 94 + (c2 - 161); /* 计算机内码中基本汉字有94(行)*94(列),行起始数字为176, 列起始数字为161,因此定位到某一个汉字需用:(c1-176)*94 + (c2 -161) 来计算。*/ if (i>0 && i<=HzNum) // 加入数字在0到6768之间 hzfreq[i]++; // 对应汉字的计数器+1 }FILE *out; printf("\n请输入目标文件名,包含扩展名:"); char outname[20]; gets(outname); if ((out = fopen(outname, "wb")) == NULL) { printf("打开失败!\n"); return 0; }for (i=0; i0) // 加入汉字出现频数大于0 { c1 = i / 94 + 176; // 还原汉字的行号 c2 = i % 94 + 161; // 还原汉字的列号 fprintf(out, "%c%c\t%d\n", c1, c2, hzfreq[i]); // 按照“汉字:频数”的格式输出到文本中 } } fclose(out); fclose(in); system("pause"); return 0; }

比较
  • C语言能让人更深入地理解字频是如何计算出来的,相对地,比较繁琐。
  • Python则显得简便许多,也因此降低了使用门槛。
【汉字字频统计程序(Python版+C语言版)】总结
处理文本的话,python果然很强大。

    推荐阅读