结巴分词系统中实现了两种关键词抽取法,一种是TF-IDF关键词抽取算法另一种是TextRank关键词抽取算法,它们都是无监督的算法。

以下是两种算法的使用:

  1. #-*- coding:utf-8 -*-
  2. from __future__ import unicode_literals
  3. import jieba.analyse
  4. import jieba
  5.  
  6. s='gStore 是一个基于图的 RDF 数据管理系统(也称为“三元组存储”),维持\
  7. 了原始RDF 数据的图结构。它的数据模型是有标签的有向多边图,每个顶点对\
  8. 应一个主体或客体'
  9.  
  10. print '-'*60
  11. print 'TF-IDF'
  12. print '-'*60
  13. for x,w in jieba.analyse.tfidf(s,withWeight=True):
  14. print '%s %s'%(x,w)
  15.  
  16. print '-'*60
  17. print 'TextRank'
  18. print '-'*60
  19. for x,w in jieba.analyse.textrank(s,withWeight=True):
  20. print '%s %s'%(x,w)

运行结果为:

  1. ------------------------------------------------------------
  2. TF-IDF
  3. ------------------------------------------------------------
  4. 三元组 0.604377289217
  5. 数据模型 0.574240455278
  6. gStore 0.519772500126
  7. 数据 0.415770145947
  8. 客体 0.402867333207
  9. 标签 0.40000857766
  10. 管理系统 0.399225164377
  11. 多边 0.398075892331
  12. 顶点 0.383717558119
  13. 存储 0.360169850187
  14. 对应 0.293613842643
  15. 基于 0.28812571018
  16. 原始 0.28658544723
  17. 主体 0.276709291894
  18. 每个 0.252780857899
  19. 一个 0.245004432359
  20. 维持 0.233709473821
  21. 称为 0.217119230997
  22. 结构 0.21004259173
  23. ------------------------------------------------------------
  24. TextRank
  25. ------------------------------------------------------------
  26. 数据 1.0
  27. 称为 0.768217953725
  28. 对应 0.64922377923
  29. 主体 0.644441036006
  30. 数据模型 0.603794315448
  31. 原始 0.55991013606
  32. 结构 0.547715653546
  33. 管理系统 0.504331899412
  34. 顶点 0.442924971985
  35. 客体 0.439979685469
  36. 标签 0.32856626811
  37. 维持 0.30991549187
  38. 三元组 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,里面加入:

                一个
                每个

  1. #-*- coding:utf-8 -*-
  2. from jieba import analyse
  3. # 引入TF-IDF关键词抽取接口
  4. tfidf = analyse.extract_tags
  5. # 使用自定义停用词集合
  6. analyse.set_stop_words("stop_words.txt")
  7.  
  8. # 原始文本
  9. text = "线程是程序执行时的最小单位,它是进程的一个执行流,\
  10. 是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,\
  11. 线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。\
  12. 线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。\
  13. 同样多线程也可以实现并发操作,每个请求分配一个线程来处理。"
  14.  
  15. # 基于TF-IDF算法进行关键词抽取
  16. keywords = tfidf(text)
  17. print "keywords by tfidf:"
  18. # 输出抽取出的关键词
  19. for keyword in keywords:
  20. print keyword + "/",

运行结果:

  1. keywords by tfidf:
  2. 线程/ CPU/ 进程/ 调度/ 多线程/ 程序执行/ 执行/ 堆栈/ 局部变量/ 单位/ 并发/ 分派/ 共享/ 请求/ 最小/ 可以/ 允许/ 分配/ 多个/ 运行/

大家应该可以看到里面先比于上面的少了 一个、每个 这两个词。

以上参考的博客有:

        http://www.cnblogs.com/zhbzz2007/p/6177832.html

        http://blog.csdn.net/xiaoxiangzi222/article/details/53483931

jieba分词(2)的更多相关文章

  1. widows下jieba分词的安装

    在切词的时候使用到jieba分词器,安装如下: 切入到结巴包,执行 python setup.py install 安装后,可以直接在代码中引用: import jieba

  2. 【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法

    错误现象: 最近在做一个小项目,在Python中使用了jieba分词,感觉非常简洁方便.在Python端进行调试的时候没有任何问题,使用PyInstaller打包成exe文件后,就会报错: 错误原因分 ...

  3. Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  4. python结巴(jieba)分词

    python结巴(jieba)分词 一.特点 1.支持三种分词模式: (1)精确模式:试图将句子最精确的切开,适合文本分析. (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解 ...

  5. pypinyin, jieba分词与Gensim

    一 . pypinyin from pypinyin import lazy_pinyin, TONE, TONE2, TONE3 word = '孙悟空' print(lazy_pinyin(wor ...

  6. 使用pynlpir增强jieba分词的准确度

    在使用jieba分词时,发现分词准确度不高.特别是一些专业词汇,比如堡垒机,只能分出堡垒,并不能分出堡垒机.这样导致的问题是很多时候检索并不准确. 经过对比测试,发现nlpir进行分词效果更好.但是n ...

  7. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

  8. jieba分词(3)

    jieba分词中Tokenize的使用,Tokenize主要是用来返回词语在原文的弃之位置,下面贴上代码: #-*- coding:utf-8 -*- from __future__ import u ...

  9. jieba分词(1)

    近几天在做自然语言处理,看了一篇论文:面向知识库的中文自然语言问句的语义理解,里面提到了中文的分词,大家都知道对于英文的分词,NLTK有很好的支持,但是NLTK对于中文的分词并不是很好(其实也没有怎么 ...

随机推荐

  1. IDEA有用插件总结

    IDEA要查看哪些插件起效了可以通过.IntellijIdeaXxx/config/plugins/availables.xml里查看: 一:Lombok插件,里面很多注解都可以省略许多冗余的代码: ...

  2. VGA的行场时序

    之前碰到接收VGA时有的电脑可以有的电脑会出现画面偏移. 先来了解下数字显示器时序(DMT) DMT视频时序有四种: (1)Positive H & Positive V Syncs 行同步为 ...

  3. (求凹包) Bicycle Race (CF 659D) 简单题

    http://codeforces.com/contest/659/problem/D     Maria participates in a bicycle race. The speedway t ...

  4. Alpha阶段敏捷冲刺(七)

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:用java完成了错词,已掌握,陌生单词的图标生 ...

  5. POJ1274 The Perfect Stall

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25739   Accepted: 114 ...

  6. C++ 中的异常机制分析

    C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...

  7. hdu 2688

    这题,因为要统计之前有多少个数比当前的数小,所以我用的树状数组 基本代码就是这样,还是比较好想的,只不过我没想出来罢了 #include <iostream> #include <c ...

  8. Ubuntu12.04 root用户登录设置

    ubuntu12.04默认是不允许root登录的,在登录窗口只能看到普通用户和访客登录.以普通身份登录Ubuntu后我们需要做一些修改. 1.普通用户登录后,修改系统配置文件需要切换到超级用户模式,在 ...

  9. ASP.NET MVC Form表单验证与Authorize特性

    一.Form表单验证 1.基本概念 表单验证是一个基于票据(ticket-based)[也称为基于令牌(token-based)]的系统.当用户登录系统以后,会得到一个包含基于用户信息的票据(tick ...

  10. Linux查看History记录加时间戳小技巧

    Linux查看History记录加时间戳小技巧 熟悉bash的都一定知道使用history可以输出你曾经输入过的历史命令,例如[root@servyou_web ~]# history | more ...