Java中命名实体的消歧

Java中命名实体的消歧,java,named-entity-recognition,Java,Named Entity Recognition,我有一个字符串列表(在本例中是公司名称)和一个Java程序,它从大部分非结构化文本中提取一个类似公司名称的列表。我需要将提取文本的每个元素与列表中的字符串相匹配。警告:非结构化文本有拼写错误,比如“Blah,Inc.”被称为“Blah”,等等。我已经尝试了Levenshtein编辑距离,但由于可预测的原因失败了。是否有解决此问题的已知最佳实践方法?还是我又回到了手工数据输入的状态?这不是一个简单的问题,整个公司都在努力解决这个问题(即使是减少匹配集,如公司名称,而不是一般情况) 如果您可以识别有

我有一个字符串列表(在本例中是公司名称)和一个Java程序,它从大部分非结构化文本中提取一个类似公司名称的列表。我需要将提取文本的每个元素与列表中的字符串相匹配。警告:非结构化文本有拼写错误,比如“Blah,Inc.”被称为“Blah”,等等。我已经尝试了Levenshtein编辑距离,但由于可预测的原因失败了。是否有解决此问题的已知最佳实践方法?还是我又回到了手工数据输入的状态?

这不是一个简单的问题,整个公司都在努力解决这个问题(即使是减少匹配集,如公司名称,而不是一般情况)

如果您可以识别有效公司名称所属的离散数量的模式,而噪声不属于这些模式,那么您可以通过一系列正则表达式匹配来解决这一问题


如果模式很难或太多,那么您可以尝试开发一个概率模型,可能类似于贝叶斯网络。您可以将数据的一个子集用于培训,或者将第二个子集用于快速验证,从而扩大网络。技术可能包括遗传编程或建立神经网络。这种方法显然不是轻量级的,你可能想在走这条路之前仔细考虑你的需要。

< P>在我们公司的工作中,我们一直在处理这类问题。我见过的最成功的工作只使用了几页Python代码。Python非常适合于字符串剖析和分析,您可以从Java程序中调用Python例程。正如格雷格所说,正确的答案在很大程度上取决于非结构化文本的质量。一个好的开始方法是定量地描述它是如何与您的黄金文本对齐的。(例如,您可能会发现,您只需添加一些常见的备用匹配字符串,如“Blah”和“Blah INC”,而不是“Blah INC.”),就可以匹配80%。

您可能想看看,它将NER引擎(我认为其中一个是基于您提供的地名录)和链接引擎连接起来,以解析检测到的实体。我自己还没用过,它还在孵化中,但可能适合你的需要

在TAC知识库人口轨道(实体链接)中,也有一些这方面的研究。任务会在不同的地方弹出,你也应该在诸如ACL、EMNLP、SIGIR等会议上有运气(这个列表绝对不完整)

TAC系统链接到Wikipedia的一个子集,这可能有助于你的名字变化,因为网页有“重定向”,本质上是特定网页的别名

例如,以下页面重定向到“Apple Inc.”,但您可能希望从原始维基百科转储或干净的源代码(如或Freebase)中提取重定向

  • AAPL
  • 苹果公司
  • 苹果电脑
  • 苹果电脑公司
  • 苹果电脑公司
  • 苹果电脑公司
  • 苹果电脑公司
  • 苹果电脑公司
  • 苹果公司
  • 苹果公司
  • 苹果公司
  • 苹果计算机
  • 苹果电脑公司
  • 苹果公司
  • 苹果公司