NLP⚠️学不会打我! 半小时学会基本操作 2⚠️ 关键词

Posted 我是小白呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NLP⚠️学不会打我! 半小时学会基本操作 2⚠️ 关键词相关的知识,希望对你有一定的参考价值。

概述

从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类语言之间的沟通桥梁.

关键词

关键词 (keywords), 即关键词语. 关键词能描述文章的本质, 在文献检索, 自动文摘, 文本聚类 / 分类等方面有着重要的应用.

关键词抽取的方法

  1. 关键词提取: 针对新文档, 通过算法分析. 提取文档中一些词语作为该文档的关键词
  2. 关键词分配: 给定已有的关键词库, 对于新来的文档从该词库里面分配几个词语作为这篇文档的关键词

TF-IDF 关键词提取

TF-IDF (Term Frequency-Inverse Document Frequency), 即词频-逆文件频率是一种用于信息检索与数据挖掘的常用加权技术. TF-IDF 可以帮助我们挖掘文章中的关键词. 通过数值统计, 反映一个词对于语料库中某篇文章的重要性.

TF

TF (Term Frequency), 即词频. 表示词在文本中出现的频率.

公式:

IDF

IDF (Inverse Document Frequency), 即逆文档频率. 表示语料库中包含词的文档的数目的倒数.

公式:

TF-IDF

公式:

TF-IDF = (词的频率 / 句子总字数) × (总文档数 / 包含该词的文档数)

如果一个词非常常见, 那么 IDF 就会很低, 反之就会很高. TF-IDF 可以帮助我们过滤常见词语, 提取关键词.

jieba TF-IDF 关键词抽取

格式:

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

参数:

  • sentence: 待提取的文本语料
  • topK: 返回的关键词个数, 默认为 20
  • withWeight: 是否需要返回关键词权重, 默认为 False
  • allowPOS: 仅包括指定词性的词, 默认为空, 即不筛选

jieba 词性

编号词性描述
Ag形语素形容词性语素。形容词代码为 a,语素代码g前面置以A。
a形容词取英语形容词 adjective的第1个字母。
ad副形词直接作状语的形容词。形容词代码 a和副词代码d并在一起。
an名形词具有名词功能的形容词。形容词代码 a和名词代码n并在一起。
b区别词取汉字“别”的声母。
c连词取英语连词 conjunction的第1个字母。
dg副语素副词性语素。副词代码为 d,语素代码g前面置以D。
d副词取 adverb的第2个字母,因其第1个字母已用于形容词。
e叹词取英语叹词 exclamation的第1个字母。
f方位词取汉字“方”
g语素绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。
h前接成分取英语 head的第1个字母。
i成语取英语成语 idiom的第1个字母。
j简称略语取汉字“简”的声母。
k后接成分
l习用语习用语尚未成为成语,有点“临时性”,取“临”的声母。
m数词取英语 numeral的第3个字母,n,u已有他用。
Ng名语素名词性语素。名词代码为 n,语素代码g前面置以N。
n名词取英语名词 noun的第1个字母。
nr人名名词代码 n和“人(ren)”的声母并在一起。
ns地名名词代码 n和处所词代码s并在一起。
nt机构团体“团”的声母为 t,名词代码n和t并在一起。
nz其他专名“专”的声母的第 1个字母为z,名词代码n和z并在一起。
o拟声词取英语拟声词 onomatopoeia的第1个字母。
p介词取英语介词 prepositional的第1个字母。
q量词取英语 quantity的第1个字母。
r代词取英语代词 pronoun的第2个字母,因p已用于介词。
s处所词取英语 space的第1个字母。
tg时语素时间词性语素。时间词代码为 t,在语素的代码g前面置以T。
t时间词取英语 time的第1个字母。
u助词取英语助词 auxiliary
vg动语素动词性语素。动词代码为 v。在语素的代码g前面置以V。
v动词取英语动词 verb的第一个字母。
vd副动词直接作状语的动词。动词和副词的代码并在一起。
vn名动词指具有名词功能的动词。动词和名词的代码并在一起。
w标点符号
x非语素字非语素字只是一个符号,字母 x通常用于代表未知数、符号。
y语气词取汉字“语”的声母。
z状态词取汉字“状”的声母的前一个字母。
un未知词

不带关键词权重

例子:

import jieba.analyse

# 定义文本
text = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。" \\
       "它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。" \\
       "自然语言处理是一门融语言学、计算机科学、数学于一体的科学。" \\
       "因此,这一领域的研究将涉及自然语言,即人们日常使用的语言," \\
       "所以它与语言学的研究有着密切的联系,但又有重要的区别。" \\
       "自然语言处理并不是一般地研究自然语言," \\
       "而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。" \\
       "因而它是计算机科学的一部分"

