目录

  • 词性标注
    • 方法
    • 工具
    • 实例
  • 词干提取和词形还原
    • 算法
    • 步骤

词性标注

一般而言,文本里的动词可能比较重要,而助词可能不太重要:

  • 我今天真好看
  • 我今天真好看啊

甚至有时候同一个词有着不同的意思:

  • 我一把把把把住了

越是常用的词,不同的用法越多。由于兼类使用程度高,兼类现象涉及汉语中大部分词类,因而造成在汉语文本中词类歧义排除的任务量巨大。

那么这个时候可以先对词汇进行词性标注(即在文本中判定每个词的语法范畴,确定其词性并加以标注的过程),再基于词性提取关键词。因此,词性标注为文本处理提供了相当关键的信息。

方法

  • 基于规则的词性标注方法:较早的⼀种词性标注方法,其基本思想是按兼类词搭配关系和上下文语境建造词类消歧规则。早期的规则⼀般由人工构建。随着标注语料库规模的增⼤,可利用的资源也变得越来越多,这时候以人工提取规则的方法显然有些力不从心,而需要通过数据统计让机器发现一些规律。
  • 基于统计模型的词性标注方法:将词性标注看作是⼀个序列标注问题。其基本思想是,给定带有各自标注的词的序列,我们可以确定下⼀个词最可能的词性。常用的模型有有隐马尔可夫模型(HMM)、条件随机场(CRF)等统计模型。
  • 基于统计方法与规则方法相结合的词性标注方法 :这类方法的主要特点在于对统计标注结果的筛选,只对那些被认为可疑的标注结果,才采用规则方法进行歧义消解,而不是对所有情况都既使用统计方法又使⽤规则方法。
  • 基于深度学习的词性标注⽅法:可以当作序列标注的任务来做,目前深度学习解决序列标注任务常用方法包括 LSTM+CRF、BiLSTM+CRF 等。

工具

  • jieba
  • SnowNLP
  • THULAC
  • StanfordCoreNLP
  • HanLP
  • NLTK
  • SpaCy:注意不支持中文

实例

以 jieba 为例,我们来实现中文的词性标注:

import jieba.posseg
# jieba.posseg.cut()能够同时实现分词并词性标注
sentence_taged = jieba.posseg.cut("处理自然语言就是那么简单啊。")
for i in sentence_taged:print(i.word, i.flag)  # flag 即表示词性# 输出结果:
# 处理 v
# 自然语言 l
# 就是 d
# 那么 r
# 简单 a
# 啊 zg
# 。 x

接下来以 NLTK 为例,我们来实现英文的词性标注:
使用 NLTK 对英文文本进行处理时,首先需要下载 NLTK 拓展包,可以使用 nltk.download() 来选择性下载所需拓展包或者直接使用 python -m nltk.downloader all 下载全部数据拓展包。

import nltk# 注意,nltk.word_tokenize()是对英文的分词,nltk.pos_tag()为词性标注
sentence_taged = nltk.pos_tag(nltk.word_tokenize("Great minds think alike. "))
print(sentence_taged)# 输出结果:
# [('Great', 'JJ'), ('minds', 'NNS'), ('think', 'VBP'), ('alike', 'RB'), ('.', '.')]

词干提取和词形还原

搜索引擎中键入 “apple”,查询相关的文章,假如有个文本中包含了 “apples” ,它是否也该返回作为搜索结果呢?理论上是的。所以在这里,就需要对文本中的 “apples” 做一些特殊处理,以便其能与 “apple” 产生关联,这里就涉及到了两种技术,即词干提取以及词形还原。

但是词干提取与词形还原只针对具有形态变化的语言,比如英文、法文、德文等,中文是固定形态语言,因此并不存在这两种预处理操作。 接下来应用 NLTK 工具包进行词干提取以及词形还原:

