赞
踩
目录
1、本例用 Hamet 文本,代码如下:
- def getText():
- txt = open("./data/hamlet.txt", "r").read() # 读取文件
- txt = txt.lower() # 把所有字母都变成小写,便于统计
-
- #将文本中特殊字符替换为空格
- for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
- txt = txt.replace(ch, " ")
- return txt
-
- hamletTxt = getText()
- words = hamletTxt.split() # 将文本用空格分隔
- counts = {}
- # 统计单词出现的次数
- for word in words:
- counts[word] = counts.get(word,0) + 1
- items = list(counts.items())
-
- # 排序,按单词出现的次数从大到小排好序
- items.sort(key=lambda x:x[1], reverse=True)
-
- # 打印出现次数前10 的单词
- for i in range(10):
- word, count = items[i]
- print ("{0:<10}{1:>5}".format(word, count))
2、统计结果如下
1、先简单介绍一下中文分词的第三方库 jieba(安装命令:pip install jieba)
1)、jieba分词的原理
- 利用一个中文词库,确定中文字符之间的关联概率
- 中文字符间概率大的组成词组,形成分词结果
- 除了分词,用户还可以添加自定义的词组
2)、jieba分词的三种模式
- 精确模式:把文本精确的切分开,不存在冗余单词
- 全模式:把文本中所有可能的词语都扫描出来,有冗余
- 搜索引擎模式:在精确模式基础上,对长词再次切分
3)、jieba库常用函数
函数 | 描述 |
jieba.lcut(s) | 精确模式,返回一个列表类型的分词结果 >>>jieba.lcut("中国是一个伟大的国家") ['中国', '是', '一个', '伟大', '的', '国家'] |
jieba.lcut(s, cut_all=True) | 全模式,返回一个列表类型的分词结果,存在冗余 >>>jieba.lcut("中国是一个伟大的国家",cut_all=True) ['中国', '国是', '一个', '伟大', '的', '国家'] |
jieba.lcut_for_sear ch(s) | 搜索引擎模式,返回一个列表类型的分词结果,存在冗余 >>>jieba.lcut_for_search(“中华人民共和国是伟大的") ['中华', '华人', '人民', '共和', '共和国', '中华人民共 和国', '是', '伟大', '的'] |
jieba.add_word(w) | 向分词词典增加新词w >>>jieba.add_word("蟒蛇语言") |
2、本例用 《三国演义》文本,统计人物出场次数前十的,代码如下:
- import jieba #导入中文分词的库 jieba
-
- # 这些都不是文物的称号,但都是出现次数比较多的,需先列出来
- excludes = {"将军","却说","荆州","二人","不可","不能","如此","如何","左右","商议","主公",
- "军士","军马","引兵","次日","大喜","天下","东吴","于是","今日","不敢","魏兵",
- "陛下","一人","都督","人马","不知"}
-
- txt = open("./data/threekingdoms.txt", "r", encoding='utf-8').read() # 读取文件
-
- words = jieba.lcut(txt) # 用 jieba 库来中文分词
- # 用字典来存储,各个文物的出场次数
- counts = {}
- for word in words:
- if len(word) == 1:
- continue
- # 诸葛亮 和 孔明 是同一个人
- elif word == "诸葛亮" or word == "孔明曰":
- rword = "孔明"
- elif word == "关公" or word == "云长":
- rword = "关羽"
- elif word == "玄德" or word == "玄德曰":
- rword = "刘备"
- elif word == "孟德" or word == "丞相":
- rword = "曹操"
- else:
- rword = word
- counts[rword] = counts.get(rword,0) + 1
-
- # 不是人物就从字典里删除
- for word in excludes:
- del counts[word]
- # 将字典类型的数据转化为 list 类型
- items = list(counts.items())
-
- # 排序,按出现的次数从大到小排好序
- items.sort(key=lambda x:x[1], reverse=True)
-
- # 打印出现次数前10 的人物名字
- for i in range(10):
- word, count = items[i]
- t = "{0:{2}<10}{1:>5}"
- # chr(12288) 是中文字的空格
- print (t.format(word, count,chr(12288)))
3、运行结果如下:
若想要 Hamet 和 《三国演义》文本,可点击这里来下载(密码为:pvdv)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。