ik分词和jieba分词哪个好_Python 中文 文本分析 实战:jieba分词+自定义词典补充+停用词词库补充+词频统计...

最近项目需要,实现文本的词频分析,折腾了几天才完成任务,有点成就感,最后整理总结一下这部分的内容,希望更多同僚受益。

一.使用前准备

环境:Python3.6

  • 安装结巴:pip install jiaba
  • 下载停用词词典哈工大停用词词典
  • 构建补充词典userdict,后文详解
  • 运行文章最后面的完整代码

二.jieba官网

参考​gitee.com

三.功能介绍

"结巴"中文分词:做最好的Python中文分词组件

  • 支持三种分词模式:
    • 精确模式,试图将句子最精确地切开,适合文本分析;
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

四.算法思路

  • 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

五.使用方法

1、分词

  • jieba.cut方法接受两个输入参数: 1) 第一个参数为需要分词的字符串 2)cut_all参数用来控制是否采用全模式
  • jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细 注意:待分词的字符串可以是gbk字符串、utf-8字符串或者unicode
  • jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),也可以用list(jieba.cut(...))转化为list

代码

#encoding=utf-8
import jiebaseg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print "Full Mode:", "/ ".join(seg_list)  # 全模式seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print "Default Mode:", "/ ".join(seg_list)  # 精确模式seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print ", ".join(seg_list)seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print ", ".join(seg_list)

输出:

【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学【精确模式】: 我/ 来到/ 北京/ 清华大学【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

2、自定义词典补充

  • 开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率
  • 用法: jieba.load_userdict(file_name) # file_name为自定义词典的路径
  • 词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),用空格隔开
  • userdict.txt即补充词库示例
极速模式 20
北京清华大学 5
李小福 2 nr
创新办 3 i
easy_install 3 eng
好用 300
韩玉赏鉴 3 nz
八一双鹿 3 nz
台中
凱特琳 nz
Edu Trust认证 2000
  • 用法示例:
