Javascript 基于数据生成regExp

Javascript 基于数据生成regExp,javascript,regex,dictionary,Javascript,Regex,Dictionary,我正在制作一个能够识别人类语言计划的应用程序,比如“每两周在下午6点前检查一次车”或“运行2小时” 它可以以任何正确的形式书写,既可以是数字也可以是文字(6可以是6或“6”) 我编了一些字典和一些规则 字典和规则的一部分: plan.rules = { language : "EN", dictionary : { numbers : { ones : [ ["zero"],

我正在制作一个能够识别人类语言计划的应用程序,比如
“每两周在下午6点前检查一次车”
“运行2小时”

它可以以任何正确的形式书写,既可以是数字也可以是文字(6可以是6或“6”)

我编了一些字典和一些规则

字典和规则的一部分:

plan.rules = {
    language : "EN", 
    dictionary : {
        numbers : {
            ones : [
                ["zero"], 
                ["one", "first", "once"],
                ["two", "second", "twice"],
                ["three", "third", "thrice"],
                ["four", "fourth"],
                ["five", "fifth"],
                ["six", "sixth"],
                ["seven", "seventh"],
                ["nine", "nineth"]
            ],
            teens : [
                [],
                ["ten", "tenth"],
                ["eleven", "eleventh"],
                ["twelwe", "twelweth"],
                ["fourteen", "fourteenth"],
                ["fiveteen", "fiveteenth"],
                ["sixteen", "sixteenth"],
                ["seventeen", "seventeenth"],
                ["eightteen", "eightteenth"],
                ["nineteen", "nineteenth"],
            ],
            tens : [
                [],
                ["ten"],
                ["twenty"],
                ["thirty"],
                ["fourtu"],
                ["fifty"],
                ["sixty"],
                ["seventy"],
                ["eighty"],
                ["ninety"],
            ]
        },
        peroids : {
            minute : ["min", "minute", "minutes"],
            hour : ["hour", "hours"],
            day : ["day", "days"],
            week : ["week", "weeks"],
            month : ["month", "months"],
            year : ["year", "years"]
        }
    },
    rules : {
        each : [
            "each {peroid}",
            "each {number} {peroid}",
            "every {peroid}",
            "every {number} {peroid}",

        ],
        for : [
            "for {peroid}",
            "for {number} {peroid}"
        ]
    }
}
因此,基于上述数据,例如
“每两周检查一次”

  • “两个”
    匹配数字2

  • “周”
    匹配peroid“周”

所以句子匹配模式
“每个{number}{peroid}”

我正在尝试做一些算法来分析输入,我正在考虑运行字典和规则的巨大循环,但也许有可能基于这么多的情况构建一些regExp


如果我完全做错了,怎么做呢?

你可以用正则表达式来做,但我认为你会得到一些非常不规则的正则表达式

举个例子:如果您的文本中总是有单词
每个
,后跟一些文本和一个
数字
,还有一些文本和一个
句点
,您可以尝试这样做(如果您决定展开此项,则需要更多的数字组合):

[Ee]ach.*(一|第一|一|二|第二|二)。*(分钟?小时?天?周?月?年?

每两周检查一次与
two和
week

每个第一天检查其他内容
匹配
第一天
第一天

但是,
一周中的第一天做点什么
或者一个月中的第三周做点什么
都不起作用


使用自然语言有很多种可能的方式来表示每个{number}{period}
,如果你想抓住一切,使用正则表达式将非常困难。

这就是我使用字典的原因。首先,我想“统一”句子,用“周”替换“周”,用“7”替换“第七”,等等,所以我用一些“通用”句子进行最后检查。