• 1 使用词性标注器

    1 使用词性标注器

    一个词语性质标注器或者词性标注器处理一个单词序列,为每个词附加一个词性标记(不要忘记import nltk):

    1. >>> text = word_tokenize("And now for something completely different")
    2. >>> nltk.pos_tag(text)
    3. [('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),
    4. ('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(),用语料库的名称替换。

    让我们来看看另一个例子,这次包括一些同形同音异义词:

    1. >>> text = word_tokenize("They refuse to permit us to obtain the refuse permit")
    2. >>> nltk.pos_tag(text)
    3. [('They', 'PRP'), ('refuse', 'VBP'), ('to', 'TO'), ('permit', 'VB'), ('us', 'PRP'),
    4. ('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>。

    1. >>> text = nltk.Text(word.lower() for word in nltk.corpus.brown.words())
    2. >>> text.similar('woman')
    3. Building word-context index...
    4. man day time year car moment world family house boy child country job
    5. state girl place war way case question
    6. >>> text.similar('bought')
    7. made done put said found had seen given left heard been brought got
    8. set was called felt in that told
    9. >>> text.similar('over')
    10. in on to of and for with from at by that into as up out down through
    11. about all is
    12. >>> text.similar('the')
    13. a his this their its her an that our any all one these my in your no
    14. some other and

    可以观察到,搜索 woman 找到名词;搜索 bought 找到的大部分是动词;搜索 over 一般会找到介词;搜索 the 找到几个限定词。一个标注器能够正确识别一个句子的上下文中的这些词的标记,例如 The woman bought over $150,000 worth of clothes。

    一个标注器还可以为我们对未知词的认识建模,例如我们可以根据词根 scrobble 猜测 scrobbling 可能是一个动词,并有可能发生在 he was scrobbling 这样的上下文中。