中文的词频统计是基于英文的词频统计,先使用jiaba库对中文文章进行分词。所以首先掌握英文文章的词频统计,中文文章的词频统计也就迎刃而解。
英文文章词频统计:
由于英文文章存在大小写,可能会因为大小写的不同导致同一个词统计多次;或者会对标点符号进行统计,因此在进行统计前要对英文文章进行一定的处理:
def a():
txt=open("hamlet.txt","r").read()
txt=txt.lower()#将文本中所有的字符都转译为小写,方便词频统计,避免出现同一个单词因大小写不同统计多次
for b in '"!#$%()*+-\'.,:;?':
txt=txt.replace(b," ")
return txt
用a函数进行文章处理,lower函数将所有的英文字母统一为小写字母,replace函数将所有的标点符号都用空格替换。(如果还有未替换的标点符号在第四行中补充即可)
chuli=a()
words=chuli.split()
split有分词的功能,默认以空格为依据,并将分好的词储存到word列表中。
counts={}
for i in words:
if i in counts:
counts[i]=counts[i]+1
else:
counts[i]=1
此步骤是对每个单词进行统计,结果保存到counts字典中,此时就会存在一个判定,判定字典中有没有此单词,如果没有就新建一个键值对,如果有的话就对原有键值进行+1。
此代码可以精简成以下代码:
counts[word]=counts.get(word,0)+1
最后便是对统计好的词进行排序:
counts_order=sorted(counts.items(),key=lambda x:x[1],reverse=True)#这句直接使用了sortd函数对字典进行由高到低的排序
for i in range(len(counts_order)):
print("{:<10} {:<5}".format(counts_order[i][0],counts_order[i][1]))
回归到了经典的问题:按照字典的值进行排序,此处使用的是sorted函数进行排序,若为true则为由大到小,如果改为false则为由小到大。(切记一定要写成counts.items)
最后将输出结果进行美化即可。
中文词频统计:
中文的词频统计只是在程序的开头用jieba库对中文进行分词处理,后续统计方式和英文一样啦!