Giter VIP home page Giter VIP logo

relationship's Introduction

GitHub Workflow Status (with event)

由于工作生活节奏不同,如今很多关系稍疏远的亲戚之间来往并不多。因此放假回家过年时,往往会搞不清楚哪位亲戚应该喊什么称呼,很是尴尬。然而搞不清亲戚关系和亲戚称谓的不仅是小孩,就连年轻一代的大人也都常常模糊混乱。

“**家庭称谓计算器”为你避免了这种尴尬,只需简单的输入即可算出称谓。输入框兼容了不同的叫法,你可以称呼父亲为:“老爸”、“爹地”、“老爷子”等等,方便不同地域的习惯叫法。快捷输入按键,只需简单的点击即可完成关系输入,算法还支持逆向查找称呼哦~!

项目演示地址:https://passer-by.com/relationship/

移动版演示地址: https://passer-by.com/relationship/vue/

一、下载 & 安装

脚本库可以用于浏览器,也可以用于 Nodejs 环境中。

  1. 在网页中引入 <script src="https://passer-by.com/relationship/dist/relationship.min.js">

    获取全局方法 relationship

  2. 使用 npm 安装名为 relationship.js 的包

    npm install relationship.js

    在脚本中引入模块

    // CommonJS 引入
    const relationship = require("relationship.js");
    // ES Module 引入
    import relationship from 'relationship.js';

    npm npm

二、使用

  1. 通用方法: 唯一的计算方法 relationship.

    • 选项模式 relationship(options)

    参数options结构为:

    var options = {
    	text:'',		// 目标对象:目标对象的称谓汉字表达,称谓间用‘的’字分隔
    	target:'',	    	// 相对对象:相对对象的称谓汉字表达,称谓间用‘的’字分隔,空表示自己
    	sex:-1,			// 本人性别:0表示女性,1表示男性
    	type:'default',		// 转换类型:'default'计算称谓,'chain'计算关系链,'pair'计算关系合称
    	reverse:false,		// 称呼方式:true对方称呼我,false我称呼对方
    	mode:'default',		// 模式选择:使用setMode方法定制不同地区模式,在此选择自定义模式
    	optimal:false,       	// 最短关系:计算两者之间的最短关系
    };

    代码示例:

    // 如:我应该叫外婆的哥哥什么?
    relationship({text:'妈妈的妈妈的哥哥'});
    // => ['舅外公']
    
    // 如:七舅姥爷应该叫我什么?
    relationship({text:'七舅姥爷',reverse:true,sex:1});
    // => ['甥外孙']
    
    // 如:舅公是什么亲戚
    relationship({text:'舅公',type:'chain'});
    // => ['爸爸的妈妈的兄弟', '妈妈的妈妈的兄弟', '老公的妈妈的兄弟']
    
    // 如:舅妈如何称呼外婆?
    relationship({text:'外婆',target:'舅妈',sex:1});
    // => ['婆婆']
    
    // 如:外婆和奶奶之间是什么关系?
    relationship({text:'外婆',target:'奶奶',type:'pair'});
    // => ['儿女亲家']
    • 语句模式 relationship(exptession)

    参数exptession句式可以为:xxx是xxx的什么人xxx叫xxx什么xxx如何称呼xxx等.

    代码示例:

    // 如:舅妈如何称呼外婆?
    relationship('舅妈如何称呼外婆?');
    // => ['婆婆']
    
    // 如:外婆和奶奶之间是什么关系?
    relationship('外婆和奶奶之间是什么关系?');
    // => ['儿女亲家']
  2. 内部属性:获取当前数据表 relationship.data.

  3. 内部属性:获取当前数据量 relationship.dataCount.

  4. 内部方法:用户自定义模式 relationship.setMode(mode_name,mode_data).

    代码示例(可参考数据表格式对数据进行覆盖):

    // 关系解析语法
    // 【关系链】f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹
    // 【修饰符】 1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列
    relationship.setMode('northern',{
    	'm,f':['姥爷'],
    	'm,m':['姥姥'],
    	'm,xb,s&o':['表哥'],
    	'm,xb,s&l':['表弟'],
    });

三、开发 & 贡献

# 安装开发依赖
npm install

# build 模块: 将 relationship 打包压缩
npm run build

# 执行测试用例(可以在tests/test.js中完善测试用例)
npm test

四、关于分歧

一些称呼存在南北方或地区差异,容易引起歧义,并不保证和你所处地区的称谓习惯一致。

