最近实验室参加了个比赛,比赛内容是做一个英文学术论文阅读 / 写作的辅助系统(RFW:Read For Write),我做了一部分的数据收集和处理工作。

  • 数据收集阶段:我舍友写了个爬虫网页pdf的代码,我用的那个代码爬的数据,相对轻松
  • 数据处理阶段:我做的主要是词性标注,包括:标记解析、词性标注、词性还原三步

这次就整理一下词性标注的基本方法。

1 NLTK库的安装

词性标注中最主要用到的库是NLTK库,具体的安装过程和遇到问题的解决办法可以参考我的这篇文章:【自然语言处理】NLTK库的安装
在词性标注中我们会用到的wordnet, averaged_perceptron_tagger, punkt包,三个包应该分别存在corpora, taggers, tokenizers文件夹下,最终的存储位置可参考如下:

2 标记解析

一个句子是由若干标记(Token)组成的,标记既可以是一个词,也可以是标点符号等。将句子分割为标记的过程为标记解析(Tokenization)。
函数:word_tokenize()

  • 入口参数:待标注的句子
  • 出口参数:解析后的分词列表

实现代码如下:

from nltk import word_tokenizeline = "They fired a gun, and they sit by the fire."
tokens = word_tokenize(line)    # 标记解析

结果:

print(tokens)
['They', 'fired', 'a', 'gun', ',', 'and', 'they', 'sit', 'by', 'the', 'fire', '.']

补充:
标记解析有点类似于我们词频统计的第一步:分词,标记解析除了使用方便以外,还有这两点优势:

  • 准确
    一般来讲,一个句子的结尾具有明显的标志,如句号、问号和感叹号等,因此可以用简单的规则进行分句。然而,往往存在大量的例外情况,如在英文中,句号除了可以作为句尾标志,还可以作为单词的一部分(如"Mr.")。NLTK提供的分句功能可以较好地解决此问题。
  • 有用
    标记解析往往与下面的词性标注相结合,使每个单词的词性能够结合具体的句子而标注。

3 词性标注

当分词结束后,我们需要利用NLTK库对每个词进行词性标注(pos_tag),词性(POS: Part Of Speech)的标注(tag)往往基于标记解析。
函数:nltk.pos_tag()

  • 入口参数:分词列表
  • 出口参数:二元组(词,词性标签)

实现代码如下:

from nltk import pos_tagtags = pos_tag(tokens)

结果:

for item in tags:print(item)('They', 'PRP')
('fired', 'VBD')
('a', 'DT')
('gun', 'NN')
(',', ',')
('and', 'CC')
('they', 'PRP')
('sit', 'VBP')
('by', 'IN')
('the', 'DT')
('fire', 'NN')
('.', '.')

补充:词性标签
因为我们本次是动词标注,所以先列出动词标签,更多的可以参考:python自然语言处理——NLTK——词性标签(pos_tag)

词性标签 词性 举例
VB 动词 take
VBD 过去时 took
VBG 动名词 / 现在分词 taking
VBN 过去分词 taken
VBP 一般现在时 take
VBZ 第三人称 takes

4 词性还原

当出现类似take、takes这种动词,我们往往更想要take的各种时态的总频率,而不是各自的词频,因此需要词性还原。代码如下:

from nltk.stem import WordNetLemmatizerwnl = WordNetLemmatizer()
print(wnl.lemmatize('running', 'v'))

这段代码的返回结果是:

run

5 总代码

以上就是动词标注的三步流程,其余词性的标注看情况加第三步,但前两步的处理是一致的。
总代码如下:

from nltk import word_tokenize
from nltk import pos_tag
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizerline = "They fired a gun, and they sit by the fire."
tokens = word_tokenize(line)    # 标记(Token)解析, 可简单理解为分词(不包括小写和去符号的过程)
tags = pos_tag(tokens)          # 词性标注, 标记后的结果是二元数组格式# for token in tokens:
#     print(token)
# print("==================")
# for item in tags:
#     print(item)# # 词性还原
# wnl = WordNetLemmatizer()
# print(wnl.lemmatize('running', 'v'))v_tags = {'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ'}  # set
wnl = WordNetLemmatizer()
for word, pos in tags:if pos in v_tags:print(wnl.lemmatize(word, 'v'))

结果:(注意这个fire是前面那个fired变换得来的)

fire
sit

6 参考

[1] 【自然语言处理】NLTK库的安装
[2] python自然语言处理——NLTK——词性标签(pos_tag)
[3] 自然语言处理(NLP)之英文单词词性还原

