文本分析

用Py做文本分析5:关键词提取

2020-02-08  本文已影响0人  凡有言说

1.关键词提取

关键词指的是原始文档的和核心信息,关键词提取在文本聚类、分类、自动摘要等领域中有着重要的作用。

针对一篇语段,在不加人工干预的情况下提取出其关键词

无监督学习——基于词频
思路1:按照词频高低进行提取

思路2:按照词条在文档中的重要性进行提取

2.TF-IDF算法

2.1TF-IDF介绍

IF-IDF是信息检索中最常用的一种文本关键信息表示法,其基本的思想是如果某个词在一篇文档中出现的频率高,并且在语料库中其他文档中很少出现,则认为这个词具有很好的类别区分能力。

TF:Term Frequency,衡量一个term在文档中出现得有多频繁。平均而言出现越频繁的词,其重要性可能就越高。考虑到文章长度的差异,需要对词频做标准化:

IDF:Inverse Document Frequency,逆文档概率,用于模拟在该语料的实际使用环境中,目标term的重要性。

TF-IDF:TF*IDF

优点:

2.2TF-IDF具体实现

(1)jieba

jieba.analyse.extract_tags(
      sentence #带提取的文本
      topK = 20 #返回几个IF/IDF权重最大的关键词
      withWeight = False #是否一并返回关键词权重值
      allowPOS = () #仅包括制定词性的词,默认值为空,即不筛选
)
jieba.analyse.set_idf_path(file_name) #可以更换为自定义IDF语料库
jieba.analyse.set_stop_words(file_name) #在关键词提取时使用自定义停用词语料库
jieba.analyse.TFIDF(idf_path=None) #新建TFIDF实例
import jieba
import jieba.analyse

#使用默认的TFIDF模型进行分析
jieba.analyse.extract_tags(chapter.txt[1])

#查看关键词的TFIDF值,即权重
jieba.analyse.extract_tags(chapter.txt[1], withWeight = True)

#使用自定义词典改善分词效果
jieba.load_userdict('D:/Files/program data/nlp/PythonData/金庸小说词库.txt')

#在TFIDF计算中直接使用停用词表
jieba.analyse.set_stop_words('D:/Files/program data/nlp/PythonData/停用词.txt')

TFres = jieba.analyse.extract_tags(chapter.txt[1], withWeight = True)
TFres

#使用自定义TFIDF频率文件
jieba.analyse.set_idf_path('D:/Files/program data/nlp/PythonData/idf.txt.big')
TFres1 = jieba.analyse.extract_tags(chapter.txt[1], withWeight = True)
TFres1

(2)sklearn

import jieba

stoplist_path = 'D:/Files/program data/nlp/PythonData/停用词.txt'
stoplist = list(pd.read_csv(stoplist_path, names = ['w'], sep = 'aaa',
                           encoding = 'utf-8', engine = 'python').w)
def m_cut(intext):
    return [w for w in jieba.cut(intext)
           if w not in stoplist and len(w) >1]

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer

txtlist = [' '.join(m_cut(w)) for w in chapter.txt]
vectorizer = CountVectorizer()
x = vectorizer.fit_transform(txtlist) #将文本中的词转换为词频矩阵

transformer = TfidfTransformer()
tfidf = transformer.fit_transform(x) #基于词频矩阵x计算TF-IDF值
tfidf

#转换为数组
tfidf.toarray()

#转换为矩阵
tfidf.todense()

#行列信息
tfidf.toarray().shape

#词条信息
print('字典长度:',len(vectorizer.vocabulary_))
vectorizer.vocabulary_

(3)gensim

#文档分词及预处理
chaplist = [m_cut(w) for w in chapter.txt]
chaplist

from gensim import corpora, models

#生成文档对应的字典和bow稀疏向量
dictionary = corpora.Dictionary(chaplist)
corpus = [dictionary.doc2bow(text) for text in chaplist]
corpus

tfidf_model = models.TfidfModel(corpus) #建立TF-IDF模型
corpus_tfidf = tfidf_model[corpus] #对所需文档计算TF-IDF结果
corpus_tfidf

#列出所需文档的TF-IDF计算结果(第3章)
corpus_tfidf[2]

#列出字典内容
dictionary.token2id

3.TextRank算法

前面介绍的TF-IDF属于无监督中基于词频的算法,TextRank算法是基于图形的算法。

TextRank算法的思想来源于PageRank算法:

和基于词频的算法相比,TextRank进一步考虑了文档内词条间的语义关系。

jieba.analyse.textrank(
        sentence, topK=20, withWeight=False
        allowPOS=('ns','n','vn','v')
)#注意默认过滤词性
jieba.analyse.textrank(chapter.txt[1], topK=20, withWeight = True)

参考资料:
Python数据分析--玩转文本挖掘

上一篇 下一篇

猜你喜欢

热点阅读