我有很多文本(数百万),从 100 到 4000 字不等。这些文本被格式化为书面作品,带有标点符号和语法。一切都是英文的。
问题很简单:如何从给定文本中提取每个 WikiData 实体?
实体被定义为每个名词,专有名词或常规名词。即人名、组织名、地点名和椅子、土豆等事物的名称。
到目前为止,我已经尝试了以下方法:
- 使用OpenNLP对文本进行标记,并使用预先训练的模型来提取人员、位置、组织和常规名词。
- 在适用的情况下应用Porter Stemming。
- 将所有提取的名词与wmflabs-API匹配以检索潜在的 WikiData ID。
这行得通,但我觉得我可以做得更好。一个明显的改进是在本地缓存 WikiData 的相关部分,我打算这样做。但是,在我这样做之前,我想检查是否有其他解决方案。
建议?
我标记了问题 Scala,因为我正在使用Spark来完成这项任务。