jieba分词(2)
结巴分词系统中实现了两种关键词抽取法,一种是TF-IDF关键词抽取算法另一种是TextRank关键词抽取算法,它们都是无监督的算法。
以下是两种算法的使用:
- #-*- coding:utf-8 -*-
- from __future__ import unicode_literals
- import jieba.analyse
- import jieba
- s='gStore 是一个基于图的 RDF 数据管理系统(也称为“三元组存储”),维持\
- 了原始RDF 数据的图结构。它的数据模型是有标签的有向多边图,每个顶点对\
- 应一个主体或客体'
- print '-'*60
- print 'TF-IDF'
- print '-'*60
- for x,w in jieba.analyse.tfidf(s,withWeight=True):
- print '%s %s'%(x,w)
- print '-'*60
- print 'TextRank'
- print '-'*60
- for x,w in jieba.analyse.textrank(s,withWeight=True):
- print '%s %s'%(x,w)
运行结果为:
- ------------------------------------------------------------
- TF-IDF
- ------------------------------------------------------------
- 三元组 0.604377289217
- 数据模型 0.574240455278
- gStore 0.519772500126
- 数据 0.415770145947
- 客体 0.402867333207
- 标签 0.40000857766
- 管理系统 0.399225164377
- 多边 0.398075892331
- 顶点 0.383717558119
- 存储 0.360169850187
- 对应 0.293613842643
- 基于 0.28812571018
- 原始 0.28658544723
- 主体 0.276709291894
- 每个 0.252780857899
- 一个 0.245004432359
- 维持 0.233709473821
- 称为 0.217119230997
- 结构 0.21004259173
- ------------------------------------------------------------
- TextRank
- ------------------------------------------------------------
- 数据 1.0
- 称为 0.768217953725
- 对应 0.64922377923
- 主体 0.644441036006
- 数据模型 0.603794315448
- 原始 0.55991013606
- 结构 0.547715653546
- 管理系统 0.504331899412
- 顶点 0.442924971985
- 客体 0.439979685469
- 标签 0.32856626811
- 维持 0.30991549187
- 三元组 0.281621030233
TF-IDF算法分析
TF-IDF全称是:Term Frequency-- Inverse Document Frequency,是一种数值统计,用于反映一个词对于语料中某篇文档的重要性。在信息检索和文本挖掘领域,它经常用于因子加权。它的思想是当一个词在文章中出现的频率比较高(TF)而这个词在别的文库中出现的次数确很少(DF),它就会认为这个词具有很好的类别区分能力(IDF)。
关键词抽取的方法:
1、预处理,现将整个句子进行分词和词性标注,将满足的磁性作为关键的候选词
2、计算每个词的TF-IDF
3、根据每个词的TF-IDF的降序排列,并输出可能的关键字
TextRank算法分析
TextRank算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法, 通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先对多篇文档进行学习训练, 因其简洁有效而得到广泛应用。
关键词抽取的方法:
1、标识文本,将其作为顶点加入到图中
2、设置语法过滤器,将符合词性的词汇加入到图中,存在关系的图将出现一条边
3、一直迭代直至收敛,一般的迭代次数在20~30次,迭代的阈值设置为0.0001
4、根据顶点的分数降序排列,并输出每个可能成为关键词的词汇
5、处理之后,如果发现两个词在文本中前后相连,那么这个两个词汇就是连接在一起的
使用自定义停用词集合
jieba/analyse/__init__.py主要用于封装jieba分词的关键词抽取接口,在__init__.py首先将类TFIDF实例化为对象default_tfidf,而类TFIDF在初始化时会设置停用词表,我们知道类TFIDF是类KeywordExtractor的子类,而类KeywordExtractor中提供了一个名为STOP_WORDS的停用词集合。
自定义一个stop_words.txt,里面加入:
一个
每个
- #-*- coding:utf-8 -*-
- from jieba import analyse
- # 引入TF-IDF关键词抽取接口
- tfidf = analyse.extract_tags
- # 使用自定义停用词集合
- analyse.set_stop_words("stop_words.txt")
- # 原始文本
- text = "线程是程序执行时的最小单位,它是进程的一个执行流,\
- 是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,\
- 线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。\
- 线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。\
- 同样多线程也可以实现并发操作,每个请求分配一个线程来处理。"
- # 基于TF-IDF算法进行关键词抽取
- keywords = tfidf(text)
- print "keywords by tfidf:"
- # 输出抽取出的关键词
- for keyword in keywords:
- print keyword + "/",
运行结果:
- keywords by tfidf:
- 线程/ CPU/ 进程/ 调度/ 多线程/ 程序执行/ 执行/ 堆栈/ 局部变量/ 单位/ 并发/ 分派/ 共享/ 请求/ 最小/ 可以/ 允许/ 分配/ 多个/ 运行/
大家应该可以看到里面先比于上面的少了 一个、每个 这两个词。
以上参考的博客有:
http://www.cnblogs.com/zhbzz2007/p/6177832.html
http://blog.csdn.net/xiaoxiangzi222/article/details/53483931
’
jieba分词(2)的更多相关文章
- widows下jieba分词的安装
在切词的时候使用到jieba分词器,安装如下: 切入到结巴包,执行 python setup.py install 安装后,可以直接在代码中引用: import jieba
- 【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法
错误现象: 最近在做一个小项目,在Python中使用了jieba分词,感觉非常简洁方便.在Python端进行调试的时候没有任何问题,使用PyInstaller打包成exe文件后,就会报错: 错误原因分 ...
- Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- python结巴(jieba)分词
python结巴(jieba)分词 一.特点 1.支持三种分词模式: (1)精确模式:试图将句子最精确的切开,适合文本分析. (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解 ...
- pypinyin, jieba分词与Gensim
一 . pypinyin from pypinyin import lazy_pinyin, TONE, TONE2, TONE3 word = '孙悟空' print(lazy_pinyin(wor ...
- 使用pynlpir增强jieba分词的准确度
在使用jieba分词时,发现分词准确度不高.特别是一些专业词汇,比如堡垒机,只能分出堡垒,并不能分出堡垒机.这样导致的问题是很多时候检索并不准确. 经过对比测试,发现nlpir进行分词效果更好.但是n ...
- 自然语言处理之jieba分词
在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...
- jieba分词(3)
jieba分词中Tokenize的使用,Tokenize主要是用来返回词语在原文的弃之位置,下面贴上代码: #-*- coding:utf-8 -*- from __future__ import u ...
- jieba分词(1)
近几天在做自然语言处理,看了一篇论文:面向知识库的中文自然语言问句的语义理解,里面提到了中文的分词,大家都知道对于英文的分词,NLTK有很好的支持,但是NLTK对于中文的分词并不是很好(其实也没有怎么 ...
随机推荐
- IDEA有用插件总结
IDEA要查看哪些插件起效了可以通过.IntellijIdeaXxx/config/plugins/availables.xml里查看: 一:Lombok插件,里面很多注解都可以省略许多冗余的代码: ...
- VGA的行场时序
之前碰到接收VGA时有的电脑可以有的电脑会出现画面偏移. 先来了解下数字显示器时序(DMT) DMT视频时序有四种: (1)Positive H & Positive V Syncs 行同步为 ...
- (求凹包) Bicycle Race (CF 659D) 简单题
http://codeforces.com/contest/659/problem/D Maria participates in a bicycle race. The speedway t ...
- Alpha阶段敏捷冲刺(七)
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:用java完成了错词,已掌握,陌生单词的图标生 ...
- POJ1274 The Perfect Stall
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25739 Accepted: 114 ...
- C++ 中的异常机制分析
C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...
- hdu 2688
这题,因为要统计之前有多少个数比当前的数小,所以我用的树状数组 基本代码就是这样,还是比较好想的,只不过我没想出来罢了 #include <iostream> #include <c ...
- Ubuntu12.04 root用户登录设置
ubuntu12.04默认是不允许root登录的,在登录窗口只能看到普通用户和访客登录.以普通身份登录Ubuntu后我们需要做一些修改. 1.普通用户登录后,修改系统配置文件需要切换到超级用户模式,在 ...
- ASP.NET MVC Form表单验证与Authorize特性
一.Form表单验证 1.基本概念 表单验证是一个基于票据(ticket-based)[也称为基于令牌(token-based)]的系统.当用户登录系统以后,会得到一个包含基于用户信息的票据(tick ...
- Linux查看History记录加时间戳小技巧
Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...