scala - 从文本中高效提取 WikiData 实体

标签 scala machine-learning information-retrieval wikidata wikidata-api

我有很多文本(数百万),字数从 100 到 4000 不等。这些文本被格式化为书面作品,带有标点符号和语法。一切都是英文的。

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

实体被定义为每个名词,无论是专有名词还是常规名词。即人名、组织名称、地点名称以及椅子土 bean 等事物的名称。

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

  1. 使用 OpenNLP 对文本进行标记,并使用pre-trained models提取人物地点组织和常规名词
  2. 申请Porter Stemming在适用的情况下。
  3. 将所有提取的名词与 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/

相关文章:

scala - 将 scalaz-stream 进程拆分为两个子流

java - Scala:相当于 np.digitize 对数据进行分桶

arrays - ScalaTestFailureLocation 预期的 StructField(value1,ArrayType(StringType,true),false) 实际的 StructField(val2,ArrayType(StringType,true),true)

java - 使用 Scala 或 Java 进行 Base 64 编码

machine-learning - 损失函数和深度学习

python - XGboost - 网格搜索无法正常工作

python - 计算点击数据的精确度和召回率

python - 使用 t-SNE 和/或 PCA 时的 Gensim Doc2Vec 可视化问题

java - 如何计算集合/索引中的所有 token 计数

elasticsearch - 常量分数查询 elasticsearch boosting