利用python做中文词频分析
摘要:利用python做中文词频 分析,分析文本中词频出现的次数,文本可以保存在TXT或者CSV文件中,用到csv库和正则表达式。需要有文本处理和正则表达式的基础,不会请先学习这方面内容。
导入库:
# coding=utf-8 编码形式
import sys #字符串处理方式
import re #包含正则表达式
import csv
因为要用到中文,所以用 coding=utf-8设定为utf-8格式,否则会出现乱码,这个根据数据源的编码形式改变,如果数据源是其他的格式要按照数据源更改格式,或者利用Notpad更改数据源格式为utf-8。
CSV全部代码:
# coding=utf-8 设定编码形式
# Author: luoqingyu
import sys #字符串处理方式
import re #包含正则表达式
import csv #包含CSV库
reload(sys)
sys.setdefaultencoding('utf8')
wfile = open('result.txt', 'w') #存放结果的文件,放同义一目录下
dict = {}
r = re.compile('[\x80-\xff]+') #正则表达式,表示匹配汉字和标点符号
z1 = re.compile('[\x80-\xff]{2}') #正则表达式,表示匹配1个汉字和标点符号
z2 = re.compile('[\x80-\xff]{4}') #正则表达式,表示匹配2个汉字和标点符号
z3 = re.compile('[\x80-\xff]{6}') #正则表达式,表示匹配3个汉字和标点符号
z4 = re.compile('[\x80-\xff]{8}')
with open('test7.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
print row[4]
x = row[0].encode('gb18030')
i = z4.findall(x) #Z1统计单字,Z4表示统计四字高频
for j in i:
if (j in dict):
dict[j] += 1
else:
dict[j] = 1
dict = sorted(dict.items(), key=lambda d: d[1],reverse=True) #安装value排序
for a, b in dict: #a是中文,b是词出现的次数
if b > 0:
wfile.write(a + ',' + str(b) + '\n')
效果:双字高频
四字高频:
TXT全部代码:
#coding=utf-8
#Author: http://blog.csdn.net/boksic
import sys,re
reload(sys)
sys.setdefaultencoding('utf8')
txt = open('blog.csdn.net.boksic.txt','r').read()
wfile=open('result.txt','w')
r = re.compile('[\x80-\xff]+')
m = r.findall(txt)
dict={}
z1 = re.compile('[\x80-\xff]{2}')
z2 = re.compile('[\x80-\xff]{4}')
z3 = re.compile('[\x80-\xff]{6}')
z4 = re.compile('[\x80-\xff]{8}')
for i in m:
x = i.encode('gb18030')
i = z1.findall(x)
#i+= z2.findall(x)
#i+= z2.findall(x[2:])
#i+= z3.findall(x)
#i+= z3.findall(x[2:])
#i+= z3.findall(x[4:])
#i+= z4.findall(x)
#i+= z4.findall(x[2:])
#i+= z4.findall(x[4:])
#i+= z4.findall(x[6:])
for j in i:
if (j in dict):
dict[j]+=1
else:
dict[j]=1
dict=sorted(dict.items(), key=lambda d:d[1])
for a,b in dict:
if b>0:
wfile.write(a+','+str(b)+'\n')