【NLP Tool -- JieBa】Jieba实现TF-IDF和TextRank文本关键字提取(附代码)

NLP Tool 专栏:NLP Tool_北村南的博客-CSDN博客

目录

JieBa

介绍

安装

TF-IDF

算法思想

实现步骤

代码实现

实现效果

TextRank

算法思想

实现步骤

代码实现

实现效果

参考资料


JieBa

介绍

Jieba工具主要应用于Python文本分析,其最强大的功能在于分词

在关键字提取方面,Jieba库提供了两个封装算法Tf-IdfText-Rank

安装

pip install jieba

TF-IDF

算法思想

如果一个候选词在本文段中出现多次,而在其他文段中出现的次数较少,则可认为其对于本文段较为重要,即关键词。

实现步骤

1 将待提取关键词的文本进行分词

2 载入自定义词典(可省略),虽然jieba有识别新词的能力,但是使用自定义词典可以提高分词准确率,如下

jieba.load_userdict('cidian.txt')

 jieba中的词性分类标签如下

3 自定义逆向文件频率(IDF)文本语料库,从而实现动态更新自己的语料库

4 自定义停用词

5 对分词进行词性标注处理,过滤提用词,保留候选关键词

6 计算各个分词的tf*idf值,并进行倒序排序,得到最重要的N个词,即为关键词

代码实现

# -*- coding: utf-8 -*-
import jieba
import jieba.analyse

jieba.load_userdict('cidian.txt')


text=''
with open ('demo.txt', 'r', encoding='utf-8') as file:
    for line in file:
        line=line.strip()
        text+=line#将需要的文本读取到text中
print(jieba.analyse.extract_tags(text,topK=5,
                                 withWeight=False, allowPOS=('ns', 'n', 'vn', 'v','nt','nw',
                                                   'nz','v','vd','vn','a','an','LOC')))

实现效果

TextRank

算法思想

将整篇文章看做一个超平面,每个词看做一个点,一个点周围有越多的点靠近它,那么这个点就是处于核心位置,也就是关键词。

实现步骤

1 将待提取关键词的文本进行分词

2 对分词进行词性标注处理,过滤提用词,保留候选关键词

3 使用滑窗实现词之间的共现关系,构建图,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现

4 根据上述公式,迭代传播各节点的权重,直至收敛

5 对节点权重进行倒序排序,得到最重要的N个词,即为关键词

代码实现

# -*- coding: utf-8 -*-
import jieba
import jieba.analyse

#分词和分字,并输出到文件中
vocab={}
cs={}
text=''
with open ('demo.txt', 'r', encoding='utf-8') as file:
    for line in file:
        line=line.strip()
        text+=line#将需要的文本读取到text中
        #分字
        for c in line:
            cs[c]=0
        #分词
        for word in jieba.cut(line):
            vocab[word]=0
#将分词和分字的结果保留到文本文件中
with open ('cs.txt', 'w', encoding='utf-8') as csf:
    for c in cs.keys():
        csf.write(c+'\n')
with open ('vocab.txt', 'w', encoding='utf-8') as vf:
    for w in vocab.keys():
        vf.write(w+'\n')

print(jieba.analyse.textrank(text, topK=5,
                       withWeight=False, allowPOS=('ns', 'n', 'vn', 'v','nt','nw',
                                                   'nz','v','vd','vn','a','an','LOC')))

实现效果

参考资料

Textrank原始论文:mihalcea.emnlp04.pdf (umich.edu)

TF-IDF官方代码:GitHub - fxsjy/jieba: 结巴中文分词

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

北村南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值