# 提取关键词
keywords = jieba.analyse.extract_tags(text, topK=20, withWeight=False)

# 调试输出
print([i for i in keywords])

输出结果:

Building prefix dict from the default dictionary ...
Loading model from cache C:\\Users\\Windows\\AppData\\Local\\Temp\\jieba.cache
Loading model cost 0.890 seconds.
Prefix dict has been built successfully.
['自然语言', '计算机科学', '语言学', '研究', '领域', '处理', '通信', '有效', '软件系统', '人工智能', '实现', '计算机系统', '重要', '一体', '一门', '日常', '计算机', '密切', '数学', '研制']

附带关键词权重

import jieba.analyse

# 定义文本
content = "自然语言处理是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言处理包括多方面和步骤,基本有认知、理解、生成等部分。"

# 定义文本
text = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。" \\
       "它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。" \\
       "自然语言处理是一门融语言学、计算机科学、数学于一体的科学。" \\
       "因此,这一领域的研究将涉及自然语言,即人们日常使用的语言," \\
       "所以它与语言学的研究有着密切的联系,但又有重要的区别。" \\
       "自然语言处理并不是一般地研究自然语言," \\
       "而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。" \\
       "因而它是计算机科学的一部分"

# 提取关键词 (带权重)
keywords = jieba.analyse.extract_tags(text, topK=20, withWeight=True)

# 调试输出
print([i for i in keywords])

输出结果:

Building prefix dict from the default dictionary ...
Loading model from cache C:\\Users\\Windows\\AppData\\Local\\Temp\\jieba.cache
Loading model cost 1.110 seconds.
Prefix dict has been built successfully.
[('自然语言', 1.1237629576061539), ('计算机科学', 0.4503481350267692), ('语言学', 0.27566262244215384), ('研究', 0.2660770221507693), ('领域', 0.24979825580353845), ('处理', 0.24973179957046154), ('通信', 0.2043557391963077), ('有效', 0.16296019853692306), ('软件系统', 0.16102600688461538), ('人工智能', 0.14550809839215384), ('实现', 0.14389939312584615), ('计算机系统', 0.1402028601413846), ('重要', 0.12347581087876922), ('一体', 0.11349408224353846), ('一门', 0.11300493477184616), ('日常', 0.10913612756276922), ('计算机', 0.1046889912443077), ('密切', 0.10181409957492307), ('数学', 0.10166677655076924), ('研制', 0.09868653898630769)]

TextRank

TextRank 通过词之间的相邻关系构建网络,然后用PageRank 迭代计算每个节点的 rank 值. 排序 rank值即可得到关键词.

import jieba.analyse

# 定义文本
content = "自然语言处理是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言处理包括多方面和步骤,基本有认知、理解、生成等部分。"

# 定义文本
text = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。" \\
       "它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。" \\
       "自然语言处理是一门融语言学、计算机科学、数学于一体的科学。" \\
       "因此,这一领域的研究将涉及自然语言,即人们日常使用的语言," \\
       "所以它与语言学的研究有着密切的联系,但又有重要的区别。" \\
       "自然语言处理并不是一般地研究自然语言," \\
       "而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。" \\
       "因而它是计算机科学的一部分"

# TextRank提取关键词
keywords = jieba.analyse.textrank(text, topK=20, withWeight=False)

# 调试输出
print([i for i in keywords])

调试输出:

Building prefix dict from the default dictionary ...
Loading model from cache C:\\Users\\Windows\\AppData\\Local\\Temp\\jieba.cache
['研究', '领域', '计算机科学', '实现', '处理', '语言学', '数学', '人们', '计算机', '涉及', '有着', '一体', '方法', '语言', '研制', '使用', '人工智能', '在于', '联系', '科学']
Loading model cost 1.062 seconds.
Prefix dict has been built successfully.

以上是关于NLP⚠️学不会打我! 半小时学会基本操作 2⚠️ 关键词的主要内容,如果未能解决你的问题,请参考以下文章

NLP⚠️学不会打我! 半小时学会基本操作 4⚠️词向量模型

NLP⚠️学不会打我! 半小时学会基本操作 4⚠️词向量模型

NLP⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类

NLP⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类

NLP⚠️学不会打我! 半小时学会基本操作 1⚠️ 分词

NLP⚠️学不会打我! 半小时学会基本操作 1⚠️ 分词