【自然语言处理】词性标注相关推荐

  1. python自然语言处理.词性标注

    想要了解更多 NLP 相关的内容,请访问 NLP专题 ,免费提供59页的NLP文档下载. 访问 NLP 专题,下载 59 页免费 PDF 什么是词性标注? 维基百科上对词性的定义为:In tradit ...

  2. 自然语言分词词性标注指代

    自然语言文本处理通常需要进行词性标注,下面是常见标注 ROOT:要处理文本的语句 IP:简单从句 NP:名词短语 VP:动词短语 PU:断句符,通常是句号.问号.感叹号等标点符号 LCP:方位词短语 ...

  3. 自然语言处理——词性标注、词干提取、词形还原

    目录 词性标注 方法 工具 实例 词干提取和词形还原 算法 步骤 词性标注 一般而言,文本里的动词可能比较重要,而助词可能不太重要: 我今天真好看 我今天真好看啊 甚至有时候同一个词有着不同的意思: ...

  4. 自然语言处理中的词性标注全称

    转载自: 作者:qq280929090 来源:CSDN 原文:https://blog.csdn.net/qq280929090/article/details/70162081 自然语言处理词性标注 ...

  5. python爬虫自学笔记分析解密_python爬虫学习笔记——1 各种文本分析工具简介之汇总...

    此处只简单汇总一下各种文本工具名目,他们的详细使用参见具体帖子.本文主要参考<8种目前Python使用率最高的文本处理工具>一文0.SnowNLP包 用于中文文本的处理 1.Jieba 2 ...

  6. 目前最流行的15个机器学习框架,你知道几个?

    机器学习工程师是开发产品和构建算法团队中很重要的一部分,他们和数据专家密切合作来了解理论知识和行业应用.数据专家和机器学习工程师的主要区别是: •   机器学习工程师构建.开发和维护机器学习系统的产品 ...

  7. 自然语言处理中的中文词性、标记规范及其应用

    分词和词性标注是自然语言处理领域的重要组成部分,尤其对于中文而言,作为整条自然语言处理pipeline的源头,分词和词性标注更是起到了关键的作用.我整理这篇文章,主要来源于这几个问题: 一.理解中文词 ...

  8. 自然语言处理NLP之BERT、BERT是什么、智能问答、阅读理解、分词、词性标注、数据增强、文本分类、BERT的知识表示本质

    自然语言处理NLP之BERT.BERT是什么.智能问答.阅读理解.分词.词性标注.数据增强.文本分类.BERT的知识表示本质 目录

  9. 自然语言处理基础技术之词性标注

    声明:转载请注明出处,谢谢:https://blog.csdn.net/m0_37306360/article/details/84502176 另外,更多实时更新的个人学习笔记分享,请关注: 知乎: ...

  10. NLP之TEA:基于SnowNLP实现自然语言处理之对输入文本进行情感分析(分词→词性标注→拼音简繁转换→情感分析→测试)

    NLP之TEA:基于SnowNLP实现自然语言处理之对输入文本进行情感分析(分词→词性标注→拼音&简繁转换→情感分析→测试) 目录 NLP分词 NLP词性标注 NLP情感分析-TEA NLP常 ...

最新文章

  1. 公司成立两周年感言_对我的副项目成立一周年的一些反思
  2. 文巾解题 177. 第N高的薪水
  3. mysql数据库迁徙_mysql数据迁徙详解
  4. 金蝶二次开发好跳槽吗_金蝶财务软件不会操作怎么办?
  5. 红橙Darren视频笔记 数据库操作优化 数据查询(数据库操作)中
  6. 采集gpu_GPU温度的采集
  7. 读《研发的那些事》有感
  8. Linux安装教程(超详细版)
  9. Ra2辅助制作(1)
  10. MySQL-Front设置中文
  11. 有些网站部分浏览器可以打开,Chrome打不开的可能性原因
  12. 贝塞尔曲线(Bezier Curve)
  13. PS使用高反差保留增加图像锐度
  14. Serval Project——Android
  15. Progression Approximation---以无穷数列求和为例
  16. photoshop进行景深合成
  17. XXX处有未经处理的异常: 0xC0000374: 堆已损坏,处有未经处理的异常: 0xC0000005: 读取位置 0x4F774B16 时发生访问冲突。
  18. 【课设分享】基于51单片机的恒温控制器系统
  19. 大学物理——质点运动学
  20. 学了HTML,快来试着做一份简历吧

热门文章

  1. PC 护眼模式(凑合用)
  2. 计算机桌面任务栏怎样显示输入法,电脑的任务栏上找不到输入法图标怎么办
  3. 每日算法(5)——正整数分解质因数
  4. Servlet 实现上传附件(支持多附件)
  5. 计算机基础制作幻灯片讲解,计算机应用基础_幻灯片制作.ppt
  6. excel两个表格数据对比_excel如何1秒钟合并两个不同表格数据?收下这个方法吧...
  7. mysql中orderby用法_MySQL教程:OrderBy用法_MySQL
  8. 运营方法 - 运营的思考方法
  9. 【数据挖掘算法】(二)MSET 算法参差分析
  10. java 时间转化成数字_Java将日期转化为大写格式(阿拉伯大写数字)