updated 计算规则模块化

This commit is contained in:
PASSER-BY 2022-11-25 00:43:36 +08:00
parent 6fc0260e27
commit adcbd8530b
8 changed files with 117 additions and 57 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// 默认完整映射关系
// 完整关系链数据 - 合并各类关系链数据
import _prefix from './data/prefix';
import _branch from './data/branch';
import _main from './data/main';

View File

@ -1,8 +1,10 @@
// 通用方法
import _filter from './filter';
import _filter from './rule/filter';
import _expression from './rule/expression';
import _replace from './rule/replace';
import _similar from './rule/similar';
import _map from './map';
import _pair from './data/pair';
import _expression from './expression';
var _mode = {}; // 模式数据
var _data = Object.assign({},_map); // 最终数据
@ -130,46 +132,6 @@ export function getSelectors(str){
var lists = str.split('的');
var result = [];
var isMatch = true;
// 双向替换
var replaceMap = {
'晜':'兄',
'哥':'兄',
'姐':'姊',
'侄':'姪',
'婿':'壻',
'祖父':'王父',
'祖母':'王母',
'弟媳':'弟妇',
'嫂':'兄妇',
'孙女婿':'孙婿',
'甥女婿':'甥婿',
'侄女婿':'侄婿',
'孙媳妇':'孙妇',
'甥媳妇':'甥妇',
'侄媳妇':'侄妇',
};
// 含义扩展
var replaceFilter = {
'^从表':['从父姑表','从父舅表','从父姨表','从母姑表','从母舅表','从母叔表'],
'^表表':['姑表叔表','姑表姑表','姑表舅表','姑表姨表','舅表叔表','舅表姑表','舅表舅表','舅表姨表'],
'^([夫妻内外]?)表':['$1姑表','$1舅表'],
'^([姑舅])表(?=[^伯叔])':['$1表伯','$1表叔'],
'^姻':['姑姻','姨姻','姊妹姻','女姻'],
'^眷':['叔眷','舅眷','兄弟眷','男眷'],
'^亲家':['姊妹姻','兄弟眷'],
'^([堂表姨]?)([曾高天烈太远鼻]?)(祖?)([伯叔姑舅姨])':['$1$4$2$3'],
'^([曾高天烈太远鼻]?)祖?王姑':['姑$1祖母'],
'^([曾玄来晜仍云耳])([侄甥])':['$2$1'],
'^外表([伯叔姑舅姨])':['姑表$1外','舅表$1外'],
'([堂表姨]?)外甥':['$1甥'],
'^([舅叔])([曾玄外]*)孙':['$1侄$2孙'],
'^([姨姑])([曾玄外]*)孙':['$1甥$2孙'],
'([孙甥侄])$':['$1男','$1女'],
'([姑舅姨叔])([孙外]*)([男女])$':['$1表侄$2$3','$1表甥$2$3'],
'祖$':['祖父'],
'嫂$':['兄妇'],
'女儿$':['女'],
};
while(lists.length){
var name = lists.shift(); //当前匹配词
var items = []; //当前匹配词可能性
@ -178,19 +140,20 @@ export function getSelectors(str){
var i_items = [];
var keywords = [name];
var getList = function(name){
for(var filter in replaceFilter){
var word_list = replaceFilter[filter];
word_list.forEach(function(word){
var name1 = name.replace(new RegExp(filter),word);
// 词义扩展
_replace.forEach(item => {
item['arr'].forEach(word =>{
var name1 = name.replace(item['exp'],word);
if(name1!=name){
keywords.push(name1);
getList(name1);
}
});
}
for(var word in replaceMap){
var name1 = name.replace(word,replaceMap[word]);
var name2 = name.replace(replaceMap[word],word);
});
// 同义词替换
for(var word in _similar){
var name1 = name.replace(word,_similar[word]);
var name2 = name.replace(_similar[word],word);
if(name1!=name){
keywords.push(name1);
}

View File

@ -1,4 +1,4 @@
// 自然语言表达
// 自然语言表达 - 将语句表达转换成参数调用
export default [
{
exp:/^(\S+?)(应该|得)?(称呼|叫|喊)(\S+?)(什么|啥)?$/,

View File

@ -1,9 +1,9 @@
// 关系链缩写规则 - 将关系链转换成最短关系链
/*
* 关系数据语法说明
* 关系符 f:; m:; h:; w:; s:; d:; xb:兄弟; ob:; lb:; xs:姐妹; os:; ls:
* 修饰符 1:男性; 0:女性; &o:年长; &l:年幼; &\d+:排序 #:隔断; [a|b]:并列
*/
// 关系链缩写规则
export default [
/* 年龄 */
{//有大有小,增加不确定性

View 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:['女']
},
];

View File

@ -0,0 +1,18 @@
// 同义词替换 - 对称呼中的近义词进行替换
export default {
'晜':'兄',
'哥':'兄',
'姐':'姊',
'侄':'姪',
'婿':'壻',
'祖父':'王父',
'祖母':'王母',
'弟媳':'弟妇',
'嫂':'兄妇',
'孙女婿':'孙婿',
'甥女婿':'甥婿',
'侄女婿':'侄婿',
'孙媳妇':'孙妇',
'甥媳妇':'甥妇',
'侄媳妇':'侄妇',
};