updated 计算规则模块化
This commit is contained in:
74
src/module/rule/expression.js
Normal file
74
src/module/rule/expression.js
Normal file
@@ -0,0 +1,74 @@
|
||||
// 自然语言表达 - 将语句表达转换成参数调用
|
||||
export default [
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(称呼|叫|喊)(\S+?)(什么|啥)??$/,
|
||||
opt:match=>({
|
||||
text:match[4],
|
||||
target:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(如何|怎么)(称呼|叫|喊)(\S+?)??$/,
|
||||
opt:match=>({
|
||||
text:match[5],
|
||||
target:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)是(\S+?)的(谁|什么|什么亲戚|啥亲戚|什么人)??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
target:match[2],
|
||||
type:match[1].indexOf('的')>-1?'default':'chain'
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?管(\S+?)叫(什么|啥)??$/,
|
||||
opt:match=>({
|
||||
text:match[3],
|
||||
target:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(和|与)(\S+?)(之间)?是(什么|啥)关系??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
target:match[3],
|
||||
type:'pair'
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)对于(\S+?)是(什么|啥)关系??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
target:match[2],
|
||||
type:'chain'
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(指的)?是(什么|啥)(意思|关系|亲戚关系|辈分|人)??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
type:'chain'
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(称呼|叫|喊)(什么|啥)??$/,
|
||||
opt:match=>({
|
||||
text:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(如何|怎么)(称呼|叫|喊)??$/,
|
||||
opt:match=>({
|
||||
text:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)是(谁|什么|什么亲戚|啥亲戚|什么人|什么辈分|啥辈分)??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
type:match[1].indexOf('的')>-1?'default':'chain'
|
||||
})
|
||||
},
|
||||
];
|
||||
190
src/module/rule/filter.js
Normal file
190
src/module/rule/filter.js
Normal file
@@ -0,0 +1,190 @@
|
||||
// 关系链缩写规则 - 将关系链转换成最短关系链
|
||||
/*
|
||||
* 关系数据语法说明:
|
||||
* 【关系符】 f:父; m:母; h:夫; w:妻; s:子; d:女; xb:兄弟; ob:兄; lb:弟; xs:姐妹; os:姐; ls:妹
|
||||
* 【修饰符】 1:男性; 0:女性; &o:年长; &l:年幼; &\d+:排序 #:隔断; [a|b]:并列
|
||||
*/
|
||||
export default [
|
||||
/* 年龄 */
|
||||
{//有大有小,增加不确定性
|
||||
exp:/^(.+)&o([^#]+)&l/g,
|
||||
str:'$1$2'
|
||||
},
|
||||
{//有大有小,增加不确定性
|
||||
exp:/^(.+)&l([^#]+)&o/g,
|
||||
str:'$1$2'
|
||||
},
|
||||
{//有大有小,增加不确定性
|
||||
exp:/^(.+)?,o([sb](&\d+)?)([^#]+)&l/g,
|
||||
str:'$1,x$2$4'
|
||||
},
|
||||
{//有大有小,增加不确定性
|
||||
exp:/^(.+)?,l([sb](&\d+)?)([^#]+)&o/g,
|
||||
str:'$1,x$2$4'
|
||||
},
|
||||
/* 兄弟姐妹 */
|
||||
{//哥哥姐姐的哥哥姐姐还是自己的哥哥姐姐(年龄判断)
|
||||
exp:/(,o[sb](&\d+)?)+(,o[sb])(&\d+)?/,
|
||||
str:'$3$4'
|
||||
},
|
||||
{//弟弟妹妹的弟弟妹妹还是自己的弟弟妹妹(年龄判断)
|
||||
exp:/(,l[sb](&\d+)?)+(,l[sb])(&\d+)?/,
|
||||
str:'$3$4'
|
||||
},
|
||||
{//如果自己是男性,兄弟姐妹的兄弟就是自己的兄弟或自己
|
||||
exp:/^(.*,[fh1])(,[olx][sb](&\d+)?)+,[olx]b(.*)$/,
|
||||
str:'$1,xb$4#$1$4'
|
||||
},
|
||||
{//如果自己是女性,兄弟姐妹的姐妹就是自己的姐妹或自己
|
||||
exp:/^(.*,[mw0])(,[olx][sb](&\d+)?)+,[olx]s(.*)$/,
|
||||
str:'$1,xs$4#$1$4'
|
||||
},
|
||||
{//如果自己是男性,兄弟姐妹的姐妹就是自己的姐妹
|
||||
exp:/(,[fh1])(,[olx][sb](&\d+)?)+,[olx]s/g,
|
||||
str:'$1,xs'
|
||||
},
|
||||
{//如果自己是女性,兄弟姐妹的兄弟就是自己的兄弟
|
||||
exp:/(,[mw0])(,[olx][sb](&\d+)?)+,[olx]b/g,
|
||||
str:'$1,xb'
|
||||
},
|
||||
{//不知道性别,兄弟姐妹的兄弟是兄弟或自己
|
||||
exp:/^,[olx][sb](&\d+)?,[olx]b(.+)?$/,
|
||||
str:',xb$2#$2'
|
||||
},
|
||||
{//不知道性别,兄弟姐妹的姐妹是姐妹或自己
|
||||
exp:/^,[olx][sb](&\d+)?,[olx]s(.+)?$/,
|
||||
str:',xs$2#$2'
|
||||
},
|
||||
{//将复合称谓拆分
|
||||
exp:/^,x([sb])$/,
|
||||
str:',o$1#,l$1'
|
||||
},
|
||||
/* 父母 */
|
||||
{//母亲的丈夫是自己的父亲
|
||||
exp:/m,h/g,
|
||||
str:'f'
|
||||
},
|
||||
{//父亲的妻子是自己的母亲
|
||||
exp:/f,w/g,
|
||||
str:'m'
|
||||
},
|
||||
{//兄弟的父母就是自己的父母
|
||||
exp:/,[xol][sb](&\d+)?(,[mf])/g,
|
||||
str:'$2'
|
||||
},
|
||||
/* 父母的子女 */
|
||||
{//父母的女儿排序判断姐妹的排序
|
||||
exp:/,[mf],d(&\d+)/,
|
||||
str:',xs$1'
|
||||
},
|
||||
{//父母的女儿年龄判断是姐姐还是妹妹
|
||||
exp:/,[mf],d&([ol])/,
|
||||
str:',$1s'
|
||||
},
|
||||
{//父母的儿子排序判断兄弟的排序
|
||||
exp:/,[mf],s(&\d+)/,
|
||||
str:',xb$1'
|
||||
},
|
||||
{//父母的儿子年龄判断是哥哥还是弟弟
|
||||
exp:/,[mf],s&([ol])/,
|
||||
str:',$1b'
|
||||
},
|
||||
{//如果自己是男性,父母的儿子是兄弟或者自己
|
||||
exp:/^(.*,[fh1]|[xol]b(&\d+)?),[mf],s(.*)$/,
|
||||
str:'$1,xb$3#$1$3'
|
||||
},
|
||||
{//如果自己是女性,父母的女儿是姐妹或者自己
|
||||
exp:/^(.*,[mw0]|[xol]s(&\d+)?),[mf],d(.*)$/,
|
||||
str:'$1,xs$3#$1$3'
|
||||
},
|
||||
{//如果自己是女性,父母的儿子是自己的兄弟
|
||||
exp:/(,[mw0]|[xol]s(&\d+)?),[mf],s/,
|
||||
str:'$1,xb'
|
||||
},
|
||||
{//如果自己是男性,父母的女儿是自己的姐妹
|
||||
exp:/(,[fh1]|[xol]b(&\d+)?),[mf],d/,
|
||||
str:'$1,xs'
|
||||
},
|
||||
{//父母的儿子是兄弟或自己
|
||||
exp:/^,[mf],s(.+)?$/,
|
||||
str:',xb$1#,1$1'
|
||||
},
|
||||
{//父母的女儿是姐妹或者自己
|
||||
exp:/^,[mf],d(.+)?$/,
|
||||
str:',xs$1#,0$1'
|
||||
},
|
||||
/* 孩子 */
|
||||
{//孩子的兄弟是自己的儿子(排序判断)
|
||||
exp:/,[ds](&[ol\d]+)?,[olx]b(&\d+)/g,
|
||||
str:',s$2'
|
||||
},
|
||||
{//孩子的姐妹是自己的女儿(排序判断)
|
||||
exp:/,[ds](&[ol\d]+)?,[olx]s(&\d+)/g,
|
||||
str:',d$2'
|
||||
},
|
||||
{//孩子的兄弟是自己的儿子(年龄判断)
|
||||
exp:/,[ds]&o,ob/g,
|
||||
str:',s&o'
|
||||
},
|
||||
{//孩子的姐妹是自己的女儿(年龄判断)
|
||||
exp:/,[ds]&o,os/g,
|
||||
str:',d&o'
|
||||
},
|
||||
{//孩子的兄弟是自己的儿子(年龄判断)
|
||||
exp:/,[ds]&l,lb/g,
|
||||
str:',s&l'
|
||||
},
|
||||
{//孩子的姐妹是自己的女儿(年龄判断)
|
||||
exp:/,[ds]&l,ls/g,
|
||||
str:',d&l'
|
||||
},
|
||||
{//孩子的姐妹是自己的女儿
|
||||
exp:/,[ds](&[ol\d]+)?,[olx]s(&\d+)?/g,
|
||||
str:',d$2'
|
||||
},
|
||||
{//孩子的兄弟是自己的儿子
|
||||
exp:/,[ds](&[ol\d]+)?,[olx]b(&\d+)?/g,
|
||||
str:',s$2'
|
||||
},
|
||||
/* 夫妻 */
|
||||
{//自己是女性,女儿或儿子的妈妈是自己
|
||||
exp:/(,[mwd0]|,[olx]s)(&[ol\d]+)?,[ds](&[ol\d]+)?,m/g,
|
||||
str:'$1'
|
||||
},
|
||||
{//自己是女性,女儿或儿子的爸爸是自己的丈夫
|
||||
exp:/(,[mwd0]|,[olx]s)(&[ol\d]+)?,[ds](&[ol\d]+)?,f/g,
|
||||
str:'$1,h'
|
||||
},
|
||||
{//自己是男性,女儿或儿子的爸爸是自己
|
||||
exp:/(,[fhs1]|,[olx]b)(&[ol\d]+)?,[ds](&[ol\d]+)?,f/g,
|
||||
str:'$1'
|
||||
},
|
||||
{//自己是男性,女儿或儿子的妈妈是自己的妻子
|
||||
exp:/(,[fhs1]|,[olx]b)(&[ol\d]+)?,[ds](&[ol\d]+)?,m/g,
|
||||
str:'$1,w'
|
||||
},
|
||||
{//不知道性别,子女的妈妈是妻子或自己
|
||||
exp:/^,[ds],m(.+)?$/,
|
||||
str:',w$1#$1'
|
||||
},
|
||||
{//不知道性别,子女的爸爸是丈夫或自己
|
||||
exp:/^,[ds],f(.+)?$/,
|
||||
str:',h$1#$1'
|
||||
},
|
||||
{//夫妻的孩子就是自己的孩子
|
||||
exp:/,[wh](,[ds])/g,
|
||||
str:'$1'
|
||||
},
|
||||
{//夫妻的对方是自己
|
||||
exp:/,w,h|,h,w/g,
|
||||
str:''
|
||||
},
|
||||
{//并列关系处理1 X[A|B|C]Y = XAY#X[B|C]Y
|
||||
exp:/(.+)?\[([^\|]+?)\|([^\[\]]*\|[^\[\]]*)\](.+)?/g,
|
||||
str:'$1$2$4#$1[$3]$4'
|
||||
},
|
||||
{//并列关系处理2 X[A|B]Y = XAY#XBY
|
||||
exp:/(.+)?\[([^\[\]\|]+?)\|([^\[\]\|]+?)?\](.+)?/g,
|
||||
str:'$1$2$4#$1$3$4'
|
||||
}
|
||||
];
|
||||
79
src/module/rule/replace.js
Normal file
79
src/module/rule/replace.js
Normal file
@@ -0,0 +1,79 @@
|
||||
// 词义扩展 - 对称呼词义进行扩展
|
||||
export default [
|
||||
{
|
||||
exp:/^从表/,
|
||||
arr:['从父姑表','从父舅表','从父姨表','从母姑表','从母舅表','从母叔表']
|
||||
},
|
||||
{
|
||||
exp:/^表表/,
|
||||
arr:['姑表叔表','姑表姑表','姑表舅表','姑表姨表','舅表叔表','舅表姑表','舅表舅表','舅表姨表']
|
||||
},
|
||||
{
|
||||
exp:/^([夫妻内外]?)表/,
|
||||
arr:['$1姑表','$1舅表']
|
||||
},
|
||||
{
|
||||
exp:/^([姑舅])表(?=[^伯叔])/,
|
||||
arr:['$1表伯','$1表叔']
|
||||
},
|
||||
{
|
||||
exp:/^姻/,
|
||||
arr:['姑姻','姨姻','姊妹姻','女姻']
|
||||
},
|
||||
{
|
||||
exp:/^眷/,
|
||||
arr:['叔眷','舅眷','兄弟眷','男眷']
|
||||
},
|
||||
{
|
||||
exp:/^亲家/,
|
||||
arr:['姊妹姻','兄弟眷']
|
||||
},
|
||||
{
|
||||
exp:/^([堂表姨]?)([曾高天烈太远鼻]?)(祖?)([伯叔姑舅姨])/,
|
||||
arr:['$1$4$2$3']
|
||||
},
|
||||
{
|
||||
exp:/^([曾高天烈太远鼻]?)祖?王姑/,
|
||||
arr:['姑$1祖母']
|
||||
},
|
||||
{
|
||||
exp:/^([曾玄来晜仍云耳])([侄甥])/,
|
||||
arr:['$2$1']
|
||||
},
|
||||
{
|
||||
exp:/^外表([伯叔姑舅姨])/,
|
||||
arr:['姑表$1外','舅表$1外']
|
||||
},
|
||||
{
|
||||
exp:/([堂表姨]?)外甥/,
|
||||
arr:['$1甥']
|
||||
},
|
||||
{
|
||||
exp:/^([舅叔])([曾玄外]*)孙/,
|
||||
arr:['$1侄$2孙']
|
||||
},
|
||||
{
|
||||
exp:/^([姨姑])([曾玄外]*)孙/,
|
||||
arr:['$1甥$2孙']
|
||||
},
|
||||
{
|
||||
exp:/([孙甥侄])$/,
|
||||
arr:['$1男','$1女']
|
||||
},
|
||||
{
|
||||
exp:/([姑舅姨叔])([孙外]*)([男女])$/,
|
||||
arr:['$1表侄$2$3','$1表甥$2$3']
|
||||
},
|
||||
{
|
||||
exp:/祖$/,
|
||||
arr:['祖父']
|
||||
},
|
||||
{
|
||||
exp:/嫂$/,
|
||||
arr:['兄妇']
|
||||
},
|
||||
{
|
||||
exp:/女儿$/,
|
||||
arr:['女']
|
||||
},
|
||||
];
|
||||
18
src/module/rule/similar.js
Normal file
18
src/module/rule/similar.js
Normal file
@@ -0,0 +1,18 @@
|
||||
// 同义词替换 - 对称呼中的近义词进行替换
|
||||
export default {
|
||||
'晜':'兄',
|
||||
'哥':'兄',
|
||||
'姐':'姊',
|
||||
'侄':'姪',
|
||||
'婿':'壻',
|
||||
'祖父':'王父',
|
||||
'祖母':'王母',
|
||||
'弟媳':'弟妇',
|
||||
'嫂':'兄妇',
|
||||
'孙女婿':'孙婿',
|
||||
'甥女婿':'甥婿',
|
||||
'侄女婿':'侄婿',
|
||||
'孙媳妇':'孙妇',
|
||||
'甥媳妇':'甥妇',
|
||||
'侄媳妇':'侄妇',
|
||||
};
|
||||
Reference in New Issue
Block a user