# 导入下面三种词干提取器进行对比
import nltk.stem.porter as pt
import nltk.stem.lancaster as lc
import nltk.stem.snowball as sbwords = ['table', 'probably', 'wolves', 'playing', 'is', 'dog', 'the', 'beaches','grounded', 'dreamt', 'envision']pt_stemmer = pt.PorterStemmer()
lc_stemmer = lc.LancasterStemmer()
sb_stemmer = sb.SnowballStemmer("english")for word in words:pt_stem = pt_stemmer.stem(word)lc_stem = lc_stemmer.stem(word)sb_stem = sb_stemmer.stem(word)print("%8s %8s %8s %8s" % (word, pt_stem, lc_stem, sb_stem))

输出结果:

   table     tabl     tabl     tabl
probably  probabl     prob  probablwolves     wolv     wolv     wolvplaying     play     play     playis       is       is       isdog      dog      dog      dogthe      the      the      thebeaches    beach    beach    beach
grounded   ground   ground   grounddreamt   dreamt   dreamt   dreamt
envision    envis    envid    envis

算法

虽然在以上的结果中,三种词干提取的算法结果一致,但是还是有所区别的:

  • Porter:比较旧的算法,核心原理是删除单词的共同结尾,以便将它们解析为通用形式。通常情况下,不建议将它用于复杂的应用。
  • Snowball:种算法也称为 Porter2 词干算法,几乎被普遍认为比Porter 更好,Snowball 在 Porter 的基础上加了很多优化。Snowball 与 Porter 相比差异约为 5%,一般任务中,推荐使用这种方法。
  • Lancaster:算法比较激进,有时候会处理成⼀些比较奇怪的单词。如果在 nltk 中使用词干分析器,则可以非常轻松地将自己的自定义规则添加到此算法中。

步骤

对于某个文本,实施词形还原需要以下三个步骤:

  • 分词
  • 词性标注
  • 词形还原
from nltk import word_tokenize, pos_tag
from nltk.corpus import wordnet# 获取单词的词性
def get_wordnet_pos(tag):if tag.startswith('J'):return "j"elif tag.startswith('V'):return "v"elif tag.startswith('N'):return "n"elif tag.startswith('R'):return "r"else:return Nonesentence = 'football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal.'tokens = word_tokenize(sentence)  # 第一步:分词tagged_sent = pos_tag(tokens)     # 第二步:获取单词词性wnl = WordNetLemmatizer()  # 第三步:词干提取器
lemmas_sent = []
for tag in tagged_sent:wordnet_pos = get_wordnet_pos(tag[1]) or wordnet.NOUN  # tag[1]指单词词性lemmas_sent.append(wnl.lemmatize(tag[0], pos=wordnet_pos))  # tag[0]指单词本身print(lemmas_sent)# 输出结果:
# ['football', 'be', 'a', 'family', 'of', 'team', 'sport', 'that', 'involve', ',', 'to', 'vary', 'degree', ',', 'kick', 'a', 'ball', 'to', 'score', 'a', 'goal', '.']

