找到动词的最佳介词
下面是如何获得Brown语料库中所有动词 - 介词对的频率计数,然后查找动词“go”的动词 - 介词对。首先计数:
import nltk
from nltk.corpus import brown
prepchoices = nltk.ConditionalFreqDist((v[0], p[0])
for (v, p) in nltk.bigrams(brown.tagged_words(tagset="universal"))
if v[1] == "VERB" and p[1] == "ADP")
“ADP”代表“adposition”,即介词或post-position。现在,让我们来看看我们有什么:
>>> prepchoices["go"]
FreqDist({'to': 96, 'with': 20, 'into': 18, 'through': 8, 'on': 8, 'for': 7,
'in': 5, 'out': 4, 'around': 4, 'from': 4, ...})
你可以得到的最佳选择,在按频率的降序,与most_common()
:
>>> print(prepchoices["go"].most_common(5))
[('to', 96), ('with', 20), ('into', 18), ('through', 8), ('on', 8)]
我没有做动词词干任何(“去”和“去”被算作单独的词),甚至是折叠的情况。你可以添加它们,但上面应该已经给你一个分配的体面图片。
这真的很有帮助。无论如何使用,如果与卦,并找到它们之间的词? – ida
现在你改变了这个问题!你特别要求“介词可以和动词一起分发”。给定一个列表'triples = [(v1,prep1,n1),(v2,prep2,n2),...]',你可以像这样构造分布:'nltk.ConditionalFreqDist(((v,n),prep )for v,prep,n in triples)'。现在'(v,n)'元组是键。但(a)你将需要*很多更多的数据才能获得可靠的分配,并且(b)通常名词不会立即跟随准备,所以你必须做好找到它的工作。我的预测是,最好忽略名词,并使用上述。 – alexis
如果你真的**需要名词,我会建立一个单独的'(名词,准备)'条件分配表,并使用它们来计算完成的频率。不过,您仍然需要在训练语料库中的每个准备之后找到名词。无论如何,你现在知道如何将'nltk'应用于你的问题。其余的由你决定。 – alexis
听说NLTK是有用的,但我相信你可以找到很多公共Github上回购的,如果你搜索。出现的一些结果是TextBlob,标准核心NLP,spaCy,genism。
我已经看过这些库,但我不知道它们是否提供介词 - 动词关系 – ida
这是关于英文文本,对吗?介词是一个封闭的类,这意味着你可以创建一个所有介词的完整列表(你不能用于名词或动词)。如果你知道开放时间段的位置,你可以填写每个候选者,并使用语言模型来比较每个候选人整个句子的困惑程度。这当然是一种蛮力方法,我相信有更好的方法来做到这一点。 – lenz