基于 jieba 和 textrank4zh 提取关键词

jieba 和 textrank4zh 两个工具很方便实现关键词提取,textrank4zh 还能够进行关键句子抽取实现抽取式文本摘要。

jieba 和 textrank4zh 工具关键词的提取是基于 TextRank 算法来实现的,每一个顶点为一个词,词之间的连接权重使用共现关系来构建,即: 两个词在同一个窗口内出现的话,则两个词之间就会有一条边。而将 TextRank 应用于句子抽取时,每个顶点则是一个句子,句子与句子之间的相似性作为句子边的权重。

from textrank4zh import TextRank4Keyword
from textrank4zh import TextRank4Sentence
import jieba.analyse as analyse


article = """美联社2月12日报道,在西方情报官员警告称俄罗斯对乌克兰的入侵日益迫近后,美国将撤离其驻乌克兰大使馆的所有工作人员。据报道,美国国务院计划周六宣布将在俄罗斯“入侵”前撤离几乎所有驻基辅大使馆的美国工作人员。大使馆近200名美国人中的绝大多数将被送走或迁往乌克兰最西部的波兰边境附近,少数官员可能会留在基辅。美国国务院不予置评。
  美国国务院曾命令美国驻基辅大使馆工作人员的家属离开,但非必要人员可以自行决定是否离开。在对俄罗斯可能入侵乌克兰的警告加强后,美国做出了上述最新决定。
        """

# 1. 使用 textrank4zh 提取关键词
def test01():
    tr4w = TextRank4Keyword(allow_speech_tags=['n', 'nr', 'ns', 'nrfg', 'nt', 'nz'])
    tr4w.analyze(article, window=3)
    keywords = tr4w.get_keywords(num=5, word_min_len=2)
    print('textrank4zh:', keywords)


# 2. 使用 textrank4zh 文本摘要
def test02():
    tr4s = TextRank4Sentence()
    tr4s.analyze(article)
    sentences = tr4s.get_key_sentences(num=1, sentence_min_len=2)
    print('textrank4zh:', sentences)


# 3. 使用 jieba 提取关键词
def test03():

    keywords =  analyse.textrank(article, topK=5)
    print('jieba:', keywords)

    keywords = analyse.tfidf(article, topK=5)
    print('jieba:',keywords)


if __name__ == '__main__':
    test01()
    test02()
    test03()

程序输出结果:

textrank4zh: [{'word': '美国', 'weight': 0.10592838974131329}, {'word': '大使馆', 'weight': 0.0849425759448995}, {'word': '警告', 'weight': 0.07990896694362176}, {'word': '乌克兰', 'weight': 0.07857380258462762}, {'word': '工作人员', 'weight': 0.06819454087117426}]

textrank4zh: [{'index': 0, 'sentence': '美联社2月12日报道,在西方情报官员警告称俄罗斯对乌克兰的入侵日益迫近后,美国将撤离其驻乌克兰大使馆的所有工作人员', 'weight': 0.21116668361953173}]

jieba: ['美国', '大使馆', '基辅', '工作人员', '俄罗斯']
jieba: ['大使馆', '乌克兰', '美国国务院', '基辅', '入侵']
未经允许不得转载:一亩三分地 » 基于 jieba 和 textrank4zh 提取关键词