如何在文本中定义人名(Java)

时间:2009-12-09 18:14:34

标签: java nlp named-entity-recognition

我有一些输入文字,其中包含一个或多个人名。我没有这些名字的字典。哪个Java库可以帮助我从输入文本中定义名称? 我查看了OpenNLP,但没有找到任何示例或指南,或者至少描述了如何将其应用到我的代码中。 (我看到了javadoc,但这个项目的文档非常糟糕。)

我想从一些随机文本中找到名字。如果输入的文字是“我的朋友乔史密斯去了商店。”,那么我想得到“乔史密斯”。我认为在智能引擎上应该有一些足够大的词典,基于较小的词典,可以理解人名。

10 个答案:

答案 0 :(得分:3)

我会调查LingPipe。查看this demo。顺便说一句,你要做的事情叫做“named entity recognition”。要做到正确,这是一个困难的CS问题。

答案 1 :(得分:3)

OpenNLP具有命名实体识别功能。请查看文档中的English Name Finding部分。但我的经验表明,它识别实体,但没有与之关联的标签。 (准确地说,我发现这些标签含糊不清。)所以,如果你有句子“我的朋友Joe Smith去了沃尔玛商店”,OpenNLP会识别两个命名实体 - “Joe Smith”和“Walmart”。我无法将“Joe Smith”标记为Person,将“Walmart”标记为Organization。

正如Matt所建议的,你可以试试LingPipe,虽然它是一个商业工具。一些开源替代品是MorphAdornerStanford NER

答案 2 :(得分:2)

虽然我们正在等待您正在做的事情的详细信息,但这里有一些常见名字列表的链接,至少在美国人口中是这样的:

我认为您需要这些(和/或更多)进行检查,因为您的任务听起来不像NLP可以为您做的事情而没有参考信息。

答案 3 :(得分:1)

您可以在此处http://code.google.com/p/graph-expression/wiki/Examples

查看自由文字中的人物提取

答案 4 :(得分:1)

OpenNlp在其NER模型中有一个人类型。从opennlp网站下载项目和模型,并从模型网站获取模型(Opennlp页面上有一个链接)。然后转到这里,http://www.asksunny.com/drupal/?q=node/4这是如何加载模型和执行NER的一个很好的例子。 NER永远不会完美,所以不要失望。

答案 5 :(得分:1)

我建议您使用stanford Name Entity Recognizer(NER)。斯坦福大学NER提供了许多分类器.stanford NER提供的一个分类器可以从给定的文本中识别名称,位置和组织。

您可以在此链接中找到stanford NER的在线演示 http://nlp.stanford.edu:8080/ner/

答案 6 :(得分:0)

从语义角度来看,您还可以将OpenCyc和WordNet项目视为更有趣。

答案 7 :(得分:0)

这个问题在自然语言处理中的命名实体识别中得到解决,目前它被认为是一个有点难的问题。但是,您可以使用许多工具。我已经使用了stanford NER,这是一个很好的软件。

答案 8 :(得分:0)

OpenCalais服务可能很有用。在http://www.opencalais.com/documentation/calais-submission-tool

尝试他们的提交工具

此工具不仅可识别人名。

答案 9 :(得分:0)

试用Stanford NER,一个文本处理库

<强> http://nlp.stanford.edu:8080/ner/