- 1 使用词性标注器
1 使用词性标注器
一个词语性质标注器或者词性标注器处理一个单词序列,为每个词附加一个词性标记(不要忘记import nltk
):
>>> text = word_tokenize("And now for something completely different")
>>> nltk.pos_tag(text)
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),
('completely', 'RB'), ('different', 'JJ')]
在这里我们看到 and 是CC
,并列连词;now 和 completely 是RB
,副词;for 是IN
,介词;something 是NN
,名词;different 是JJ
,形容词。
注意
NLTK 为每个标记提供了文档,可以使用该标记来查询,如nltk.help.upenn_tagset('RB')
,或者一个正则表达,如nltk.help.upenn_tagset('NN.*')
。一些语料库有标记集文档的 README 文件,见nltk.corpus.???.readme()
,用语料库的名称替换。
让我们来看看另一个例子,这次包括一些同形同音异义词:
>>> text = word_tokenize("They refuse to permit us to obtain the refuse permit")
>>> nltk.pos_tag(text)
[('They', 'PRP'), ('refuse', 'VBP'), ('to', 'TO'), ('permit', 'VB'), ('us', 'PRP'),
('to', 'TO'), ('obtain', 'VB'), ('the', 'DT'), ('refuse', 'NN'), ('permit', 'NN')]
请注意 refuse 和 permit 都以现在时动词(VBP
)和名词(NN
)形式出现。例如 refUSE 是一个动词,意为“拒绝”,而 REFuse 是一个名词,意为“垃圾”(即它们不是同音词)。因此,我们需要知道正在使用哪一个词以便能正确读出文本。(出于这个原因,文本转语音系统通常进行词性标注。)
注意
轮到你来: 很多单词,如 ski 和 race,可以用作名词或动词而发音没有区别。你能想出其他的吗?提示:想想一个常见的东西,尝试把词 to 放到它前面,看它是否也是一个动词;或者想想一个动作,尝试把 the 放在它前面,看它是否也是一个名词。现在用这个词的两种用途造句,在这句话上运行词性标注器。
词汇类别如“名词”和词性标记如NN
,看上去似乎有其用途,但在细节上将使许多读者感到晦涩。你可能想知道要引进这种额外的信息的理由是什么。很多这些类别源于对文本中单词分布的粗略分析。考虑下面的分析,涉及 woman(名词),bought(动词),over(介词)和 the(限定词)。text.similar()
方法接收一个单词 w,找出所有上下文 w<sub>1</sub>w w<sub>2</sub>,然后找出所有出现在相同上下文中的词 w’,即 w<sub>1</sub>w’w<sub>2</sub>。
>>> text = nltk.Text(word.lower() for word in nltk.corpus.brown.words())
>>> text.similar('woman')
Building word-context index...
man day time year car moment world family house boy child country job
state girl place war way case question
>>> text.similar('bought')
made done put said found had seen given left heard been brought got
set was called felt in that told
>>> text.similar('over')
in on to of and for with from at by that into as up out down through
about all is
>>> text.similar('the')
a his this their its her an that our any all one these my in your no
some other and
可以观察到,搜索 woman 找到名词;搜索 bought 找到的大部分是动词;搜索 over 一般会找到介词;搜索 the 找到几个限定词。一个标注器能够正确识别一个句子的上下文中的这些词的标记,例如 The woman bought over $150,000 worth of clothes。
一个标注器还可以为我们对未知词的认识建模,例如我们可以根据词根 scrobble 猜测 scrobbling 可能是一个动词,并有可能发生在 he was scrobbling 这样的上下文中。