语言名词是由动词形成或对应于动词的名词。
我正在寻找一种算法,当给定一个名词时,它会返回相应的动词(如果输入名词是一个口头名词)。
我最初的想法是对名词应用一个词干,然后在动词列表中搜索词干相同的动词。
在执行此操作之前,我创建了一个小的测试数据集。
它表明有时这种方法行不通:
例如:
“解释”和“解释”没有相同的词干。
“决定”和“决定”没有相同的词干。
from nltk.stem.snowball import SnowballStemmer
stemmer = SnowballStemmer('english')
l=[('to increase', 'increase'),
('to inhibit', 'inhibition'),
('to activate', 'activation'),
('to explain', 'explanation'),
('to correlate', 'correlation'),
('to decide', 'decision'),
('to insert', 'insertion')
]
for p in l:
print(stemmer.stem(p[0]), ' <-> ', stemmer.stem(p[1]))
#to increas <-> increas
#to inhibit <-> inhibit
#to activ <-> activ
#to explain <-> explan
#to correl <-> correl
#to decid <-> decis
#to insert <-> insert
有人知道一种方法可以在不具有相同词干的派生名词中使用吗?
答案 0 :(得分:1)
由于无法确定所有情况,因此没有适用于所有情况的解决方案。在英语中,任何名词都可以有效地“动词化”,从而产生了无限个集合。 您可以做的是对标记进行词素化,然后使用nltk的lemma.derivationally_related_forms()函数来获取所有从动词派生的名词。搜索相应的数据结构将为您提供正确的结果。为了减少必须为每个名词搜索的动词数量,可以使用最大的公共前缀之类的名称,例如
看看这个: