nlp-如何检测句子中的单词是否指向颜色/身体部位/车辆

nlp-如何检测句子中的单词是否指向颜色/身体部位/车辆,nlp,stanford-nlp,wordnet,lexical-analysis,named-entity-recognition,Nlp,Stanford Nlp,Wordnet,Lexical Analysis,Named Entity Recognition,因此,正如标题所示,我想知道句子中的某个单词是否指向 1] 颜色 The grass is green. 因此“绿色”是颜色 2] 身体的一部分 Her hands are soft 因此,“手”是身体的一部分 Her hands are soft 3] 车辆 I am driving my car on the causeway 因此,“汽车”是一种交通工具 在类似的问题中,解析器是可能的有效解决方案之一。 例如,有人向斯坦福解析器提出了一个类似的问题 现在的问题是stanford

因此,正如标题所示,我想知道句子中的某个单词是否指向

1] 颜色

The grass is green.
因此“绿色”是颜色

2] 身体的一部分

Her hands are soft
因此,“手”是身体的一部分

Her hands are soft
3] 车辆

I am driving my car on the causeway
因此,“汽车”是一种交通工具

在类似的问题中,解析器是可能的有效解决方案之一。 例如,有人向斯坦福解析器提出了一个类似的问题

现在的问题是stanford parser可用于检测:

LOCATION
ORGANIZATION
DATE
MONEY
PERSON
PERCENT
TIME
但是,如果您想尝试检测其他内容,word net可能是类似问题中提到的一个选项

其中一个答案建议使用wordnet并利用上下位词/上下位词的关系。答案还提到了wordnet的noon.animal文件

下面的链接显示了wordnet中所有其他文件的列表

我的方法是我可以利用

1]

2]

3]

那么这是一种有效的方法吗

我该如何使用wordnet(上下位词/上下位词)

注:我计划使用:JWI(麻省理工学院Java Wordnet接口)

参考上下义/上义方法,这将涉及探索Wordnet树及其单词之间的关系

一个单词(更准确地说是一个语法集)的下义词表示性质上更为特殊的概念,而上义词表示性质上更为一般的概念。与Wordnet的树状结构类似,您可以将下义词视为所查看单词(节点)的子词,而上义词是该单词的父词

例如,以单词dog的上下位词和上下位词为例:

产生以下结果:

[Synset('canine.n.02'), Synset('domestic_animal.n.01')]

[Synset('basenji.n.01'), Synset('corgi.n.01'), Synset('cur.n.01'), 
Synset('dalmatian.n.02'), Synset('great_pyrenees.n.01'), S 
Synset('griffon.n.02'), Synset('hunting_dog.n.01'), Synset('lapdog.n.01'), 
Synset('leonberg.n.01'), Synset('mexican_hairless.n.01'), 
Synset('newfoundland.n.01'), Synset('pooch.n.01'), Synset('poodle.n.01'), 
Synset('pug.n.01'), Synset('puppy.n.01'), Synset('spitz.n.01'), 
Synset('toy_dog.n.01'), Synset('working_dog.n.01')]
以类似的方式,例如,如果我们想知道哪些词代表颜色,我们可以探索代表颜色的不同词的超词,希望它们有一个共同的祖先(超词)。在这个意义上,我做了以下实验:

print(wn.synsets('green')[0].hypernyms())
print(wn.synsets('blue')[0].hypernyms())
print(wn.synsets('red')[0].hypernyms())
print(wn.synsets('yellow')[0].hypernyms())
所有名称共享同一个缩略词列表:

[Synset('chromatic_color.n.01')]

结果

[Synset('achromatic_color.n.01')]
我们可以做的下一件事是打印这些生成语法集的所有下位词:

print(wn.synset('chromatic_color.n.01').hyponyms())
print(wn.synset('chromatic_color.n.01').hyponyms())
结果是什么

[Synset('blond.n.02'), Synset('blue.n.01'), Synset('brown.n.01'), 
Synset('complementary_color.n.01'), Synset('green.n.01'), 
Synset('olive.n.05'), Synset('orange.n.02'), Synset('pastel.n.01'), 
Synset('pink.n.01'), Synset('purple.n.01'), Synset('red.n.01'), 
Synset('salmon.n.04'), Synset('yellow.n.01')]

[Synset('black.n.01'), Synset('gray.n.01'), Synset('white.n.02')]
同样的技术也可用于探索与车身部件或车辆相关的选项

此外,对于诸如reddish之类的派生词,我知道有两种方法可以绕过它们的缺失:

  • 词干分析通过波特词干分析器对标记化文本进行词干分析(请参阅)
  • 使用Morphy获取基本表单,让您在Wordnet中查找生成的单词(有关Morphy的详细信息,请参阅)。我建议使用这种方法,因为词干分析可能会产生Wordnet中不存在的单词

您应该使用“命名实体识别(NER)”关键字查找更多信息。对于颜色,您应该手动创建自己的词典(或在Internet上查找词典)。没有那么多的颜色,它会更可靠。@clemtoy,如果wordnet不能添加,NER会添加什么?@clemtoy,你会推荐什么作为所有颜色列表的来源?NER不是一个工具,它是你的问题的名称。我只想指出你的问题被称为“内尔问题”,所以你应该找到更多的信息。你可以制作一个颜色词典。(很抱歉,我无法在我的评论中标记您的姓名,因为它失败了)
print(wn.synsets('black')[0].hypernyms())
print(wn.synsets('gray')[0].hypernyms())
[Synset('achromatic_color.n.01')]
print(wn.synset('chromatic_color.n.01').hyponyms())
print(wn.synset('chromatic_color.n.01').hyponyms())
[Synset('blond.n.02'), Synset('blue.n.01'), Synset('brown.n.01'), 
Synset('complementary_color.n.01'), Synset('green.n.01'), 
Synset('olive.n.05'), Synset('orange.n.02'), Synset('pastel.n.01'), 
Synset('pink.n.01'), Synset('purple.n.01'), Synset('red.n.01'), 
Synset('salmon.n.04'), Synset('yellow.n.01')]

[Synset('black.n.01'), Synset('gray.n.01'), Synset('white.n.02')]