jieba tfidf_【NLP】【三】jieba源码分析之关键字提取(TF-IDF/TextRank)

【一】综述

利用jieba进行关键字提取时,有两种接口。一个基于TF-IDF算法,一个基于TextRank算法。TF-IDF算法,完全基于词频统计来计算词的权重,然后排序,在返回TopK个词作为关键字。TextRank相对于TF-IDF,基本思路一致,也是基于统计的思想,只不过其计算词的权重时,还考虑了词的上下文(通过窗口滑动来实现),而且计算词的权重时,也考虑了相关联系词的影响。可以说,TextRank实际上是依据位置与词频来计算词的权重的。下面,结合基于jieba源码,来分别解释两种算法的实现。

【二】TF-IDF

1. 原理解析

假设,共有N篇文档,分别用 d1,d2,d3,,,,,,,dn来表示。

TF = 某个词在di篇文章中出现的次数/di篇文章的总词数 = count(W in di)/ count(di)。因此,TF计算的是单个词在单个文档中出现的词频。

IDF = 总的文档数 / 出现词W的文档数 。 IDF其实反映了词W在文档之间的区别度。如果W在仅在一篇文档中出现,则说明可以使用W将该文档与其他文档区别开来。即IDF可以反映W的独特性 。

TF*IDF,可以得到词的重要性。比如: 北京和西安在同一篇文档中的词频均为20%,那如何估计北京是该文的关键字,还是西安呢?如果同时有10篇文章均提到了北京,恰好只有这篇文章提到了西安,则西安作为这篇文章的关键字更为合理。
————————————————
版权声明:本文为CSDN博主「王若然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上https://blog.csdn.net/weixin_31458015/article/details/115039076

 







java jieba tfidf_【NLP】【三】jieba源码分析之关键字提取(TF-IDF/TextRank)_王若然的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于TF-IDFTextRank和LSA种算法实现关键词提取的Python程序包,常用的包有: 1. sklearn,它提供了TfidfVectorizer和CountVectorizer等工具,可以实现TF-IDF算法。同时,它也提供了LSA和LDA等主题模型算法。 2. nltk,它是Python自然语言处理的一个常用工具库,其中包含了TextRank算法的实现。 3. gensim,它是一个用于处理文本的Python工具库,提供了LSI(Latent Semantic Indexing,潜在语义分析)和LDA等算法实现。 4. jieba,它是一个中文分词工具库,支持TF-IDF算法。 这些工具库都提供了详细的文档和示例,可以很方便地实现关键词提取。例如,使用sklearn的TfidfVectorizer实现TF-IDF算法的关键词提取代码如下: ``` from sklearn.feature_extraction.text import TfidfVectorizer texts = ['This is a text', 'Another text', 'Yet another text'] vectorizer = TfidfVectorizer() tfidf_matrix = vectorizer.fit_transform(texts) feature_names = vectorizer.get_feature_names() doc = 0 feature_index = tfidf_matrix[doc,:].nonzero()[1] tfidf_scores = zip(feature_index, [tfidf_matrix[doc,x] for x in feature_index]) top_keywords = sorted(tfidf_scores, key=lambda x: x[1], reverse=True)[:5] print(top_keywords) ``` 这段代码中,首先使用TfidfVectorizer将文本矩阵转换为TF-IDF矩阵,然后通过get_feature_names方法获取特征名列表,使用nonzero方法获取第0个文本的非零元素下标,通过zip将特征下标和对应的TF-IDF分数打包为元组。最后,使用sorted方法将元组按分数从大到小排序,并选择前5个元组,输出作为关键词。 类似地,使用gensim库的LSI算法实现关键词提取的代码如下: ``` from gensim import corpora from gensim.models import LsiModel texts = [['This', 'is', 'a', 'text'], ['Another', 'text'], ['Yet', 'another', 'text']] dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts] lsi_model = LsiModel(corpus, num_topics=2) lsi_matrix = lsi_model[corpus] doc = 0 top_keywords = sorted(lsi_matrix[doc], key=lambda x: -x[1])[:5] print(top_keywords) ``` 这段代码中,首先使用corpora.Dictionary将文本列表转换为词典,再使用doc2bow方法将每个文本转换为词袋向量表示。然后,使用LsiModel训练得到一个2维的LSI模型,对文本矩阵进行转换得到LSI矩阵。最后,使用sorted方法将LSI矩阵中第0个文本的元素按LSI分数从大到小排序,并选择前5个元素,输出作为关键词。 使用这些工具库,可以很方便地实现关键词提取并进行文本分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值