我想找到一种在我网站上的用户搜索查询中识别人名、地名等的好方法。例如,如果用户问“乔治华盛顿多大了”,我需要能够从预定义的列表中知道乔治华盛顿是一个人。
有些列表是全局的,有些是用户特定的。例如,如果他们问“约翰史密斯多大了”,我可能只想确定我的同事的特定约翰史密斯——如果他不是我的同事,我不想将他识别为一个人。
是否有任何 NLP 库或这些列表的爬行,我可以利用 Soundx、成熟的 NLP、拼写错误等功能?我可以手写,但我宁愿利用成熟的东西。谢谢。
我想找到一种在我网站上的用户搜索查询中识别人名、地名等的好方法。例如,如果用户问“乔治华盛顿多大了”,我需要能够从预定义的列表中知道乔治华盛顿是一个人。
有些列表是全局的,有些是用户特定的。例如,如果他们问“约翰史密斯多大了”,我可能只想确定我的同事的特定约翰史密斯——如果他不是我的同事,我不想将他识别为一个人。
是否有任何 NLP 库或这些列表的爬行,我可以利用 Soundx、成熟的 NLP、拼写错误等功能?我可以手写,但我宁愿利用成熟的东西。谢谢。
你需要的叫做Named Entity Recognition
斯坦福 NLP 附带的最好的可用软件之一:http: //nlp.stanford.edu/software/CRF-NER.shtml (用 Java 编写)
如果你在另一个平台上,Ruby 和 Python 中有很好的开源项目。搜索“命名实体识别”。
您正在寻找的特定自然语言处理 (NLP) 任务称为Named Entity Recognition
(NER)
除了斯坦福的CRF-NERNatural Language ToolKit
(在 java 中)之外,来自( NLTK )的流行 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')]), ('?', '.')])