小编Nig*_*son的帖子

Tokeniser和javascript中的匹配器

我开始想要编写一个非常简单的自然语言解析器和匹配模式.我想在JavaScript中这样做.我差不多20年前在人工智能方面获得了学位,我记得prolog,lisp,eliza,recursion,Noun和Verb Phrases ...有点新鲜,我会很好.

几天后,我意识到了两件事.

  • 我并没有真正追求NLP,只是句子标记
  • 这比我想象的要困难得多.

我已经在interweb上找到了一些资源,一些用于节点,一些用于python等,但是它们似乎与我所追求的相反,例如它们模板化并填充空白,或者生成模型然后查询它用自然语言.

我希望能够检查用户输入的内容,看它是否与特定模式匹配并提取相关位.例如,这是一个简单的匹配树:

var match = [ "&&",
                ["||", "my", "the" ],
                "%%item", 
                [ "||",
                    [ "&&", "isnt", "%%what" ], 
                    [ "&&", "is"
                        [ "||", 
                            "broken?",
                            ["&&", "not", "%%what"]
                        ]
                    ], 
                    [ "&&",
                        [ "||",  
                            "doesnt", 
                            [ "&&", "does", "not" ] 
                        ], 
                        "%%what" 
                    ] 
                ] 
            ];
Run Code Online (Sandbox Code Playgroud)

所以我希望这匹配用户输入的内容,如:

  • 我的电脑不工作
  • 我的键盘不起作用
  • 闩锁坏了
  • 打印机没有打印

并返回我想从上面提取的关键短语数组:

  • [{"item":"computer","what":"work"}]
  • [{"item":"keyboard","what":"working"}]
  • [{"item":"latch"}]
  • [{"item":"printer","what":"printing"}]

所以我考虑了树遍历,但后来陷入了javascript以及如何做到这一点.简单但却最unelegant的方法就是要产生从比赛每一个可能的字符串,并比较投入,这也可以让我的陷阱items一样mobile phone.

所以对我的问题:

有没有人知道我做的事情有什么好的资源,或者可以帮助进行递归和树遍历

编辑

原来它是类固醇的反向波兰表示计算器.我做了很多繁重的工作,只要一个令牌只匹配一个单词,这个就能很好地工作,但现在我又被卡住了.

http://jsfiddle.net/54jCq/

通过引用传递似乎递归是非常辛苦的工作.我现在需要扩展令牌部分以使用多个单词令牌,这样我就可以使用与上面相同的表示法来获取my [mobile phone] is not [ringing]

我原本以为我可以从树中弹出令牌分支,然后再将单词列表再次传递给自己,新树包含RPN函数和树的其余部分(弹出令牌)直到匹配(其中) …

javascript regex parsing text-parsing sentence

6
推荐指数
0
解决办法
183
查看次数

jquery mobile - 移动设备上的 keyup keydown

我需要一个输入 (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)

javascript android onkeyup jquery-mobile

5
推荐指数
1
解决办法
2万
查看次数