Skip to content

高级用法

本文档介绍 relationship-ts 的高级用法。

自定义方言模式

你可以使用 setMode() 方法设置自定义的方言模式:

ts
import relationship from 'relationship-ts';

// 设置北方方言模式
relationship.setMode('northern', {
  'm,f': ['姥爷'],
  'm,m': ['姥姥'],
  'm,xb,s&o': ['表哥'],
  'm,xb,s&l': ['表弟'],
});

// 使用自定义模式
relationship({ text: '妈妈的妈妈', mode: 'northern' });
// => ['姥姥']

覆盖默认称谓

ts
// 覆盖默认的称谓
relationship.setMode('custom', {
  'f': ['老爸', '爹地'],
  'm': ['老妈', '妈咪'],
  'f,f': ['阿公'],
  'f,m': ['阿嫲'],
});

// 使用自定义模式
relationship({ text: '爸爸', mode: 'custom' });
// => ['老爸', '爹地']

获取数据信息

获取数据表

ts
const data = relationship.data;
console.log(data); // Map 结构的数据表

获取数据量

ts
const count = relationship.dataCount;
console.log(`当前数据量: ${count}`); // 当前数据量: 3000+

使用内置方言

粤语(广东)方言

ts
import relationship from 'relationship-ts';
import { guangdong } from 'relationship-ts/locale/guangdong';

// 设置方言模式
relationship.setMode('guangdong', guangdong.data);

// 使用方言模式查询
relationship({ text: '妈妈的妈妈', mode: 'guangdong' });
// => ['阿婆']

北方方言

ts
import relationship from 'relationship-ts';
import north from 'relationship-ts/locale/north';

// 设置方言模式
relationship.setMode('north', north.data);

// 使用方言模式查询
relationship({ text: '妈妈的妈妈', mode: 'north' });
// => ['姥姥']

性能优化技巧

缓存机制

relationship-ts 内置了 LRU 缓存机制,自动缓存常用查询结果:

ts
// 第一次查询(较慢,~0.07ms)
relationship({ text: '爸爸的妈妈' });

// 第二次查询(更快,~0.03ms,命中缓存)
relationship({ text: '爸爸的妈妈' });

批量查询

对于批量查询,建议使用相同的模式:

ts
// 好的做法:使用相同模式
const results = [
  relationship({ text: '爸爸' }),
  relationship({ text: '妈妈' }),
  relationship({ text: '哥哥' }),
];

// 避免:频繁切换模式(会清除缓存)
const results = [
  relationship({ text: '爸爸', mode: 'default' }),
  relationship({ text: '爸爸', mode: 'guangdong' }),
  relationship({ text: '爸爸', mode: 'north' }),
];

完整选项示例

ts
import relationship from 'relationship-ts';

const result = relationship({
  text: '爸爸的妈妈',      // 目标对象的称谓
  target: '',              // 相对对象的称谓(空表示自己)
  sex: 1,                  // 本人性别:1=男性,0=女性,-1=未知
  type: 'default',         // 转换类型:default=计算称谓,chain=计算关系链,pair=计算合称
  reverse: false,          // 称呼方式:true=对方称呼我,false=我称呼对方
  mode: 'default',         // 使用的方言模式
  optimal: false,          // 是否计算两者之间的最短关系
});

下一步

基于 MIT 许可发布