关键词提取就是从文本里面把跟这篇文章意义最相关的一些词语抽取出来。这个可以追溯到文献检索初期,关键词是为了文献标引工作,从报告、论文中选取出来用以表示全文主题内容信息的单词或术语,在现在的报告和论文中,我们依然可以看到关键词这一项。因此,关键词在文献检索、自动文摘、文本聚类/分类等方面有着重要的应用,它不仅是进行这些工作不可或缺的基础和前提,也是互联网上信息建库的一项重要工作。

    关键词抽取从方法来说主要有两种:

    • 第一种是关键词分配:就是给定一个已有的关键词库,对于新来的文档从该词库里面匹配几个词语作为这篇文档的关键词。

    • 第二种是关键词提取:针对新文档,通过算法分析,提取文档中一些词语作为该文档的关键词。

    目前大多数应用领域的关键词抽取算法都是基于后者实现的,从逻辑上说,后者比前者在实际应用中更准确。

    下面介绍一些关于关键词抽取的常用和经典的算法实现。

    在信息检索理论中,TF-IDF 是 Term Frequency - Inverse Document Frequency 的简写。TF-IDF 是一种数值统计,用于反映一个词对于语料中某篇文档的重要性。在信息检索和文本挖掘领域,它经常用于因子加权。TF-IDF 的主要思想就是:如果某个词在一篇文档中出现的频率高,也即 TF 高;并且在语料库中其他文档中很少出现,即 DF 低,也即 IDF 高,则认为这个词具有很好的类别区分能力。

    因此,TF-IDF 倾向于过滤掉常见的词语,保留重要的词语。例如,某一特定文件内的高频率词语,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的 TF-IDF。

    jieba 已经实现了基于 TF-IDF 算法的关键词抽取,通过命令 import jieba.analyse 引入,函数参数解释如下:

    1. jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
    • sentence:待提取的文本语料;

    • topK:返回 TF/IDF 权重最大的关键词个数,默认值为 20;

    • withWeight:是否需要返回关键词权重值,默认值为 False;

    • allowPOS:仅包括指定词性的词,默认值为空,即不筛选。

    1. import jieba.analyse
    2. text = open('../dataset/关于人工智能.txt').read()
    3. keywords = " ".join(jieba.analyse.extract_tags(text , topK=20, \
    4. withWeight=False, allowPOS=()))
    5. print(keywords)

    实战中文文本中的关键字提取 - 图1

    下面只获取 Top10 的关键字,并修改一下词性,只选择名词和动词:

    1. import jieba.analyse
    2. text = open('../dataset/关于人工智能.txt').read()
    3. keywords =(jieba.analyse.extract_tags(text , topK=10, \
    4. withWeight=True, allowPOS=(['n','v'])))
    5. print(keywords)

    实战中文文本中的关键字提取 - 图2

    使用 TextRank算法

    1. import jieba.analyse
    2. text = open('../dataset/关于人工智能.txt').read()
    3. result = " ".join(jieba.analyse.textrank(text, topK=20, \
    4. withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')))
    5. print(result)

    执行结果

    实战中文文本中的关键字提取 - 图3