【问题标题】:Could I define entity type automatically?我可以自动定义实体类型吗?
【发布时间】:2016-01-12 08:29:28
【问题描述】:

我正在尝试开发软件以根据实体类型为实体名称获取合适的属性。

例如,如果我有医生、护士、员工、客户、患者、讲师、捐赠者、用户、开发人员、设计师、司机、乘客和技术人员等实体,它们都将具有姓名、性别、出生日期等属性、电子邮件地址、家庭住址和电话号码,因为他们都是人。

大学、学院、医院、酒店和超市等第二个示例词可以共享姓名、地址和电话号码等属性,因为它们都可以是组织。

是否有任何自然语言处理工具和软件可以帮助我实现目标。 我需要将实体类型标识为人员或来源,然后根据实体类型附加合适的属性?

我查看了名称实体识别 (NER) 工具,例如斯坦福名称实体识别器,它可以提取实体,例如人员、位置、组织、金钱、时间、日期和百分比,但它并没有真正有用。

我可以通过建立自己的地名词典来做到这一点,但是我不喜欢使用这个选项,除非我没有自动做到这一点。

我们将不胜感激任何帮助、建议和想法。

【问题讨论】:

    标签: nlp stanford-nlp information-retrieval text-analysis information-extraction


    【解决方案1】:

    如果我理解正确,您主要想知道一个给定的词是否可以映射到人类、组织等的一般类别。

    您应该使用WordNet,它提供了通用英语词典的完整层次结构。在用户界面中试一试,感受一下它的工作原理。

    WordNet 对单词之间的关系进行编码。其中一个关系是hypernymy,这是一个花哨的词,意思是一般到特殊的关系。

    一些例子:

    • Vehicle 是boat 的上位词。
    • 车辆是汽车的超模。
    • Human 是worker 的上位词,worker 是水管工的上位词。

    下位词是上位词的逆关系:

    • Boat 是 Vehicle 的下义词。
    • Car 是车辆的下义词。
    • Plumber 是worker 的下位词,本身就是human 的下位词。

    这些关系是传递的,所以在我的最后一个例子中,plumber 也是human 的下义词。这为您提供了问题的解决方案:任何以 human 作为上位词的单词都应该映射到 Human 并具有 people 属性。

    有一些库可以从 JavaPython 以及许多其他语言访问 WordNet。 Here 是使用 WordNet 和 NLTK Python 模块的文档。

    判断单词是否为“human”的下义词的简短示例

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多