📅  最后修改于: 2020-10-14 09:20:58             🧑  作者: Mango
标记是一种分类,是标记描述的自动分配。我们称描述符s为“标记”,它代表语音的一部分(名词,动词,副词,形容词,代词,连词及其子类别),语义信息等。
另一方面,如果我们谈论词性(POS)标记,则可以将其定义为将单词列表形式的句子转换为元组列表的过程。在这里,元组的形式为(单词,标签)。我们还可以称呼POS标记为将词性之一分配给给定单词的过程。
下表代表Penn Treebank语料库中使用最频繁的POS通知-
Sr.No | Tag | Description |
---|---|---|
1 | NNP | Proper noun, singular |
2 | NNPS | Proper noun, plural |
3 | PDT | Pre determiner |
4 | POS | Possessive ending |
5 | PRP | Personal pronoun |
6 | PRP$ | Possessive pronoun |
7 | RB | Adverb |
8 | RBR | Adverb, comparative |
9 | RBS | Adverb, superlative |
10 | RP | Particle |
11 | SYM | Symbol (mathematical or scientific) |
12 | TO | to |
13 | UH | Interjection |
14 | VB | Verb, base form |
15 | VBD | Verb, past tense |
16 | VBG | Verb, gerund/present participle |
17 | VBN | Verb, past |
18 | WP | Wh-pronoun |
19 | WP$ | Possessive wh-pronoun |
20 | WRB | Wh-adverb |
21 | # | Pound sign |
22 | $ | Dollar sign |
23 | . | Sentence-final punctuation |
24 | , | Comma |
25 | : | Colon, semi-colon |
26 | ( | Left bracket character |
27 | ) | Right bracket character |
28 | “ | Straight double quote |
29 | ‘ | Left open single quote |
30 | “ | Left open double quote |
31 | ‘ | Right close single quote |
32 | “ | Right open double quote |
让我们通过Python实验来了解它-
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
POS标记是NLP的重要组成部分,因为它是进行进一步NLP分析的前提,如下所示-
所有标记器都驻留在NLTK的nltk.tag包中。这些标记器的基类是TaggerI ,意味着所有标记器都从此类继承。
方法-TaggerI类具有以下两个必须由其所有子类实现的方法-
tag()方法-顾名思义,此方法将单词列表作为输入,并返回已标记单词的列表作为输出。
validate()方法-借助此方法,我们可以评估标记器的准确性。
POS标记的基线或基本步骤是Default Tagging ,可以使用NLTK的DefaultTagger类执行此操作。默认标记只是将相同的POS标记分配给每个令牌。默认标记还提供了基准来衡量准确性的提高。
默认标记是通过使用DefaultTagging类执行的,该类采用单个参数,即我们要应用的标记。
如前所述,所有标记器都继承自TaggerI类。 DefaultTagger继承自SequentialBackoffTagger ,后者是TaggerI类的子类。让我们通过下图了解它-
作为SeuentialBackoffTagger的一部分, DefaultTagger必须实现采用以下三个参数的choose_tag()方法。
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
[('Tutorials', 'NN'), ('Point', 'NN')]
在此示例中,我们选择一个名词标签,因为它是最常见的单词类型。此外,当我们选择最常见的POS标签时, DefaultTagger也是最有用的。
DefaultTagger还是评估标记器准确性的基准。这就是我们可以将其与评估方法一起使用的原因。 validate()方法将标记标记的列表作为评估标记的黄金标准。
以下是一个示例,在该示例中,我们使用了上面创建的默认标记器exptagger来评估树库语料库标记的句子子集的准确性-
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
0.13198749536374715
上面显示的输出,通过选择NN为每个变量,我们可以实现对树库语料的1000个项目约13%的准确度测试。
NLTK的TaggerI类不仅给单个句子加了标签,还为我们提供了一个tag_sents()方法,借助它我们可以标记一个句子列表。以下是我们标记两个简单句子的示例
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
在上面的示例中,我们使用了先前创建的默认标记器exptagger 。
我们还可以取消标记句子。 NLTK为此提供了nltk.tag.untag()方法。它将带标记的句子作为输入,并提供不带标记的单词列表。让我们看一个例子-
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
['Tutorials', 'Point']