我开始想要编写一个非常简单的自然语言解析器和匹配模式.我想在JavaScript中这样做.我差不多20年前在人工智能方面获得了学位,我记得prolog,lisp,eliza,recursion,Noun和Verb Phrases ...有点新鲜,我会很好.
几天后,我意识到了两件事.
我已经在interweb上找到了一些资源,一些用于节点,一些用于python等,但是它们似乎与我所追求的相反,例如它们模板化并填充空白,或者生成模型然后查询它用自然语言.
我希望能够检查用户输入的内容,看它是否与特定模式匹配并提取相关位.例如,这是一个简单的匹配树:
var match = [ "&&",
["||", "my", "the" ],
"%%item",
[ "||",
[ "&&", "isnt", "%%what" ],
[ "&&", "is"
[ "||",
"broken?",
["&&", "not", "%%what"]
]
],
[ "&&",
[ "||",
"doesnt",
[ "&&", "does", "not" ]
],
"%%what"
]
]
];
Run Code Online (Sandbox Code Playgroud)
所以我希望这匹配用户输入的内容,如:
并返回我想从上面提取的关键短语数组:
所以我考虑了树遍历,但后来陷入了javascript以及如何做到这一点.简单但却最unelegant的方法就是要产生从比赛每一个可能的字符串,并比较投入,这也可以让我的陷阱items
一样mobile phone
.
所以对我的问题:
有没有人知道我做的事情有什么好的资源,或者可以帮助进行递归和树遍历
原来它是类固醇的反向波兰表示计算器.我做了很多繁重的工作,只要一个令牌只匹配一个单词,这个就能很好地工作,但现在我又被卡住了.
通过引用传递似乎递归是非常辛苦的工作.我现在需要扩展令牌部分以使用多个单词令牌,这样我就可以使用与上面相同的表示法来获取my [mobile phone] is not [ringing]
我原本以为我可以从树中弹出令牌分支,然后再将单词列表再次传递给自己,新树包含RPN函数和树的其余部分(弹出令牌)直到匹配(其中) …
我需要一个输入 (type='text') 将结果发送到我的服务器以检查用户输入的内容的可用性。
我使用委托将事件处理程序添加到元素:
$(document).delegate('#signup', 'pageshow', function() {
var keydown = function(e) {
e = e || window.event;
var char = e.which || e.keyCode;
if (char == 8) {
$(".pagemessage").text("Pressed: '<BACKSPACE>'");
appcheckDomainOnKeyDown();
}
return true;
};
var keyup = function(e) {
e = e || window.event;
var char = e.which || e.keyCode;
if (char == 8) {
appcheckDomainOnKeyUp();
}
return true;
};
var keypress = function(e) {
e = e || window.event;
var char = e.which || e.keyCode;
var str …
Run Code Online (Sandbox Code Playgroud)