如何以编程方式处理英语收缩[正则表达式,JS,Ruby]

时间:2017-04-09 01:19:17

标签: javascript ruby-on-rails ruby regex algorithm

我正在捕获自然语言用户输入,我需要根据预定义的"正确的"进行检查。版。这是微不足道的,但我不确定如何处理英语中收缩的变化。

假设我期待句子I'm positive you don't know what you're doing.匹配需要准确,但我不想将用户锁定在一个变体中,因为这会让人感到沮丧。

那么,我应该手动输入该句子的每个可能的变体作为有效匹配吗?像这样:

"I'm positive you don't know what you're doing."
"I am positive you don't know what you're doing."
"I am positive you do not know what you're doing."
"I am positive you do not know what you are doing."
"I'm positive you don't know what you are doing."
...

等等。想想更复杂的句子,你可以看到它有多疯狂。

或者,有没有一种程序化的方法可以解决这个问题?使用Regex,JS,Ruby或Rails(我使用的工具)?

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:6)

不可能有那么多English contractions。我会将每个变体存储为指向相同值的键,例如(伪Ruby-esque但当然可以用JS完成)

"aren't"  => :arent
"are not" => :arent 
etc.

然后使用共享值存储正确的句子。

":im positive you :dont know what :youre doing"

当您收到输入时,将匹配的密钥替换为其存储的值,然后检查转换的句子与正确的密码,并与特别标记的收缩一起存储。

(注意:对于少数情况,您可能希望单独回答具有相同收缩的不同短语,请做出特殊规定。)