用nltk搜索类似的含义短语

dmv*_*nna 8 python search nlp nltk

我有一堆不相关的段落,我需要遍历它们以找到类似的事件,例如,在我查找的搜索中object falls,我找到True包含以下内容的文本的布尔值:

  • 盒子从架子上掉下来
  • 灯泡在地上破碎了
  • 一块石膏从天花板上掉下来

False为:

  • 责备归于莎拉
  • 气温突然下降

我能够使用NLTKtokenise,tag并得到WORDNET synsets,但我发现很难找出如何适应NLTK的运动部件在一起,以实现所期望的结果.我应该chunk在寻找同义词之前吗?我应该写一个context-free grammar?从treebank标签翻译成Wordnet语法标签时是否有最佳实践?在nltk书中没有解释这一点,我在nltk食谱上找不到它.

在答案中包含大熊猫的答案的奖励积分.


[编辑]:

一些代码来开始

In [1]:

from nltk.tag import pos_tag
from nltk.tokenize import word_tokenize
from pandas import Series

def tag(x):
    return pos_tag(word_tokenize(x))

phrases = ['Box fell from shelf',
           'Bulb shattered on the ground',
           'A piece of plaster fell from the ceiling',
           'The blame fell on Sarah',
           'Berlin fell on May',
           'The temperature fell abruptly']

ser = Series(phrases)
ser.map(tag)

Out[1]:

0    [(Box, NNP), (fell, VBD), (from, IN), (shelf, ...
1    [(Bulb, NNP), (shattered, VBD), (on, IN), (the...
2    [(A, DT), (piece, NN), (of, IN), (plaster, NN)...
3    [(The, DT), (blame, NN), (fell, VBD), (on, IN)...
4    [(Berlin, NNP), (fell, VBD), (on, IN), (May, N...
5    [(The, DT), (temperature, NN), (fell, VBD), (a...
dtype: object
Run Code Online (Sandbox Code Playgroud)

小智 7

我会这样做的方式如下:

使用nltk查找名词后跟一个或两个动词.为了符合您的确切规范,我将使用Wordnet:应该找到的唯一名词(NN,NNP,PRP,NNS)是与"物理"或"材料"和唯一动词有语义关系的名词(应该找到的VB,VBZ,VBD等是与"fall"处于语义关系的那些.

我提到"一个或两个动词",因为动词之前可以有辅助动词.你还可以做的是创建一个依赖树来发现主语 - 动词关系,但在这种情况下似乎没有必要.

您可能还想确保排除位置名称并保留人名(因为您会接受"John已经倒下"但不是"柏林已经倒下").这也可以使用Wordnet完成,位置的标记为"noun.location".

我不确定在哪种情况下你必须转换标签,所以我无法提供正确的答案,在我看来你可能不需要在这种情况下:你使用POS标签来识别名词和动词然后检查每个名词和动词是否属于同义词组.

希望这可以帮助.