使用Java命名实体识别

时间:2011-04-06 18:57:44

标签: java tags nlp semantics

我想使用命名实体识别(NER)为数据库中的文本找到足够的标签。我没有使用像NLTK或Lingpipe这样的工具,而是想建立自己的工具。

所以我的问题是:

  • 我应该使用哪种算法?

  • 构建此工具有多难?

5 个答案:

答案 0 :(得分:5)

前一段时间我研究马尔可夫链时,我做到了这一点。

无论如何,答案是:

  

我应该使用哪种算法?

例如,斯坦福NLP使用条件随机场(CRF)。如果你不是想有效地做这件事,你就像Jackass 3d那样的人pissing in the wind。解析人类语言没有简单的方法,因为它的构造很复杂,并且有很多例外。

  

构建此工具有多难?

如果你知道自己在做什么,那就不那么难了。输入规则和逻辑的过程可能是烦人且耗时的,并且修复错误可能是非常重要的。但是在20年后,你可以做出一些对自己有用的东西。

答案 1 :(得分:3)

  1. 有很多信息提取算法,仅举几例:正则表达式,静态方法,基于机器学习,字典等。您可以在this survey中找到有关方法的完整概述。
  2. 是的,很难建立一个工具,它可以找到高精度的标签,因为它需要大量的测试和调整。
  3. - 最容易实现 - 用于查找标签的算法将包含两个步骤:

    • 提取标签候选者
    • 查找最重要的标签 - 大部分时间。

    在第一步中,您可以选择以下两种方法之一:

    • 使用实体名称作为候选标记(此处需要使用信息提取框架)
    • 使用名词或名词组作为候选标签(此处需要使用词性标注器)

    在第二步中,您应该使用tf-idf对文档语料库中的标签进行加权,并丢弃tf-idf权重低于给定垃圾箱的所有标签

    如果您需要更强大的算法,请查找主题检测框架或research papers on this topic。在维基百科之后检查LSA

      

    潜在语义分析(LSA)是自然语言处理中的一种技术,特别是在矢量语义中,通过生成一组与文档和术语相关的概念来分析一组文档与它们包含的术语之间的关系。 / p>

答案 2 :(得分:2)

NLTK是一个开源项目。您可能想稍微探索一下 - 看看它是如何完成的,可能参与社区,而不是试图从头开始自己完全解决问题...

答案 3 :(得分:0)

寻找本文的副本:

  

使用Word群集进行名称标记   判别培训

     斯科特米勒,   Jethran Guinness,Alex Zamanian

答案 4 :(得分:0)

对于您的问题,这可能不是一个令人满意的答案,您仍然可以:您可能希望评估该任务的现有服务提供商,并包括他们的产品或通过Web服务集成一个。

我的经验是,对于某些明确定义且非常特定于域的任务(例如:识别维基百科网页中的药物名称),您可以手动构建NER解决方案。 LingPipeOpenNLP等等是很好的工具。

但是对于通用任务(例如:在互联网上的任何网页中查找人名),您需要大量的经验,工具和人力才能获得满意的结果。因此,使用外部提供商可能更有效。例如,OpenCalais是免费服务;许多商业存在。