2010-06-09 44 views
3

我有一个字符串列表(本例中为公司名称),以及一个Java程序,它从大多数非结构化文本中提取公司名称的公司名称列表。我需要将提取文本的每个元素与列表中的字符串进行匹配。警告:非结构化文本有错别字,例如“Blah,Inc.”简称为“Blah”等。我尝试了Levenshtein编辑距离,但由于可预见的原因而失败。是否存在解决这个问题的最佳实践方法?或者我回到手动数据输入?用Java解读命名实体

回答

3

这不是一个简单的问题,并且有整个公司都围绕着解决它(即使是像公司名称和一般情况那样减少匹配集合)。

如果您可以识别有效公司名称落入的离散数量模式,并且噪音不会落入,那么您可以通过一系列正则表达式匹配来解决此问题。

如果模式困难或者过多,那么你可以尝试开发一个概率模型,或许就像贝叶斯网络。您需要将数据的一部分用于培训,也许需要第二个子集才能进行快速验证,并扩展网络。技术可能包括遗传编程或建立神经网络。这种方法显然不是轻量级的,在走这条路之前,你可能需要仔细考虑你的需求。

2

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

4

您可能想看看Apache Stanbol,它将NER引擎(我认为其中一个基于您提供的地名词典)和链接引擎来解析您检测到的实体。我自己并没有使用它,它仍在孵化,但可能适合你要找的东西。

TAC Knowledge Base Population track(实体链接)中的这个空间中也有一些研究。任务在不同的地方弹出,你也应该在ACL,EMNLP,SIGIR等会议中运气(这个列表并不完整)。

TAC系统链接到维基百科的一个子集,这可能有助于改变你的名称,因为页面具有“重定向”,它们本质上是特定页面的别名。

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

  • AAPL
  • 苹果公司
  • 苹果电脑
  • 苹果电脑公司
  • 苹果电脑公司
  • 苹果电脑股份有限公司
  • 苹果电脑公司
  • 苹果电脑,公司
  • 苹果公司
  • 苹果一体化
  • 苹果股份有限公司
  • 苹果compputer
  • 苹果电脑公司
  • 苹果公司
  • 苹果公司。
  • ...