我有一个字符串列表(在本例中是公司名称),还有一个Java程序可以从大多数非结构化文本中提取出看起来像公司名称的内容列表。我需要将提取文本的每个元素与列表中的一个字符串进行匹配。注意:非结构化的文本有打字错误,比如"Blah,Inc.“我尝试过Levenshtein编辑距离,但由于可预见的原因,它失败了。是否有已知的最佳实践方法来解决此问题?或者我又回到了手工数据输入?
发布于 2010-06-09 23:36:32
这不是一个简单的问题,整个公司都在努力解决这个问题(即使是像公司名称这样的简化匹配集与一般情况相比也是如此)。
如果您可以确定有效公司名称落入的离散数量的模式,并且噪声没有落入其中,那么您可以通过一系列正则表达式匹配来解决此问题。
如果模式很难或太多,那么您可以尝试开发一个概率模型,也许类似于贝叶斯网络。您可以将数据的一个子集用于训练,也许将第二个子集用于快速验证,并扩大网络。技术可能包括遗传编程或建立神经网络。这种方法显然不是轻量级的,您可能希望在走这条路之前仔细考虑您的需求。
发布于 2011-10-19 16:15:26
你可能想看看Apache Stanbol,它将NER引擎(我认为其中一个基于你提供的地名词典)和链接引擎结合在一起,以解析检测到的实体。我自己还没有用过它,它还在孵化中,但可能适合你正在寻找的东西。
在TAC知识库人口跟踪(实体链接)中也有一些关于这一领域的研究。这个任务在不同的地方弹出,你也应该在ACL,EMNLP,SIGIR等会议上幸运地出现(这个列表绝不是完整的)。
TAC系统链接到维基百科的一个子集,这可能有助于您的名称变化,因为页面具有“重定向”,这本质上是特定页面的别名。
例如,下面的页面重定向到"Apple Inc.",但您可能希望从原始的维基百科转储或从DBPedia或Freebase等干净的来源提取重定向。
Computer Co.
<代码>H131苹果inc.
发布于 2010-06-10 00:13:58
在我们公司的工作中,我们一直都在处理这类问题。我所见过的最成功的工作只使用了几页Python代码。Python非常适合字符串解析和分析,您可以从Java程序中调用Python例程。就像Greg说的,正确的答案高度依赖于你的非结构化文本的质量。一个好的开始方法是量化地描述它如何与你的黄金文本保持一致。(例如,您可能会发现,只需添加一些常见的备用匹配字符串,如"Blah“和"BLAH INC”,而不仅仅是"Blah Inc“),就可以匹配其中的80%。)
https://stackoverflow.com/questions/3007186
复制相似问题