很早之前就接触过python,也玩过python许多有趣的东西,比如用pygame做一个飞机大战的游戏啊、用turtle模块简单绘图啊、使用python链接mysql做crud、用python运行R语言脚本、简单爬虫等等,不过现在应该都快忘了。^_^
使用python进行中文词频分析
首先什么是“词频分析”?
词频分析,就是对某一或某些给定的词语在某文件中出现的次数进行统计分析。
我们需要使用python的jieba库。
jieba库:优秀的中文分词组件。支持繁体分词、自定义词典。可以对文档进行三种模式的分词:
1、精确模式:试图将句子最精确地切开,适合文本分析;
2、全模式:把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
3、搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
jieba库中文分词原理
1、利用一个中文词库,确定汉字之间的关联概率。
2、汉字间概率大的组成词组,形成分词结果。
3、除了分词,用户还可以添加自定义词组。
jieba库安装
打开cmd,键入:pip install jieba
待安装成功即可。
pip安装外库的时候可能会安装失败:是因为使用的是国外镜像
解决方法:使用国内镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba
的确这个样子就可以用了
使用pip也要用python进行安装(本文章设计的所有资料末尾会给出)
解压pip文件包后
在pip目录下cmd,输入命令"python setup.py install"
jieba库的简单使用:点击这里
分析刘慈欣小说《三体》(一二三部合集)出现次数最多的词语。
这个案例中分析出了使用数量前三十的词语
如果直接分析的话,会存在非常多的垃圾数据。因为把文档中的标点、空格、没有意义的字、词语全部进行了统计。这并不是我们想要的数据。这个时候我们需要使用停用词表。
停用词表
停用词:停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。
停用词表便是存储了这些停用词的文件。在网上下载停用词表,命名stopwords.txt。(在文末资源中小说和词表都会给出)
统计代码如下
import jieba
txt = open("santi.txt", encoding="utf-8").read()
#加载停用词表
stopwords = [line.strip() for line in open("stopwords.txt",encoding="utf-8").readlines()]
words = jieba.lcut(txt)
counts = {}
for word in words:
#不在停用词表中
if word not in stopwords:
#不统计字数为一的词
if len(word) == 1:
continue
else:
counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(30):
word, count = items[i]
print ("{:<10}{:>7}".format(word, count))
结果如下

使用python进行英文词频统计
英文单词词频统计比较简单,就是根据空格来对文本进行切割,然后统计其单词出现的数量。
代码如下
import string
def stats_words(filename):
"""统计文章中单词的频数"""
# 读取文章中的内容
with open(filename,encoding="utf-8") as fbj:
contents = fbj.read()
contents = contents.lower()
# 解析成单词列表
words = contents.split()
# 去除文章中的标点符号
words = [word.strip(string.punctuation) for word in words]
# 去除重复的单词
words_set = set(words)
# 用于存放单词和频数的字典
words_dir = {}
for key in words_set:
words_dir[key] = 0
# 开始统计单词的频数
for word in words:
if word in words_set:
words_dir[word] += 1
return words_dir
file_name = "test.txt"
# 文章中的标点符号要去除
words_dir = stats_words(file_name)
words_dir = sorted(words_dir.items(), key=lambda x: x[1], reverse=True)
print(words_dir)
结果如下

资源和代码下载
点击下载
链接:https://pan.baidu.com/s/17RQ72nJOyRsrcVaKtWFKyg
提取码:4au3



























































stats_words那里打出冒号,就已经显示invalid syntax了
需要的话,可以加我联系方式,具体看一下哦
提醒:博主的代码先jieba.lcut(),再if word not in stopwords。分词分出了100.00、98等多位数字的word,但是一般的stopwords的列表中只有0-9的个位数字,最后的结果把多位数字都统计进去了。所以用博主的stopwords.txt。