部分称呼有多种关系且跨辈分。例如:

  • 大爷:爷爷的哥哥 / 父亲的哥哥(北方);
  • 舅公:爸妈的舅舅 / 老公的舅舅;
  • 伯公:爸妈的伯父 / 老公的伯父;
  • 叔公:爸妈的叔叔 / 老公的叔叔;
  • 姨公:爸妈的姨丈 / 老公的姨丈;
  • 姨夫:姨妈的老公 / 姨子的老公;
  • 姑夫:姑妈的老公 / 姑子的老公;
  • 婶子:叔叔的老婆 / 叔子的老婆;
  • 妗子:舅舅的老婆 / 舅子的老婆;

部分称呼以现代生活常见理解为主。例如:

  • 媳妇:在古代或者北方地区指儿子的妻子,这里指自己的妻子(儿媳妇写作“息妇”);
  • 太太:一些地方指年长的妇人或曾祖父母,这里指自己的妻子;

五、教程

六、其他

他们都在用:

查询网 http://www.ip138.com/chengwei/

在线查询网 http://qinshu.supfree.net/

在线工具 http://www.atool.org/relateship.php

有道语文达人 http://dict.youdao.com/k12yuwen/html/relation.html

小米MIUI系统计算器 http://www.miui.com/

小米MIUI网页版本 http://www.miui.com/zt/calculator2016/dist.php

符号库 http://www.fuhaoku.com/tool/qinqiguanxi.html

relationship's People

Contributors

dependabot[bot] avatar mumuy avatar superray3 avatar whinc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

relationship's Issues

代号

'$1$2'$3
,xb
“#”
等符号代表什么意思

node.js 12+ 版本无法导入 relationship-mode 以及 zh-KH 等模块

问题描述:从 node.js 12 开始,package.json 引入了入口概念,包的导出入口通过exports 关键字定义,并且优先级高于main关键字。当前 relationship.js 中虽然定义了 exports 关键字,但只包含了 relationship ,未包含 relationship-mode 以及 lang 目录下 zh-KH,导致使用 node 12+ 版本无法导入relationship-mode 以及 zh-KH

package.json

    "exports": {
        "import": "./dist/relationship.min.mjs",
        "default": "./dist/relationship.min.js"
    }

下面导入会报错

const mode1 = require('relationship.js/dist/relationship-mode.min.mjs')  // Error: './dist/relationship-mode.min.mjs' is not defined

解决该问题的办法是,将 relationship-mode 以及 zh-KH 在 exports 中明确定义,同时增加require明确支持 cjs 格式更加规范,代码如下:

    "exports": {
        ".": {
            "import": "./dist/relationship.min.mjs",
            "require": "./dist/relationship.min.js",
            "default": "./dist/relationship.min.js"
        },
        "./mode": {
            "import": "./dist/relationship-mode.min.mjs",
            "require": "./dist/relationship-mode.min.js",
            "default": "./dist/relationship-mode.min.js"
        },
        "./zh-HK": {
            "import": "./dist/lang/relationship.zh-HK.min.mjs",
            "require": "./dist/lang/relationship.zh-HK.min.js",
            "default": "./dist/lang/relationship.zh-HK.min.js"
        },
        "./zh-HK/mode": {
            "import": "./dist/lang/relationship-mode.zh-HK.min.mjs",
            "require": "./dist/lang/relationship-mode.zh-HK.min.js",
            "default": "./dist/lang/relationship-mode.zh-HK.min.js"
        }
    },

调整后可以这样导入

const mode = require('relationship.js/mode')
const relationshipHK = require('relationship.js/zh-HK')

错误提示:relationship is not a function

使用 import
import relationship from 'relationship.js';
或require
var relationship = require("relationship.js");
两个方式都不行,错误提示:
(0 , _relationship.default) is not a function

relationship is not a function

调用:relationship({text:'妈妈的妈妈的哥哥'});
语言:微信小程序+TS ,是TS,TS,不是JS

周瑜管夏侯惇叫什么

周瑜管夏侯惇叫什么?
经常在德云社的相声里听到这个梗,今天用计算器算了一下,结果是“--”
非抬杠,纯好奇

人物关系如下:
周瑜与孙策万千佳丽中寻得大乔小乔,周瑜娶了小乔,而孙策娶了大乔,成为姻亲。
孙策的妹妹孙尚香又嫁给了刘备做夫人,孙尚香强势断然不会为刘备生子,但刘备其他的儿子无疑也是孙尚香的子嗣,即刘禅。
刘禅所娶张皇后便是夏侯渊的侄女的女儿,即夏侯氏之女。
那么周瑜叫夏侯渊的哥哥夏侯惇什么呢?

