高频词一般是指文档中出现频率较高且有用的词语,针对单片文档,可以作为一种关键词来看。比如新闻类的文章,可以将其作为热词、发现舆论焦点。它是自然语言处理中的 TF(Term Frequncy)策略。主要有以下干扰项:

  • 标点符号:一般情况下,标点符号没有什么价值,需要剔除。
  • 停用词:像“的、是、了”等常用词没有什么价值,也需要剔除。

下面我们使用 Jieba 分词来对 nlp.txt 测试文本数据,进行高频词的提取,代码如下:

def get_content(path):
    with open(path, 'r', encoding='utf-8', errors='ignore') as f:
        content = ''
        for l in f:
            l = l.strip()
            content += l
    return content
 
def get_TF(words, topK):
    tf_dic = {}
    for w in words:
        tf_dic[w] = tf_dic.get(w, 0) + 1
    return sorted(tf_dic.items(), key=lambda x:x[1], reverse=True)[:topK]
  
def main():
    import glob
    import random
    import jieba
    
    # 获取当前目录下的 nlp.txt 测试文本
    files = glob.glob('./nlp.txt') 
    corpus = get_content(files[0]) 
    split_words = list(jieba.cut(corpus))
    
    print('样本:\n' + corpus + '\n')
    print('样本分词效果:\n' + '/'.join(split_words) + '\n')
    print('样本 Top10 词:\n' + str(get_TF(split_words, 10)))
    
if __name__ == '__main__':
    main()
    
运行结果:
样本:
什么是 NLP ?NLP(Natural Language Processing,自然语言处理)是计算机科学领域以及人工智能领域的一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言(如中文、英文等),达到人与计算机之间进行有效通讯。NLP可以被应用于很多领域,这里大概总结出以下几种通用的应用:文本摘要:通过计算机自动地从原始文献中摘取文摘,全面准确地反映文献的中心内容,有助于节省大量的时间,提高效率。文本分类:计算机可以对采集的各种文章,进行主题分析,从而进行自动分类,是机器对文本按照一定的分类体系自动标注类别的过程,比如垃圾邮件的分类。情感分析:通过计算机来分析用户评论是积极的还是消极的。舆情分析:可以帮助分析哪些话题是目前的热点,分析传播路径以及发展趋势,对于不好的舆论导向可以进行有效的控制。机器翻译:机器翻译是自然语言处理中最为人所熟知的场景,比如Google翻译、百度翻译等,还有提供支持语音输入的多国语言互译的产品。智能问答: 计算机能够正确识别用户的意图,比如在客户领域,代替人工充当客服角色,有很多基本而且重复的问题,其实并不需要人工客服来解决,通过智能问答系统可以筛选掉大量重复的问题,使得人工座席能更好地服务客户。知识图谱:用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。

样本分词效果:
什么/是/ /NLP/ /?/NLP/(/Natural/ /Language/ /Processing/,/自然语言/处理/)/是/计算机科学/领域/以及/人工智能/领域/的/一个/重要/的/研究/方向/,/它/研究/用/计算机/来/处理/、/理解/以及/运用/人类/语言/(/如/中文/、/英文/等/)/,/达到/人/与/计算机/之间/进行/有效/通讯/。/NLP/可以/被/应用/于/很多/领域/,/这里/大概/总结/出/以下/几种/通用/的/应用/:/文本/摘要/:/通过/计算机/自动/地/从/原始/文献/中/摘取/文摘/,/全面/准确/地/反映/文献/的/中心/内容/,/有助于/节省/大量/的/时间/,/提高效率/。/文本/分类/:/计算机/可以/对/采集/的/各种/文章/,/进行/主题/分析/,/从而/进行/自动/分类/,/是/机器/对/文本/按照/一定/的/分类/体系/自动/标注/类别/的/过程/,/比如/垃圾邮件/的/分类/。/情感/分析/:/通过/计算机/来/分析/用户/评论/是/积极/的/还是/消极/的/。/舆情/分析/:/可以/帮助/分析/哪些/话题/是/目前/的/热点/,/分析/传播/路径/以及/发展趋势/,/对于/不好/的/舆论导向/可以/进行/有效/的/控制/。/机器翻译/:/机器翻译/是/自然语言/处理/中/最为/人/所/熟知/的/场景/,/比如/Google/翻译/、/百度/翻译/等/,/还有/提供/支持/语音输入/的/多国/语言/互译/的/产品/。/智能/问答/:/ /计算机/能够/正确/识别/用户/的/意图/,/比如/在/客户/领域/,/代替/人工/充当/客服/角色/,/有/很多/基本/而且/重复/的/问题/,/其实/并不需要/人工/客服/来/解决/,/通过/智能/问答/系统/可以/筛选/掉/大量/重复/的/问题/,/使得/人工/座席/能/更好/地/服务/客户/。/知识/图谱/:/用/可视化/技术/描述/知识/资源/及其/载体/,/挖掘/、/分析/、/构建/、/绘制/和/显示/知识/及/它们/之间/的/相互/联系/。

样本 Top10 词:
[(',', 22), ('的', 21), ('。', 8), (':', 8), ('分析', 7), ('是', 6), ('计算机', 6), ('、', 6), (' ', 5), ('可以', 5)]

