我正在尝试开发软件,以根据实体类型获取实体名称的合适属性。
例如,如果我有医生,护士,员工,客户,患者,讲师,捐赠者,用户,开发人员,设计师,司机,乘客和技术人员等实体,他们都会有姓名,性别,出生日期等属性,电子邮件地址,家庭住址和电话号码,因为他们都是人。
大学,学院,医院,酒店和超市等第二个例子可以共享名称,地址和电话号码等属性,因为它们都可以组织起来。
是否有任何自然语言处理工具和软件可以帮助我实现我的目标。 我需要将实体类型识别为人或起源,然后根据实体类型附加合适的属性?
我已经查看了名称实体识别(NER)工具,例如斯坦福名称实体识别器,它可以提取实体,如人员,位置,组织,金钱,时间,日期和百分比但它并没有真正有用。
我可以通过构建我自己的地名词来做到这一点,但我不喜欢这个选项,除非我没有自动完成。
任何帮助,建议和想法将不胜感激。
答案 0 :(得分:0)
如果我理解正确,您主要想知道某个单词是否可以映射到人类,组织等的一般类别。
您应该使用WordNet,它提供了一般英语词典的完整层次结构。在用户界面中尝试一下,以了解它的工作原理。
WordNet编码单词之间的关系。其中一个关系是hypernymy,这是一个奇特的词,意思是一般与特定的关系。
一些例子:
Hyponymy是上位词的反向关系:
这些关系具有传递性,所以在我的上一个例子中,plumber
也是human
的下位词。这为您提供了解决问题的方法:任何将人类视为上位词的词都应映射到人类并具有人物属性。
有些库可以从Java和Python以及许多其他语言访问WordNet。 Here是使用NLTK Python模块使用WordNet的文档。
from nltk.corpus import wordnet as wn
human = wn.synset('person.n.01')
hyponyms_of_human = set(x for x in human.closure(lambda s:s.hyponyms())
fireman = wn.synsets('fireman')
salad = wn.synsets('salad')
print(any(x in hyponyms_of_human for x in fireman)) # outputs True
print(any(x in hyponyms_of_human for x in salad)) # outputs False