我有很多文本(百万),范围从100到4000个字。文本采用标点符号和语法格式设置为书面作品。一切都是英文的。

问题很简单:如何从给定的文本中提取每个WikiData实体?

实体定义为每个名词,适当的或规则的。即人员,组织,地点和椅子,土 bean 等事物的名称。

到目前为止,我已经尝试了以下操作:

  • 使用OpenNLP标记文本,并使用pre-trained models提取人员,位置,组织和常规名词。
  • 在适用的情况下应用Porter Stemming
  • 将所有提取的名词与wmflabs-API匹配,以检索潜在的WikiData ID。

  • 这行得通,但我觉得我可以做得更好。一个明显的改进将是在本地缓存WikiData的相关部分,我计划这样做。但是,在执行此操作之前,我想检查是否还有其他解决方案。

    有什么建议吗?

    我标记了Scala问题,因为我正在使用Spark来完成任务。

    最佳答案

    一些建议:

  • 与OpenNLP相比考虑斯坦福大学NER来查看它与您的语料库的比较
  • 我想知道大多数实体名称词干的值(value)
  • 我怀疑您可能通过将任务分为多个离散阶段来丢失信息
  • 尽管Wikidata是新的,但任务不是,所以您可以查看Freebase | DBpedia | Wikipedia实体识别|歧义
  • 的论文

    特别是,DBpedia Spotlight是专门为完成此任务而设计的一个系统。

    http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/38389.pdf
    http://ceur-ws.org/Vol-1057/Nebhi_LD4IE2013.pdf

    10-08 15:14