• 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

  • 相关阅读:
    C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别
    vs 扩展和更新下载的插件在什么位置呢,看看吧,哈哈
    全面了解 Nginx 主要应用场景
    Nginx配置详解
    ulimit -n 修改
    mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化
    java.net.UnknownHostException 异常处理
    Oracle 11G在用EXP 导出时,空表不能导出解决
    expdp和impdp导入和导出数据
    CentOS6.5运行yum报错:No module named yum
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/7575885.html
Copyright © 2020-2023  润新知