处理具有不准确的自然语言字符串的命令

时间:2012-04-16 23:50:24

标签: c# .net nlp

我们正在设计一个可以接受此格式命令的系统

command context

上下文是从大约200个元组的列表中定义的,例如:

physical therapy
cardiac
physician visit
hospital inpatient
hospital outpatient
etc.

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

最后,如果它不是完全匹配,它应该要求用户消除最佳匹配之间的歧义

我正在考虑这样做:

  1. 干扰上下文单词和传入查询
  2. 从查询中删除/隔离命令字符串
  3. 检查并更正任何字谜(但是:这只涵盖了一类拼写错误)
  4. 寻找确切的单词匹配
  5. 寻找“近距离比赛”
  6. 这不是一个简洁的解决方案,尤其是第3步和第5步。

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

    Lucene可能会这样做吗?任何指导意见。

    谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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