2012-04-16 60 views
0

命令我们正在设计一个可以在这个格式处理不准确的自然语言字符串

command context 

上下文是从约200元组的话,如列表中定义的接受命令的系统:

physical therapy 
cardiac 
physician visit 
hospital inpatient 
hospital outpatient 
etc. 

我们希望系统能够纠正用户错误,如拼写错误,但也要理解“物理治疗”与“物理治疗师”相同,并且还要接受同义词

最后,如果它不完全匹配,应该要求用户的最佳匹配

这是我在想这样做的之间的歧义:

  1. 干上下文的单词和传入查询都
  2. 删除/从查询
  3. 检查隔离命令串并纠正任何字谜(不过:这只占地面积拼写错误一类)
  4. 寻找一个确切的词匹配
  5. 查找

这并不觉得自己是一个巧妙的解决办法“接近的比赛”,特别是步骤3和5

什么是更好/更简单的方法来做到这一点?任何图书馆都可以在C#中做到这一点,奖金。

Lucene可以这样做吗?任何指导赞赏。

谢谢!

回答

1

对于您的目的而言这可能太不精确,但Soundex是一种常用算法,用于判断两个单词“听起来相似”。

+0

是的。 Soundex或Metaphone。 http://en.wikipedia.org/wiki/Metaphone – 2012-04-17 04:38:46

0

我认为Lucene最好只适用于步骤4和5,因为Lucene目前只支持“glob”意义上的近似匹配(通配符 - “?”用于匹配单个字符,“*”用于匹配多个字符)。

有一整套有关近似匹配的文献 - 我将从agrep工作开始,并从那里开始(但部分原因是因为我熟悉agrep)。