自然语言处理——词性标注、词干提取、词形还原相关推荐

  1. NLP:自然语言处理技术之词语级别相关术语解释(如上位词/WordNet)、基于词汇层面的词法分析六大任务(分词/词性标注/词干提取-词形还原/新词发现/形态分析/拼写校正)的简介及其应用

    NLP:自然语言处理技术之词语级别相关术语解释(如上位词/WordNet).基于词汇层面的词法分析(Lexical Analysis)六大任务(分词/词性标注/词干提取-词形还原/新词发现/形态分析/ ...

  2. 3.3.1-取词干和词形还原

    目录 取词干和词形还原 取词干 实例 词形还原 取词干和词形还原 是词形归并. 目的:减少词的变化形式,将派生词转化为基本形式. 优点1:字典中词条的数量就会降低,用于表示文档的向量维度更低,模型的数 ...

  3. Java基于stanford-corenlp实现英文词形还原

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 简介 stanford-corenlp jav ...

  4. 自然语言表达处理笔记01—— 1.正则表达式 2.文本标记化 3.词干提取和词形还原 4.中文分词

    正则表达式 正则表达式使用某种预定义的模式 匹配 具有共同特征的字符串:主要用于处理字符串.完成复杂的查找.替换等要求 对字符串和特殊字符操作的逻辑公式 单个字符串描述匹配一系列复合某个句法规则的字符 ...

  5. NLTK(3)处理文本、分词、词干提取与词形还原

    文章目录 访问文本 @字符串处理 @编码 @正则表达式 分词 @正则表达式分词(不好) Tokenize命令 @自定义函数 规范化文本 将文本转换为小写 查找词干 @自定义函数(不好) NLTK词干提 ...

  6. 词形变换和词干提取工具(英文)

    转载自: http://www.cnblogs.com/kaituorensheng/p/3437807.html 词形变换和词干提取工具(英文) 在信息检索和文本挖掘中,需要对一个词的不同形态进行归 ...

  7. java lucene词干提取_词形变换和词干提取工具(英文)

    在信息检索和文本挖掘中,需要对一个词的不同形态进行归并,即词形规范化,从而提高文本处理的效率.例如:词根run有不同的形式running.ran另外runner也和run有关.这里涉及到两个概念: 词 ...

  8. java 分词获取词性,英文分词的关键:词性还原和词干提取

    人工智能时代,能让计算机自动化进行文字语义理解非常重要,因此,进行语义理解的第一步--如何正确地根据语义完成词语切分(即分词)就是一个非常具有挑战性的任务,一旦切词发生失误,会导致后续的文本处理产生连 ...

  9. nltk词性标注与词形还原中的词性类型匹配

    一.两函数词性不匹配问题: nltk中词性标注函数nltk.pos_tag([])得到的结果:NN,NNP,VB等 nltk中词形还原函数nltk.stem.WordNetLemmatizer().l ...

最新文章

  1. FLUSH TABLES WITH READ LOCK
  2. USNews 2020美国大学排名公布:UCLA超越伯克利;计算机专业MIT第一,斯坦福跌出前四...
  3. js在for循环中绑定事件
  4. 大数据:Hive和Hbase的区别于优势
  5. mysql 线程池源码模块_易语言Mysql线程池2.0模块源码
  6. python汉诺塔用循环结构实现_Python基于递归算法实现的汉诺塔与Fibonacci数列
  7. 2010.7.27 OnDraw与OnPaint有什么区别
  8. 设计实现优雅修改redux数据流的一个库 - redux-chef
  9. Vue、J2ee - 001 : Vue项目的创建过程
  10. 我的2021 年终总结
  11. java读文件写文件
  12. python打印文档添加条码_使用Python在Excel中批量生成条形码
  13. 【安装cad后不小心卸了,再次重新安装时显示已安装。这个怎么破?】
  14. Sigmoid函数解析
  15. DeepNet :Scaling Transformers to 1000 Layer
  16. centos7安装XtraBackup 2.4.4
  17. 小米路由器 4A 千兆版折腾日志
  18. 自考计算机原理,自考计算机原理考点.doc
  19. 在thinkphp框架中如何对多表进行操作(thinkphp多表查询方法)
  20. js jquery学习资料

热门文章

  1. nslookup 查邮件服务器地址
  2. redis6种数据淘汰策略
  3. 基于SSM实现餐厅收银系统
  4. 数据湖在大数据场景下应用和实施方案调研笔记(增强版)
  5. 赛扬处理器_神舟推出优雅X4D2轻薄本,搭载赛扬处理器
  6. pt->onnx->ncnn(pytorch部署自己训练的模型)
  7. 易观分析:2022年Q2中国网络零售B2C市场交易规模达23444.7亿元
  8. 常用的原生DOM操作汇总
  9. Learning with Noisy Correspondence for Cross-modal Matching 文献翻译 代码简析
  10. android模拟器 报错:X Error of failed request: BadRequest (invalid request code or no such operation)