如何从课文中提取动词和所有相应的副词?

2024-10-01 02:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中使用ngram,我的目标是从输入的文本中找出动词及其相应的副词。 我所做的:

输入文本:“他说话很奇怪。马跑得快。那里有一棵大树。太阳很美。这地方很好装饰。他们说话很奇怪。她跑得很快。她在说话很好,杰克运行缓慢。“” 代码:-在

`finder2 = BigramCollocationFinder.from_words(wrd for (wrd,tags) in posTagged if tags in('VBG','RB','VBN',))
scored = finder2.score_ngrams(bigram_measures.raw_freq)
print sorted(finder2.nbest(bigram_measures.raw_freq, 5))`

从代码中,我得到了输出: [('talking', 'greatly'), ('talking', 'weirdly'), ('weirdly', 'talking'),('runs','fast'),('runs','slow')] 这是动词及其相应副词的列表。在

我要找的是:

我想从中找出动词和所有相应的副词。例如('talking'- 'greatly','weirdly),('runs'-'fast','slow')etc.


Tags: 代码in文本rawtagsruns动词freq
2条回答

我想你正在丢失你需要的信息。您需要以某种方式保留词性数据,以便能够以正确的方式处理('weirdly', 'talking')之类的双元组。在

可能是bigram finder可以接受带标记的单词元组(我不熟悉nltk)。或者,您可能不得不求助于创建外部索引。如果是这样的话,这样的方法可能会奏效:

part_of_speech = {word:tag for word,tag in posTagged}
best_bigrams = finger2.nbest(... as you like it ...)

verb_first_bigrams = [b if part_of_speech[b[1]] == 'RB' else (b[1],b[0]) for b in best_bigrams]

然后,用前面的动词,你可以把它转换成字典或列表或其他任何东西:

^{2}$

你已经有了一个所有动词副词双元组的列表,所以你只是在问如何将它们合并到一个字典中,为每个动词提供所有副词。但首先,让我们以更直接的方式重新创建您的bigrams:

pairs = list()
for (w1, tag1), (w2, tag2) in nltk.bigrams(posTagged):
    if t1.startswith("VB") and t2 == "RB":
        pairs.append((w1, w2))

现在来回答你的问题:我们将用每个动词后面的副词建立一个词典。为了避免重复,我将把副词存储在一个集合中,而不是列表中。在

^{2}$

defaultdict为以前从未见过的动词提供了一个空集,因此我们不需要手动检查。在

根据作业的具体情况,你可能还需要将动词进行格叠和词法化,以便将“鲁莽驾驶”和“我小心驾驶”中的副词记录在一起:

wnl = nltk.stem.WordNetLemmatizer()
...
for verb, adverb in pairs:
    verb = wnl.lemmatize(verb.lower(), "v")
    consolidated[verb].add(adverb)

相关问题 更多 >