找到动词的最佳介词

问题描述:

我有完成句子的任务,我有主语,动词,副词或主语,我需要的是介于两者之间的适当介词。是否有任何NLP工具可以分配可与动词结合的介词?找到动词的最佳介词

最佳

+2

这是关于英文文本,对吗?介词是一个封闭的类,这意味着你可以创建一个所有介词的完整列表(你不能用于名词或动词)。如果你知道开放时间段的位置,你可以填写每个候选者,并使用语言模型来比较每个候选人整个句子的困惑程度。这当然是一种蛮力方法,我相信有更好的方法来做到这一点。 – lenz

下面是如何获得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)] 

我没有做动词词干任何(“去”和“去”被算作单独的词),甚至是折叠的情况。你可以添加它们,但上面应该已经给你一个分配的体面图片。

+0

这真的很有帮助。无论如何使用,如果与卦,并找到它们之间的词? – ida

+0

现在你改变了这个问题!你特别要求“介词可以和动词一起分发”。给定一个列表'triples = [(v1,prep1,n1),(v2,prep2,n2),...]',你可以像这样构造分布:'nltk.ConditionalFreqDist(((v,n),prep )for v,prep,n in triples)'。现在'(v,n)'元组是键。但(a)你将需要*很多更多的数据才能获得可靠的分配,并且(b)通常名词不会立即跟随准备,所以你必须做好找到它的工作。我的预测是,最好忽略名词,并使用上述。 – alexis

+0

如果你真的**需要名词,我会建立一个单独的'(名词,准备)'条件分配表,并使用它们来计算完成的频率。不过,您仍然需要在训练语料库中的每个准备之后找到名词。无论如何,你现在知道如何将'nltk'应用于你的问题。其余的由你决定。 – alexis

听说NLTK是有用的,但我相信你可以找到很多公共Github上回购的,如果你搜索。出现的一些结果是TextBlob,标准核心NLP,spaCy,genism。

+0

我已经看过这些库,但我不知道它们是否提供介词 - 动词关系 – ida

可能想法:

随着完成句子的语料库:

  • 提取所有的双字母组从语料从二元语法
  • 提取介词
  • 款待介词如类和训练分类预测来自其他标记的介词
  • 将分类器应用于新数据

不知道它是如何工作的,因为我从来没有尝试过。尽管所有这些都可以使用spacy + sklearn完成。

+0

如果动词是唯一的预测功能,则无需打扰分类器。直接使用频率。 – alexis