zh-lx / pinyin-pro

中文转拼音、拼音音调、拼音声母、拼音韵母、多音字拼音、姓氏拼音、拼音匹配、中文分词
https://pinyin-pro.cn
MIT License
3.82k stars 332 forks source link

自定义核心词库 #227

Closed tansongchen closed 3 months ago

tansongchen commented 4 months ago

功能描述

现在可以通过 addDict 来增加新的词到读音的映射,但是无法覆盖内置的所有词

背景是我在做一个带调拼音的输入法,希望让词中汉字的读音与单字一致,只出现《通用规范汉字字典》里出现的音(也即不考虑非助词的轻声),如果不改动源码,目前似乎实现不了

提炼几个功能点

zh-lx commented 4 months ago

addDict 是用来让用户自定义词典的 api,在拼音转换时,会根据通过 addDict 添加的词的权重来定义优先级。 如果你要强制定义所有单字的读音,可以使用 customPinyin api,命中 customPinyin 的字词都会优先走这个 api 定义的读音

可以看下这个 api 是否能够解决你的问题

tansongchen commented 4 months ago

这个似乎也是在现有的基础上加,不是替换?

我的需求不光是单字,我是打算把「孩子」这种词都注成 hai2 zi3,不标轻声,词音和单字音一样

zh-lx commented 4 months ago

这个似乎也是在现有的基础上加,不是替换?

我的需求不光是单字,我是打算把「孩子」这种词都注成 hai2 zi3,不标轻声,词音和单字音一样

是覆盖,比如说 [孩子],你添加了 子: 'zǐ',所有文本中的子的转换结果都是

yisibl commented 4 months ago

我的需求不光是单字,我是打算把「孩子」这种词都注成 hai2 zi3,不标轻声,词音和单字音一样

这个目前你只能把所有的词库中的轻声用 customPinyin 覆盖一遍,理想情况下,我们需要一个选项来控制是否开启轻声。

yisibl commented 4 months ago

另外,《通用规范汉字字典》是指商务印书馆出版的这本吗?

请注意,在「通用规范汉字表」中,我们目前还缺少一些字,将在 https://github.com/zh-lx/pinyin-pro/issues/228 补充完整。

tansongchen commented 4 months ago

目前使用 customPinyin 可以成功自定义二字以上的词。但是,对于一字词,好像没有办法用 customPinyin 来实现所有的需求。例如,

describe("add custom pinyin", () => {
  it("should not interfere with predefined words", () => {
    customPinyin({ 银: "yín", 行: "xíng háng héng" });
    expect(pinyin("银行")).toEqual("yín háng");
  });
});
image

我的本意是把整个通规字典导入一遍,以保证程序注音的结果中没匹配到词的单字给注的音一定是字典中的音,但是导致本来成词的也跟着这个表走了


如果感觉这里的行为不太好自定义,那我也可以等 #228 做好之后再搞

zh-lx commented 4 months ago

目前使用 customPinyin 可以成功自定义二字以上的词。但是,对于一字词,好像没有办法用 customPinyin 来实现所有的需求。例如,

describe("add custom pinyin", () => {
  it("should not interfere with predefined words", () => {
    customPinyin({ 银: "yín", 行: "xíng háng héng" });
    expect(pinyin("银行")).toEqual("yín háng");
  });
});
image

我的本意是把整个通规字典导入一遍,以保证程序注音的结果中没匹配到词的单字给注的音一定是字典中的音,但是导致本来成词的也跟着这个表走了

如果感觉这里的行为不太好自定义,那我也可以等 #228 做好之后再搞

那我理解你只需要对于内置字典中所缺少的字导入一遍。你可以在通规字典导入时,对每个字先使用 pinyin api 转换下,如果转换结果和字本身相同,意味着内置字典缺少这个字。对于这些缺少的字再使用 customPinyin 导入

zh-lx commented 3 months ago

已在 3.22.0 版本中完整支持了通用汉字规范表中的字符