一篇文章或文档中,哪些词对文章更重要?哪些词可以作为关键字?自动提取关键词可以快速地从海量的信息中提取和获取信息。
1、关键词提取的机器学习方法
- 有监督:构建一个丰富的词表,判断每个文档与词表中每个词的匹配程度,优点是准确,缺点是维护词表和标注的成本高。
- 无监督:2个常见算法是TF-IDF算法和TextRank算法。
2、TF-IDF算法
参考阅读:https://www.cntofu.com/book/85/nlp/tf-idf.md
Term Frequency - Inverse Document Frequency 即“词频-逆文本频率”
TF-IDF(x) = TF(x) * IDF(x)
TF-IDF(x)越大,这个词是关键词的可能性越大
2.1 TF(词频)
在1篇文章中,1个词出现的次数越多,那么这个词在这篇文章中越重要,即越多越好。
2.2 IDF(逆文本频率)
在若干个文档中,1个词出现的次数越少,说明这个词越重要;即越少越好。
2.3 举例
在某个语料库中,共有2000个文档,标记为d1,d2,d3……,d2000
其中d1文档,共有1000个词,其中“自然语言处理”出现了33次;
全部5000个文档中,“自然语言处理”这个词,在10个文档中出现过;
则d1中的,“自然语言处理的”的TF值为:33/1000=0.033;
在整个语料库中,“自然语言处理”的IDF值就是:log(5000/11)=2.66
TF-IDF(x) = 0.033*2.66 = 0.088
2.4 Jieba分词-TF-IDF
jieba.analyse.extract_tags(sentence,topK=20,withWeight=False,allowPOS=())
- sentence:待提取的文本
- topK:返回关键词的数量,默认值为20
- withWeight:是否返回关键词的权重值,默认值为False
- allowPOS:仅包括指定词性的词,默认值为空,即不筛选
import jieba.analyse
text = '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法,自然语言处理是一门融语言学、计算机科学、数学于一体的科学。'
print('总的词数:{}'.format(len(list(jieba.cut(text)))))
keywords_all = jieba.analyse.extract_tags(text)
print('所有关键词(默认取top20):'+"/".join(keywords_all))
keywords_top = jieba.analyse.extract_tags(text, topK=3)
print('top3的关键词:'+"/".join(keywords_top))
运行结果
总的词数:48
所有关键词(默认取top20):自然语言/计算机科学/领域/处理/人工智能/语言学/一体/一门/计算机/通信/数学/科学/方向/有效/理论/方法/实现/各种/之间/研究
top3的关键词:自然语言/计算机科学/领域