我正在尝试构建一个系统,该系统根据书面的人工输入文本识别各种命令和输入。我将从一个例子开始,让事情更清洁。假设用户输入以下文本:
我的名称是 John Doe ,年龄 28 岁,我的地址是 巴克利街没有。 7哈瓦那。 我喜欢 草莓和香草巧克力蛋糕。
基于一组预定义标记(例如"名称为","年龄为","地址为","我喜欢" ;),我想检测他们相应的值(例如" John Doe"," 28"," Barkley Street ... Havana&# 34;,"巧克力蛋糕......香草")。
我目前的尝试是通过一些正则表达式模式来解决这个问题:对于每个标记,我构建了一个正则表达式沿着&#34行的内容;如果找到标记X,则取出它与任何X之间的所有文本,您可以找到Y,Z标记"。这是在标记之间提取文本,但是基于正则表达式构建所有内容将非常麻烦,特别是如果我开始考虑弯曲和小变化。
我对NLP没有多少经验,所以我不确定应该从哪里开始寻找合适的解决方案。有哪些适当的方法/解决方案/库可以解决这个问题?
答案 0 :(得分:0)
您实际上要做的是“信息提取”,特别是命名实体识别(NER)来检测感兴趣的提及。有关概述,请参阅:
https://en.wikipedia.org/wiki/Information_extraction
要真正开始用接近最先进水平的东西来解决你的问题,我建议你查看斯坦福NLP工具包(http://nlp.stanford.edu/software/),了解你的基本NLP任务(标记化,POS标记),但他们的NER工具包赢了“ t带您了解具体要求。您可以尝试使用他们的SPIED来帮助您,但我没有使用它并且无法保证它。最终,如果你认真对待这个任务(从表面看起来相当困难),你将不得不为你想要提取的所有实体编写自己的NER系统。您可能希望将一些正则表达式作为机器学习功能来帮助您完成任务(从一个简单的ML库开始,比如LibSVM或Mallet),但不管它是否会做很多工作。
祝你好运!答案 1 :(得分:0)
如果要求是识别命名的实体,例如人,地点,组织,则可以使用Python中的StanfordNER库。此外,还有在Python中使用CRF算法训练自己的自定义实体识别模型的解决方案。 Here是一篇说明相同内容的文章。