本次代码基于用python实现英文词频统计,重复部分不再赘述。
具体参考如下链接的方法
Python安装jieba库的具体步骤
我把下载的文件解压到了桌面,如下是我的操作
1.要注意与英文的区别,英文里要把标点替换成空格,中文里要把标点删去,而不是换成空格。为什么不用remove?因为remove只是换掉第一个出现的标点。所以还是采用replace。
2.在对列表循环的过程中执行remove操作,会产生问题。所以,在去除单个字的词的时候,我们新建了一个列表。而不是在原列表中移除单个字的词。
try_list = [1,2,1,1,3,4,1,21,1,1]
for i in try_list:
if i == 1:
try_list.remove(i)
print(try_list)
#1并没有删完
#[2, 3, 4, 21, 1, 1]
若要进一步探究原因,可访问如下链接
python中remove的一些坑
import jieba
#获得去除标点的文本
def get_text(file_name):
with open(file_name, 'r', encoding='utf-8') as fr:
text = fr.read()
#要删除的标点
del_ch = ['《',',','》','\n','。','、',';','"',\
':',',','!','?',' ']
for ch in del_ch:
text = text.replace(ch,'')#这里无需替换成空格
return text
#文件名改为要分析的文件
file_name = 'threekingdoms.txt'
text = get_text(file_name)
vlist = jieba.lcut(text)#调用jieba实现分词,返回列表
res_dict = {}
#进行词频统计
for i in vlist:
res_dict[i] = res_dict.get(i,0) + 1
res_list = list(res_dict.items())
#降序排序
res_list.sort(key = lambda x:x[1], reverse = True)
fin_res_list = []
#去除单个字的词
for item in res_list:
if(len(item[0])>=2):
fin_res_list.append(item)
for i in range(100):
word,count = fin_res_list[i]
pstr = str(i+1) + ':'
print(pstr, end=' ')
print(word,count)
在最后的处理有所不同,这个主要是受老师的启发
import jieba
#获得去除标点的文本
def get_text(file_name):
with open(file_name, 'r', encoding='utf-8') as fr:
text = fr.read()
#要删除的标点
del_ch = ['《',',','》','\n','。','、',';','"',\
':',',','!','?',' ']
for ch in del_ch:
text = text.replace(ch,'')#这里无需替换成空格
return text
#文件名改为要分析的文件
file_name = 'threekingdoms.txt'
text = get_text(file_name)
vlist = jieba.lcut(text)#调用jieba实现分词,返回列表
res_dict = {}
exclude = ['却说','不能','如何','左右','二人','不可',\
'荆州','如此','商议','主公','军士']
#进行词频统计
for i in vlist:
if len(i)<=1:
continue
elif i in exclude:
continue
elif i == '玄德曰':
ri = '玄德'
elif i == '孔明曰':
ri = '诸葛亮'
elif i == '孔明':
ri = '诸葛亮'
else:
ri = i
res_dict[ri] = res_dict.get(ri,0) + 1
res_list = list(res_dict.items())
#降序排序
res_list.sort(key = lambda x:x[1], reverse = True)
for i in range(10):
word,count = res_list[i]
pstr = str(i+1) + ':'
print(pstr, end=' ')
print(word,count)