转自:https://cloud.tencent.com/developer/article/1091815

1. 分词(Word Cut)

英文:单词组成句子,单词之间由空格隔开

中文:字、词、句、段、篇

词:有意义的字组合

分词:将不同的词分隔开,将句子分解为词和标点符号

英文分词:根据空格 中文分词:三类算法

中文分词难点:歧义识别、未登录词 中文分词的好坏:歧义词识别和未登录词的识别准确率

分词工具:Jieba,SnowNLP,NlPIR,LTP,NLTK。

2. 词性标注(POS Tag)

词性也称为词类或词汇类别。用于特定任务的标记的集合被称为一个标记集

词性:词类,词汇性质,词汇的语义功能,词汇的所属类别

词性取决于:1.选定的词的类别体系 2.词汇本身在语句中上下文的语法语义功能 一个词汇有多个不同的词性,词性兼类现象

词性唯一:单性词 词性多于2个:兼类词

词性标注:将单词按它们的词性分类并进行相应地标注的过程,称为词语性质标注、词性标注或简称标注。

词性标注器:一个标注器能够正确识别一个句子的上下文中的这些词的标记 词性标注方法:三类

2.1 NLTK常用词性:

  1. CC Coordinating conjunction 连接词
  2. CD Cardinal number 基数词
  3. DT Determiner 限定词(如this,that,these,those,such,不定限定词:no,some,any,each,every,enough,either,neither,all,both,half,several,many,much,(a) few,(a) little,other,another.
  4. EX Existential there 存在句
  5. FW Foreign word 外来词
  6. IN Preposition or subordinating conjunction 介词或从属连词
  7. JJ Adjective 形容词或序数词
  8. JJR Adjective, comparative 形容词比较级
  9. JJS Adjective, superlative 形容词最高级
  10. LS List item marker 列表标示
  11. MD Modal 情态助动词
  12. NN Noun, singular or mass 常用名词 单数形式
  13. NNS Noun, plural 常用名词 复数形式
  14. NNP Proper noun, singular 专有名词,单数形式
  15. NNPS Proper noun, plural 专有名词,复数形式
  16. PDT Predeterminer 前位限定词
  17. POS Possessive ending 所有格结束词
  18. PRP Personal pronoun 人称代词
  19. PRP$ Possessive pronoun 所有格代名词
  20. RB Adverb 副词
  21. RBR Adverb, comparative 副词比较级
  22. RBS Adverb, superlative 副词最高级
  23. RP Particle 小品词
  24. SYM Symbol 符号
  25. TO to 作为介词或不定式格式
  26. UH Interjection 感叹词
  27. VB Verb, base form 动词基本形式
  28. VBD Verb, past tense 动词过去式
  29. VBG Verb, gerund or present participle 动名词和现在分词
  30. VBN Verb, past participle 过去分词
  31. VBP Verb, non-3rd person singular present 动词非第三人称单数
  32. VBZ Verb, 3rd person singular present 动词第三人称单数
  33. WDT Wh-determiner 限定词(如关系限定词:whose,which.疑问限定词:what,which,whose.)
  34. WP Wh-pronoun 代词(who whose which)
  35. WP$ Possessive wh-pronoun 所有格代词
  36. WRB Wh-adverb 疑问代词(how where when)

通用词性标记集

标记  含义    英文示例

ADJ 形容词 new, good, high, special, big, local

ADP 介词 on, of, at, with, by, into, under

ADV 副词 really, already, still, early, now

CONJ 连词 and, or, but, if, while, although

DET 限定词,冠词 the, a, some, most, every, no, which

NOUN 名词 year, home, costs, time, Africa

NUM 数词 twenty-four, fourth, 1991, 14:24

PRT 小品词 at, on, out, over per, that, up, with

PRON 代词 he, their, her, its, my, I, us

VERB 动词 is, say, told, given, playing, would . 标点符号 . , ; !

X 其它 ersatz, esprit, dunno, gr8, univeristy

  • NLTK读取已经标注的语料库:一个已标注的词符使用一个由词符和标记组成的元组来表示。str2tuple()
  • 一旦我们开始做词性标注,我们将会创建分配一个标记给一个词的程序,标记是在给定上下文中最可能的标记。我们可以认为这个过程是从词到标记的映射。在Python中最自然的方式存储映射是使用所谓的字典数据类型(在其他的编程语言又称为关联数组或哈希数组)
  • NLTK标记形式:(word,tag)和字典
  • 将字典转换成列表:list(),sorted()
  • 按值排序一个字典的习惯用法,sorted()的第一个参数是要排序的项目,它是由一个词性标记和一个频率组成的元组的列表。第二个参数使用函数itemgetter()指定排序的键。在一般情况下,itemgetter(n)返回一个函数,这个函数可以在一些其他序列对象上被调用获得这个序列的第n个元素。 from operator import itemgetter sorted(counts.items(), key=itemgetter(1), reverse=True)
  • 一个词的标记依赖于这个词和它在句子中的上下文

3.自动标注

3.1默认标注器

1.最简单的标注器是为每个词符分配同样的标记。这似乎是一个相当平庸的一步,但它建立了标注器性能的一个重要的底线。为了得到最好的效果,我们用最有可能的标记标注每个词。让我们找出哪个标记是最有可能的:

2.创建一个将所有词都标注成NN的标注器

raw = 'I do not like green eggs and ham, I do not like them Sam I am!'

tokens = word_tokenize(raw) default_tagger = nltk.DefaultTagger('NN') default_tagger.tag(tokens)

[('I', 'NN'), ('do', 'NN'), ('not', 'NN'), ('like', 'NN'), ('green', 'NN'), ('eggs', 'NN'), ('and', 'NN'), ('ham', 'NN'), (',', 'NN'), ('I', 'NN'), ('do', 'NN'), ('not', 'NN'), ('like', 'NN'), ('them', 'NN'), ('Sam', 'NN'), ('I', 'NN'), ('am', 'NN'), ('!', 'NN')]

不出所料,这种方法的表现相当不好。在一个典型的语料库中,它只标注正确了八分之一的标识符,正如我们在这里看到的:

default_tagger.evaluate(brown_tagged_sents)

Out[13]: 0.13089484257215028

默认的标注器给每一个单独的词分配标记,即使是之前从未遇到过的词。碰巧的是,一旦我们处理了几千词的英文文本之后,大多数新词都将是名词。正如我们将看到的,这意味着,默认标注器可以帮助我们提高语言处理系统的稳定性。

3.2正则表达式标注器

正则表达式标注器基于匹配模式分配标记给词符。例如,我们可能会猜测任一以ed结尾的词都是动词过去分词任一以's结尾的词都是名词所有格。可以用一个正则表达式的列表表示这些:

patterns = [
... (r'.ing$', 'VBG'), # gerunds
... (r'.ed$', 'VBD'), # simple past
... (r'.es$', 'VBZ'), # 3rd singular present
... (r'.ould$', 'MD'), # modals
... (r'.'s$', 'NN$'), # possessive nouns
... (r'.s$', 'NNS'), # plural nouns
... (r'^-?[0-9]+(.[0-9]+)?$', 'CD'), # cardinal numbers
... (r'.*', 'NN') # nouns (default)
... ]
请注意,这些是顺序处理的,第一个匹配上的会被使用。
现在我们可以建立一个标注器,并用它来标记一个句子。做完这一步会有约五分之一是正确的。
regexp_tagger.evaluate(brown_tagged_sents)
Out[21]: 0.20326391789486245

3.3查询标注器

3.4N-gram标注

  • 一元标注器基于一个简单的统计算法:对每个标识符分配这个独特的标识符最有可能的标记。例如,它将分配标记<tt class="doctest">JJ</tt>给词frequent的所有出现,因为frequent用作一个形容词(例如a frequent word)比用作一个动词(例如I frequent this cafe)更常见。一个一元标注器的行为就像一个查找标注器(4),除了有一个更方便的建立它的技术,称为训练。
  • 一个n-gram tagger标注器是一个一元标注器的一般化,它的上下文是当前词和它前面n-1个标识符的词性标记

//一元是只和当前词有关系。

  • 1-gram标注器是一元标注器另一个名称:即用于标注一个词符的上下文的只是词符本身。2-gram标注器也称为二元标注器,3-gram标注器也称为三元标注器。

分词、词性标注POS等学习【转载】的更多相关文章

  1. 第四期coding_group笔记_用CRF实现分词-词性标注

    一.背景知识 1.1 什么是分词? NLP的基础任务分为三个部分,词法分析.句法分析和语义分析,其中词法分析中有一种方法叫Tokenization,对汉字以字为单位进行处理叫做分词. Example ...

  2. Java多线程学习(转载)

    Java多线程学习(转载) 时间:2015-03-14 13:53:14      阅读:137413      评论:4      收藏:3      [点我收藏+] 转载 :http://blog ...

  3. 常用中文分词工具分词&词性标注简单应用(jieba、pyhanlp、pkuseg、foolnltk、thulac、snownlp、nlpir)

    1.jieba分词&词性标注 import jieba import jieba.posseg as posseg txt1 =''' 文本一: 人民网华盛顿3月28日电(记者郑琪)据美国约翰 ...

  4. Windows Services 学习(转载)

    转载:http://blog.csdn.net/fakine/article/details/42107571 一.学习点滴 1.本机服务查看:services.msc /s2.服务手动安装(使用sc ...

  5. OpenGL入门学习(转载)

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

  6. 【学习转载】MyBatis源码解析——日志记录

    声明:转载自前辈:开心的鱼a1 一 .概述 MyBatis没有提供日志的实现类,需要接入第三方的日志组件,但第三方日志组件都有各自的Log级别,且各不相同,但MyBatis统一提供了trace.deb ...

  7. JVM的相关知识整理和学习--(转载)

    JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理.冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储程序方式不加区分的存储在同一个存储器里,并且顺序执行,指令由操 ...

  8. [分词] C#SegList分词辅助类,帮助类 (转载)

    点击下载 SegList.rar 主要功能如下最新的SegList分词辅助类,帮助类看下面代码吧 /// <summary> /// 类说明:SegList /// 编 码 人:苏飞 // ...

  9. Jqgrid学习(转载)

    jqGrid API 全   JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做 ...

随机推荐

  1. 10.13 Django随笔

    2018-10-13 14:20:59 越努力,越幸运! 永远不要高估自己! Django的渲染是在render()时候渲染的,然后把字符串传给浏览器 Django请求流程, 跨域 参考链接: htt ...

  2. 引用了System.Configuration命名空间,却找不到ConfigurationManager类

    用ConfigurationManager类来读取应用程序配置文件的信息时,提示:System.Configuration命名空间下找不到ConfigurationManager类 查过资料后得知:要 ...

  3. Win 10 计算机管理失效(Windows找不到文件“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Computer Management.lnk)

    Windows找不到文件“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Computer Mana ...

  4. ubuntu部署php7.1

    先更新本机内置的程序. sudo apt-get updatesudo apt-get upgrade 安装PHP sudo add-apt-repository ppa:ondrej/php sud ...

  5. jquery <img> 图片懒加载 和 标签如果没有加载出图片或没有图片,就显示默认的图片

    参考链接:http://www.jq22.com/jquery-info390 或压缩包下载地址:链接:http://pan.baidu.com/s/1hsj8ZWw 密码:4a7s    下面是没有 ...

  6. 在PHP系统里连接MySQL 数据访问,+ + + + + 数据删除

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Android开发实战(申明:来源于网络)

    Android开发实战(申明:来源于网络) 地址:http://so.csdn.net/so/search/s.do?q=Android%E5%BC%80%E5%8F%91%E5%AE%9E%E6%8 ...

  8. Node.js编程规范

    摘自:https://github.com/dead-horse/node-style-guide https://github.com/felixge/node-style-guide 2空格缩进 ...

  9. eclipse安装Hadoop-0.20.2插件

    因为在使用Hadoop-0.20.2这个古董,需要使用它自带的eclipse插件,而我最初安装的是现代的eclipse4.10.0. 在经历两天,以及以下种种尝试之后,均以失败告终: 1.网上找适合的 ...

  10. spark application提交应用的两种方式

    bin/spark-submit --help ... ... --deploy-mode DEPLOY_MODE   Whether to launch the driver program loc ...