zh-lx / pinyin-pro

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

`type: 'all'` 选项输出增加多音字标记字段 #206

Closed yisibl closed 4 months ago

yisibl commented 7 months ago

功能描述

通过新增一个多音字标记字段,可以快速知道哪些是多音字,进而再通过单独的 polyphonic 函数来获取每个多音字的所有读音。

zh-lx commented 7 months ago

在 #208 中新增了 polyphonic 字段支持该功能

yisibl commented 7 months ago

我看到目前新增的 polyphonic 字段是一个数组 https://github.com/zh-lx/pinyin-pro/commit/2fd861fc4d2b9a1ee70fd7618da89cd249fb5bb8#diff-2bac67505471502a69cd648252b7abb10b354f6f4daaf451976c012b630e0bbeR185

这会增加一些遍历成本,我其实更希望这个字段是一个布尔值,具体的有几个读音可以单独获取,这样不影响第一次的渲染效率。

yisibl commented 7 months ago

理想情况下,API 可考虑如下设计:

最终字多音字的读音还是统一通过 polyphonic() 获取:

import { polyphonic } from 'pinyin-pro';

const resultString = polyphonic('一', { toneSandhi: true, } ); // 返回所有读音包含变调读音:['yī', 'yí', 'yì']

const resultAll = polyphonic('一', { type: 'all',  toneSandhi: true, }); // 为变调读音输出单独的字段标识。
zh-lx commented 7 months ago

经测试目前在 type: all 模式下添加 polyphonic 后对性能整体影响不是很大(不到1/10),主要原因是 type: 'all' 中有部分其他信息影响了性能。考虑出一个针对 type: 'all' 的单独要获取的信息的配置。

yisibl commented 7 months ago

考虑出一个针对 type: 'all' 的单独要获取的信息的配置。

这个可以有,因为 pinyin() 函数默认还是尽量保持更高效为好,我找不到在这个 API 一次性输出所有读音的使用场景。

另外,轻声也不是多音字,可能也需要单独的标记字段。