我有很多文本(数百万),字数从 100 到 4000 不等。这些文本被格式化为书面作品,带有标点符号和语法。一切都是英文的。
问题很简单:如何从给定文本中提取每个 WikiData 实体?
实体被定义为每个名词,无论是专有名词还是常规名词。即人名、组织名称、地点名称以及椅子、土 bean 等事物的名称。
到目前为止,我已尝试以下操作:
- 使用 OpenNLP 对文本进行标记,并使用pre-trained models提取人物、地点、组织和常规名词。
- 申请Porter Stemming在适用的情况下。
- 将所有提取的名词与 wmflabs-API 相匹配检索潜在的 WikiData ID。
这有效,但我觉得我可以做得更好。一个明显的改进是在本地缓存 WikiData 的相关部分,我计划这样做。不过,在这样做之前,我想检查一下是否还有其他解决方案。
建议?
我标记了问题 Scala 因为我正在使用 Spark来完成任务。
最佳答案
一些建议:
- 考虑将斯坦福 NER 与 OpenNLP 进行比较,看看它在您的语料库上的比较情况
- 我想知道大多数实体名称的词干提取的值(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
关于scala - 从文本中高效提取 WikiData 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189825/