• 2.5 动词

    2.5 动词

    动词是用来描述事件和行动的词,例如2.3中的 fall, eat。在一个句子中,动词通常表示涉及一个或多个名词短语所指示物的关系。

    表 2.3:

    一些动词的句法模式

    1. >>> wsj = nltk.corpus.treebank.tagged_words(tagset='universal')
    2. >>> word_tag_fd = nltk.FreqDist(wsj)
    3. >>> [wt[0] for (wt, _) in word_tag_fd.most_common() if wt[1] == 'VERB']
    4. ['is', 'said', 'are', 'was', 'be', 'has', 'have', 'will', 'says', 'would',
    5. 'were', 'had', 'been', 'could', "'s", 'can', 'do', 'say', 'make', 'may',
    6. 'did', 'rose', 'made', 'does', 'expected', 'buy', 'take', 'get', 'might',
    7. 'sell', 'added', 'sold', 'help', 'including', 'should', 'reported', ...]

    请注意,频率分布中计算的项目是词-标记对。由于词汇和标记是成对的,我们可以把词作作为条件,标记作为事件,使用条件-事件对的链表初始化一个条件频率分布。这让我们看到了一个给定的词的标记的频率顺序列表:

    1. >>> cfd1 = nltk.ConditionalFreqDist(wsj)
    2. >>> cfd1['yield'].most_common()
    3. [('VERB', 28), ('NOUN', 20)]
    4. >>> cfd1['cut'].most_common()
    5. [('VERB', 25), ('NOUN', 3)]

    我们可以颠倒配对的顺序,这样标记作为条件,词汇作为事件。现在我们可以看到对于一个给定的标记可能的词。我们将用《华尔街日报 》的标记集而不是通用的标记集来这样做:

    1. >>> wsj = nltk.corpus.treebank.tagged_words()
    2. >>> cfd2 = nltk.ConditionalFreqDist((tag, word) for (word, tag) in wsj)
    3. >>> list(cfd2['VBN'])
    4. ['been', 'expected', 'made', 'compared', 'based', 'priced', 'used', 'sold',
    5. 'named', 'designed', 'held', 'fined', 'taken', 'paid', 'traded', 'said', ...]

    要弄清VBD(过去式)和VBN(过去分词)之间的区别,让我们找到可以同是VBDVBN的词汇,看看一些它们周围的文字:

    1. >>> [w for w in cfd1.conditions() if 'VBD' in cfd1[w] and 'VBN' in cfd1[w]]
    2. ['Asked', 'accelerated', 'accepted', 'accused', 'acquired', 'added', 'adopted', ...]
    3. >>> idx1 = wsj.index(('kicked', 'VBD'))
    4. >>> wsj[idx1-4:idx1+1]
    5. [('While', 'IN'), ('program', 'NN'), ('trades', 'NNS'), ('swiftly', 'RB'),
    6. ('kicked', 'VBD')]
    7. >>> idx2 = wsj.index(('kicked', 'VBN'))
    8. >>> wsj[idx2-4:idx2+1]
    9. [('head', 'NN'), ('of', 'IN'), ('state', 'NN'), ('has', 'VBZ'), ('kicked', 'VBN')]

    在这种情况下,我们可以看到过去分词 kicked 前面是助动词 have 的形式。这是普遍真实的吗?

    注意

    轮到你来: 通过list(cfd2['VN'])指定一个过去分词的列表,尝试收集所有直接在列表中项目前面的词-标记对。