引入此包后 webpack 构建失败 Module not found: Error: Default condition should be last one

问题见 Module not found: Error: Default condition should be last one

当前版本的 relationship.js 的 package.json 导出模块配置如下:

{
    "exports": {
        "default": "./dist/relationship.min.js",
        "import": "./dist/relationship.min.mjs"
    }
}

从 node 12 后模块系统的变化,需要将 default 导出移到最后面,详情见 node 文档 https://nodejs.org/dist/latest-v20.x/docs/api/packages.html#conditional-exports

image

请求增加 typescript 类型声明

我最近在做一个计算器品类的小程序,其中的亲戚关系计算器使用这个库实现,节省了我大量的时间,并获得了可靠的质量,感谢 @mumuy 的辛勤付出和杰出的工作成果,等我发布更新后会在开源致谢页面附上 relationship 项目的地址和作者信息,再次感谢。

当前 relationship 使用纯 js 实现,缺少对 ts 的有效支持,导致在 js/ts 项目中通过 npm 包引入使用时无类型补全和检查,期望能补充 ts 的类型声明。

关于 model

请问方法 relationship.setMode(mode_name,mode_data) 中的 model_name 参数有哪些值呢?

添加上“父”、“母”是否会更完整一些?

relationship.js第186行:
'f':['爸爸','父亲','阿爸','老爸','老窦','爸','爹','爹爹','爹地','爹啲','老爹','大大','老爷子','老头子'],
加上“父”

relationship.js第413行:
'm':['妈妈','母亲','老妈','阿妈','老母','老妈子','娘','妈','娘亲','妈咪'],
加上“母”

是不是会更完善一些?

建议加入方言

比如到某些县城或农村,不太可能喊舅外公。
方言可进行收集,汇总,展示
和普通话一起展示

祖辈姻眷亲显示不出来

输入“母亲的母亲的哥哥的老婆的哥哥”之类的祖辈姻眷亲,结果是不可查询,“貌似他/她跟你不是很熟哦!”
输入“哥哥的老婆的哥哥的老婆的哥哥”之类的超过两度的姻眷亲,也一样是不可查询
此外建议把正式用语(书面语)和非正式用语(口语)分两个模式显示

计算结果能不能返回所有结果

计算结果能不能返回所有称谓?比如"爷爷的父亲",返回的是"曾祖父",这里返回一个数组,把所有叫法都返回岂不更好

中文数字

str = str.replace(/[二|三|四|五|六|七|八|九|十]{1,2}/g, 'x');
开始分词解析的时候都是中文的称呼,把数字替换为x,比如二哥的。。就为x哥的。。
然后x哥就在data中找不到对应的代号,就会忽略掉这一匹配?

bug

老婆的老公 错啦~
明明是自己的说

关系不存在

爸爸妈妈的姐姐的儿子 这个关系不存在,但是爸爸妈妈的姐姐的女儿可以计算出是姨姑母

北方叫法

在北方 作者可以了解一下北方的朋友
爸爸的哥哥 我们称作大爷 二大爷 三大爷 不叫伯父 希望可以增加南北叫法提示

建议把 relationship 改为 relation

虽然 relationship 在字典上确实可以和 relation 通用但是在实际生活中的语言习惯上还是有区别。

blood relations 血缘关系
relations by marriage 婚姻关系

relationship 偏指感情而 relation 偏指联系。

例如:
The relationship between me and my father is good.
我和我的父亲关系很好。

The relation between me and this man is son and father.
这个人与我是父子关系

全新版本

感谢作者,我二次开发了一个版本,基本上把relationship.js提供的特性用到了极致:

做了以下改进:

  1. 修复了官方demo的一些bug,比如计算器“夫”“妻”disable规则问题(自动判断最后输入项的性别,官方demo只判断了首次输入的性别)
  2. 新增根据语言描述找关系
  3. 重构UI交互,尽可能做到交互自然

image
image
image

体验地址:https://sinqi.tools/calc/relationship

爸爸的五兄妹叫什么

1 女 (大姑)
2 男 (YOU are here)
3 女 (三姑 or 二姑?)
4 男 (四叔 or 二叔?)
5 女 (五姑 or 三姑)?

追加关系

川渝地区有“孃孃”的说法,希望追加

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.