基本原理
我们不采用通过音节来辨别的办法:中文中的双音节(如琵琶、忐忑)、多音节词(如胡萝卜),而是通过大量文本来分别每2字词、3字词、4字词乃至5个及以上的字词做一个切分,每统计一个后再向后偏移1字符,如此往复,直到自然切分标识(标点符号、空格或换行符等)或者文本结束,然后再进行下一段切分统计。(在有一些特殊用途、用于特殊用法时,我们也会把标点符号当成普通文本字符,切分进去)。
理论依据
大数定理:一个随机变量出现的频率是随着样本总数增大而逐渐稳定在某个值附近的。
用这种方法得出来的词频,词频较高的字符块,是真正的词的概率很高,不是词的概率随着词频的降低而增大。
统计示例
双字词:超算-23次 太湖-13次 湖之-13次 无锡-13次 之光-13次 算中-11次 超级-8次
三字词:太湖之-13次 湖之光-13次
四字词:……
代码实现
Python
# -*- coding: utf-8 -*-
def sub_run(path,n): # n 记录每次切片的一组中包含的字符数
f1=open(path,'rb')
stxt=f1.read()
stxt=str(stxt,'utf-8')
f1.close()
tmp_str={}
for i in list(range(len(stxt)-1)):
tmp_str[stxt[i:i+n]]=0
for i in list(range(len(stxt)-1)):
tmp_str[stxt[i:i+n]]+=1
tmp_str=sorted(tmp_str.items(),key=lambda d:d[1],reverse = True)
print('*****'+str(n)+'字符***************')
print(tmp_str)
print('*************************')
filepath='文本.txt' #用于统计用的文本路径
sub_run(filepath,2)
sub_run(filepath,3)
sub_run(filepath,4)