转自:
1. 分词(Word Cut)
英文:单词组成句子,单词之间由空格隔开
中文:字、词、句、段、篇
词:有意义的字组合
分词:将不同的词分隔开,将句子分解为词和标点符号
英文分词:根据空格 中文分词:三类算法
中文分词难点:歧义识别、未登录词 中文分词的好坏:歧义词识别和未登录词的识别准确率
分词工具:Jieba,SnowNLP,NlPIR,LTP,NLTK。
2. 词性标注(POS Tag)
词性也称为词类或词汇类别。用于特定任务的标记的集合被称为一个标记集
词性:词类,词汇性质,词汇的语义功能,词汇的所属类别
词性取决于:1.选定的词的类别体系 2.词汇本身在语句中上下文的语法语义功能 一个词汇有多个不同的词性,词性兼类现象
词性唯一:单性词 词性多于2个:兼类词
词性标注:将单词按它们的词性分类并进行相应地标注的过程,称为词语性质标注、词性标注或简称标注。
词性标注器:一个标注器能够正确识别一个句子的上下文中的这些词的标记 词性标注方法:三类
2.1 NLTK常用词性:
- CC Coordinating conjunction 连接词
- CD Cardinal number 基数词
- 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.
- EX Existential there 存在句
- FW Foreign word 外来词
- IN Preposition or subordinating conjunction 介词或从属连词
- JJ Adjective 形容词或序数词
- JJR Adjective, comparative 形容词比较级
- JJS Adjective, superlative 形容词最高级
- LS List item marker 列表标示
- MD Modal 情态助动词
- NN Noun, singular or mass 常用名词 单数形式
- NNS Noun, plural 常用名词 复数形式
- NNP Proper noun, singular 专有名词,单数形式
- NNPS Proper noun, plural 专有名词,复数形式
- PDT Predeterminer 前位限定词
- POS Possessive ending 所有格结束词
- PRP Personal pronoun 人称代词
- PRP$ Possessive pronoun 所有格代名词
- RB Adverb 副词
- RBR Adverb, comparative 副词比较级
- RBS Adverb, superlative 副词最高级
- RP Particle 小品词
- SYM Symbol 符号
- TO to 作为介词或不定式格式
- UH Interjection 感叹词
- VB Verb, base form 动词基本形式
- VBD Verb, past tense 动词过去式
- VBG Verb, gerund or present participle 动名词和现在分词
- VBN Verb, past participle 过去分词
- VBP Verb, non-3rd person singular present 动词非第三人称单数
- VBZ Verb, 3rd person singular present 动词第三人称单数
- WDT Wh-determiner 限定词(如关系限定词:whose,which.疑问限定词:what,which,whose.)
- WP Wh-pronoun 代词(who whose which)
- WP$ Possessive wh-pronoun 所有格代词
- 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)更常见。一个一元标注器的行为就像一个查找标注器(),除了有一个更方便的建立它的技术,称为训练。
- 一个n-gram tagger标注器是一个一元标注器的一般化,它的上下文是当前词和它前面n-1个标识符的词性标记
//一元是只和当前词有关系。
- 1-gram标注器是一元标注器另一个名称:即用于标注一个词符的上下文的只是词符本身。2-gram标注器也称为二元标注器,3-gram标注器也称为三元标注器。