一般来说,未经处理的文本中“的”“是”“,”“。”“:”“、”等词占据着很高的频率,这类词对把控文章的焦点并没有太大价值。我们可以通过定义一个停用词典,当遇到这些词时,过滤掉即可。

自定义词典方式
首先整理常用的停用词(比如“是”,标点符号等),按照每行一个写到一个文件中(我本地写到 nlp.txt 同一目录下的 stop_words.utf8 文件中),然后定义如下函数stop_words,用于过滤停用词。

def get_content(path):
    with open(path, 'r', encoding='utf-8', errors='ignore') as f:
        content = ''
        for l in f:
            l = l.strip()
            content += l
    return content


def get_TF(words, topK):
    tf_dic = {}
    for w in words:
        tf_dic[w] = tf_dic.get(w, 0) + 1
    return sorted(tf_dic.items(), key=lambda x: x[1], reverse=True)[:topK]


def stop_words(path):
    with open(path, encoding='utf-8') as f:
        return [l.strip() for l in f]


def main():
    import glob
    import random
    import jieba
    # 获取当前目录下的 nlp.txt 测试文本
    files = glob.glob('./nlp.txt')
    corpus = get_content(files[0])
    # 默认精确模式切分
    split_words = list(x for x in jieba.cut(corpus) if x not in stop_words('./stop_words.utf8'))
    print('样本:\n' + corpus + '\n')
    print('样本分词效果:\n' + '/'.join(split_words) + '\n')
    print('样本 Top10 词:\n' + str(get_TF(split_words, 10)))


if __name__ == '__main__':
    main()

重新执行程序后,得到的最新 Top10 高频词汇如下:

样本:
什么是 NLP ?NLP(Natural Language Processing,自然语言处理)是计算机科学领域以及人工智能领域的一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言(如中文、英文等),达到人与计算机之间进行有效通讯。NLP可以被应用于很多领域,这里大概总结出以下几种通用的应用:文本摘要:通过计算机自动地从原始文献中摘取文摘,全面准确地反映文献的中心内容,有助于节省大量的时间,提高效率。文本分类:计算机可以对采集的各种文章,进行主题分析,从而进行自动分类,是机器对文本按照一定的分类体系自动标注类别的过程,比如垃圾邮件的分类。情感分析:通过计算机来分析用户评论是积极的还是消极的。舆情分析:可以帮助分析哪些话题是目前的热点,分析传播路径以及发展趋势,对于不好的舆论导向可以进行有效的控制。机器翻译:机器翻译是自然语言处理中最为人所熟知的场景,比如Google翻译、百度翻译等,还有提供支持语音输入的多国语言互译的产品。智能问答: 计算机能够正确识别用户的意图,比如在客户领域,代替人工充当客服角色,有很多基本而且重复的问题,其实并不需要人工客服来解决,通过智能问答系统可以筛选掉大量重复的问题,使得人工座席能更好地服务客户。知识图谱:用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。

样本分词效果:
什么/是/ /NLP/ /?/NLP/(/Natural/ /Language/ /Processing/自然语言/处理/)/是/计算机科学/领域/以及/人工智能/领域/一个/重要/研究/方向/它/研究/用/计算机/来/处理/理解/以及/运用/人类/语言/(/如/中文/英文/等/)/达到/人/与/计算机/之间/进行/有效/通讯/NLP/可以/被/应用/于/很多/领域/这里/大概/总结/出/以下/几种/通用/应用/文本/摘要/通过/计算机/自动/地/从/原始/文献/中/摘取/文摘/全面/准确/地/反映/文献/中心/内容/有助于/节省/大量/时间/提高效率/文本/分类/计算机/可以/对/采集/各种/文章/进行/主题/分析/从而/进行/自动/分类/是/机器/对/文本/按照/一定/分类/体系/自动/标注/类别/过程/比如/垃圾邮件/分类/情感/分析/通过/计算机/来/分析/用户/评论/是/积极/还是/消极/舆情/分析/可以/帮助/分析/哪些/话题/是/目前/热点/分析/传播/路径/以及/发展趋势/对于/不好/舆论导向/可以/进行/有效/控制/机器翻译/机器翻译/是/自然语言/处理/中/最为/人/所/熟知/场景/比如/Google/翻译/百度/翻译/等/还有/提供/支持/语音输入/多国/语言/互译/产品/智能/问答/ /计算机/能够/正确/识别/用户/意图/比如/在/客户/领域/代替/人工/充当/客服/角色/有/很多/基本/而且/重复/问题/其实/并不需要/人工/客服/来/解决/通过/智能/问答/系统/可以/筛选/掉/大量/重复/问题/使得/人工/座席/能/更好/地/服务/客户/知识/图谱/用/可视化/技术/描述/知识/资源/及其/载体/挖掘/分析/构建/绘制/和/显示/知识/及/它们/之间/相互/联系

样本 Top10 词:
[('分析', 7), ('是', 6), ('计算机', 6), (' ', 5), ('可以', 5), ('领域', 4), ('进行', 4), ('分类', 4), ('NLP', 3), ('处理', 3)]

参考文献

1.中文分词笔记

2.jieba工具