识别字符串中的名称

时间:2013-01-29 17:27:05

标签: search annotations nlp chunking

我想找到一种在我网站上的用户搜索查询中识别人物,地点等名称的好方法。例如,如果用户询问“乔治华盛顿多大年纪”,我需要能够从预定义列表中了解乔治华盛顿是一个人。

有些列表是全局的,有些列表是用户特定的。例如,如果他们问“约翰史密斯多大年纪”,我可能只想确定我的同事特定的约翰史密斯 - 如果他不是我的同事,我也不想将他确定为一个人。

是否有任何NLP库或爬行这些列表我可以利用Soundx,成熟的NLP,拼写错误等功能?我可以手工编写,但我宁愿利用成熟的东西。谢谢。

2 个答案:

答案 0 :(得分:3)

您需要的是Named Entity Recognition

最好的软件之一是Stanford NLP: http://nlp.stanford.edu/software/CRF-NER.shtml (用Java编写)

如果你在另一个平台上,那么Ruby和Python中有很好的开源项目。搜索“命名实体识别”。

答案 1 :(得分:2)

您正在寻找的特定自然语言处理(NLP)任务称为Named Entity Recognition(NER)

除了斯坦福大学的CRF-NER(在java中),Natural Language ToolKitNLTK)中流行的python选项通常被用作NER任务的基线。

您可以尝试安装NLTK,然后执行以下代码:

>>> from nltk.tokenize import word_tokenize
>>> from nltk.tag import pos_tag
>>> from nltk.chunk import ne_chunk
>>> sentence = "How old is John Smith?"
>>> ne_chunk(pos_tag(word_tokenize(sentence)))
Tree('S', [('How', 'WRB'), ('old', 'JJ'), ('is', 'VBZ'), Tree('PERSON', [('John', 'NNP'), ('Smith', 'NNP')]), ('?', '.')])