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”替换“第七”,等等,所以我用一些“通用”句子进行最后检查。