#encoding=utf-8
from __future__ import print_function, unicode_literals
import sys
sys.path.append("../")
import jieba
jieba.load_userdict("userdict.txt")
import jieba.posseg as psegjieba.add_word('石墨烯')
jieba.add_word('凱特琳')
jieba.del_word('自定义词')test_sent = (
"李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿n"
"例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类n"
"「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
words = jieba.cut(test_sent)
print('/'.join(words))print("="*40)result = pseg.cut(test_sent)for w in result:print(w.word, "/", w.flag, ", ", end=' ')print("n" + "="*40)terms = jieba.cut('easy_install is great')
print('/'.join(terms))
terms = jieba.cut('python 的正则表达式是好用的')
print('/'.join(terms))print("="*40)
# test frequency tune
testlist = [
('今天天气不错', ('今天', '天气')),
('如果放到post中将出错。', ('中', '将')),
('我们中出了一个叛徒', ('中', '出')),
]for sent, seg in testlist:print('/'.join(jieba.cut(sent, HMM=False)))word = ''.join(seg)print('%s Before: %s, After: %s' % (word, jieba.get_FREQ(word), jieba.suggest_freq(seg, True)))print('/'.join(jieba.cut(sent, HMM=False)))
print("-"*40)

之前: 李小福 / 是 / 创新 / 办 / 主任 / 也 / 是 / 云 / 计算 / 方面 / 的 / 专家 /

加载自定义词库后: 李小福 / 是 / 创新办 / 主任 / 也 / 是 / 云计算 / 方面 / 的 / 专家 /

3、停用词词库补充

  • 停用词:停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。但是,并没有一个明确的停用词表能够适用于所有的工具。甚至有一些工具是明确地避免使用停用词来支持短语搜索的。
  • 使用哈工大停用词词库:
下载地址​download.csdn.net

4、词频统计

PYTHON3.6对中文文本分词、去停用词以及词频统计_WhiteRiver的博客-CSDN博客​blog.csdn.net
47a000cc1069331e6670c73176fe9712.png

完整代码:

from collections import Counter
import jieba
jieba.load_userdict('userdict.txt')# 创建停用词list
def stopwordslist(filepath):stopwords = [line.strip() for line in open(filepath, 'r').readlines()]return stopwords# 对句子进行分词
def seg_sentence(sentence):sentence_seged = jieba.cut(sentence.strip())stopwords = stopwordslist('G:哈工大停用词表.txt')  # 这里加载停用词的路径outstr = ''for word in sentence_seged:if word not in stopwords:if word != 't':outstr += wordoutstr += " "return outstrinputs = open('hebing_wenbenwenben.txt', 'r') #加载要处理的文件的路径
outputs = open('output.txt', 'w') #加载处理后的文件路径
for line in inputs:line_seg = seg_sentence(line)  # 这里的返回值是字符串outputs.write(line_seg)
outputs.close()
inputs.close()
# WordCount
with open('output.txt', 'r') as fr: #读入已经去除停用词的文件data = jieba.cut(fr.read())
data = dict(Counter(data))with open('cipin.txt', 'w') as fw: #读入存储wordcount的文件路径for k, v in data.items():fw.write('%s,%dn' % (k, v))

相关文章

手把手教你制作 中英文 词云 | python demo​blog.csdn.net
bd0826152b67154ff3cf91f69b6a6c58.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于智能手机Android平台音乐播放器全程开发实战

基于android开发的智能手机平台的应用越来越多,目前也是一块比较热门的技术,本项目为基于android系统的音乐播放器项目,学习本项目的目的是为了让学员尽快掌握android领域的小应用的开发.项目从需求分析起步,完善了音乐播放器的所有功能,课程讲解深刻。 项目描述: 1、支持音乐在…

RAC集群故障恢复CRS-4047,CRS-4000

知识点: RAC是real application clusters的缩写,译为“实时应用集群”,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。 主要作用: (1)多节点负载均衡; (2)提供高可用:故障容错和无缝切换功…

急用物料怎么办???

咱们硬件工程师,一般都属于研发部。既然是研发,那么就具有一点研究的性质,有可能遇到预想不到的问题,在解决这些问题的过程中,难免会突然要用到一些器件。这时问题就来了,公司没有这个器件啊,但…

python 分位数计算代码_Python数据分析第十一节 数据运算

数据运算不仅仅是加减乘除的基本运算,还要包括数据的比较,汇总和相关性的计算等等,这一节我们将计算的问题帮大家汇总出来~目录一. 加减乘除运算二. 比较运算三. 汇总运算count 非空值计数sum 求和其他(均值,最大最小值…

自己动手写一个 strace

这次主要分享一下一个动手的东西,就是自己动手写一个 strace 工具。用过 strace 的同学都知道,strace 是用来跟踪进程调用的 系统调用,还可以统计进程对 系统调用 的统计等。strace 的使用方式有两种,如下:strace 执行…

在Asp.net网页中使用接口

在开发Asp.net时,我们会经常有应用MasterPage或是WebUserControl。这样会遇上一个问题,需要在aspx去找MasterPage或是WebUserControl内的对象,或是从aspx传值给它们。比如一个WebUserControl被aspx调用之后,它产生的ID会随着aspx的…

xss绕过尖括号和双括号_xss挑战平台练习

-------------------------XSS挑战之旅-------------------------最近在学习xss,找到了一个xss练习平台,在线地址:http://test.xss.tv/实验环境也可以本地搭建,不过需要phpmysql的环境:xss通关小游戏:https…

上世纪八九十年代的收录放音机拆解

头条看到刘工发的收录放音机美图,发上来大家回忆下,大家跟这些老古董有什么故事?推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号,后台回复「1024」获取学习资料网盘链接。欢迎点赞&…

String in Java

转载于:https://www.cnblogs.com/ywxt/p/java_string.html

dfs hdfs 修改文件名称_CDH6.3.2生产更换HDFS 数据目录

事情是这样的,楼主刚入职一家新公司,刚开始搭建的集群时ecs只有一个系统盘,集群安装完成运行几天后,分分钟就要爆了,于是申请增加磁盘,就有了下面的操作,生怕操作失误,集群挂了&…

c++thread里暂停线程_多线程技术

1.程序程序(Program)”是一个静态的概念,一般对应于操作系统中的一个可执行文件,比如:我们要启动酷狗听音乐,则对应酷狗的可执行程序。当我们双击酷狗,则加载程序到内存中,开始执行该程序,于是产…

出差CVTE

去CVTE和连总吃饭周一晚上11点,我给我们领导打电话,说有个问题一定要去CVTE。晚上到家的时候是12点多,没洗澡,我跟小云说我早上要6点起来去广州,小云问我说去广州干嘛,我说,去出差解决问题。​然…

html实现 左图右文_让CSS flex布局最后一行左对齐的N种方法

作者:张鑫旭https://www.zhangxinxu.com/wordpress/2019/08/css-flex-last-align/前言小伙伴们是否还记得,之前小编也发布了几篇关于CSS相关文章不妨一起来回顾回顾:《手把手整理CSS3知识汇总【思维导图】》《关于前端CSS写法104个知识点汇总…

定位到元素后获取其属性_Selenium界面自动化测试(4)(Python):元素定位及操作...

在操作Web元素之前,需要先找到该元素,这个查找的过程称之为元素定位。Selenium支持8种元素定位方法:ID:根据元素的id属性值来定位元素。Name:根据元素的name属性值来定位元素。Class Name:根据元素的class属…

芯片公司急聘嵌入式软件精英人才

薪酬待遇及联系方式薪酬待遇:40~150万不等,另有股票期权等,待遇丰厚,详细面议工作地点:北京市朝阳区联系人:杨先生微信:MichaelYao7PS:推荐成功入职者有推荐费嵌入式软件工程师岗位职…

这一年就要过去

「远方钟声响起,这一年就要过去,快乐时光不停留......」楠哥从幼儿园新学习了一首新年小曲。今年已经是12月份了,2021年就要结束,即将到来的是2022年的新的一年。2021年这一年里非常感谢读者的一路支持,当然这不是一篇…

unc 隐藏共享文件夹_你真的了解任务栏吗?win10任务栏居然隐藏了这么多小窍门...

平常使用电脑,最常用的是桌面,桌面上最常用的大约是任务栏,但是你真的了解任务栏吗?除了一小部分朋友熟悉之外,大部分人估计都是没有留意到,其实任务栏就功能角度来说,的确算一个宝藏之地。什么…

手机充电IC设置电流与实测电流不一致问题剖析

大家好,我是写代码的篮球球痴,转一篇我朋友记得诚的文章本文转载来自一位基带大佬,解决问题的思路很重要。原文链接:https://blog.csdn.net/AirCity123/article/details/104428325?spm1001.2014.3001.5502某手机的充电架构如下&a…

Spring系列(六) Spring Web MVC 应用构建分析

DispatcherServlet DispatcherServlet 是Spring MVC的前端控制器名称, 用户的请求到达这里进行集中处理, 在Spring MVC中, 它的作用是为不同请求匹配对应的处理器, 将结果传递给视图解析器最终呈现给客户端. 前端控制器模式(Front Controller Pattern)是…

做个好人,加个晚班

我和建平在腾讯加班的日子前几天,他让我给他发照片,因为公司里年末要发照片墙,他说要把我的和他的照片放上去,然后我硬是找了几张觉得不错的给他,然后他也真的放上去了。再看那些照片,拍出来的效果都不咋样…