Skip to content

LimePinyin 汉字转拼音组件

一个全端通用的中文转拼音 UTS 库,轻量高效。支持多种拼音格式输出,包括带音调、不带音调、数字音调等多种形式,可用于中文排序、搜索、输入法等多种应用场景。组件提供了丰富的自定义选项,可以满足各种复杂的拼音转换需求。

文档链接

📚 组件详细文档请访问以下站点:

安装方法

  1. 在uni-app插件市场入口 中搜索并导入lime-pinyin
  2. 导入后在页面引入相关方法
  3. App端需要自定义基座才能使用

注意事项 由于内部用到了getFileSystemManager,App打包时如果没有在页面使用到getFileSystemManager会报错。 建议在任意页面添加以下代码:

js
const manager = uni.getFileSystemManager();

代码演示

基础拼音转换

通过不同的选项参数,可以获得多种格式的拼音结果:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 获取带音调拼音
pinyin('汉语拼音'); // 'hàn yǔ pīn yīn'

// 获取不带声调的拼音
pinyin('汉语拼音', { toneType: 'none' } as CompleteOptions); // 'han yu pin yin'

// 获取声调转换为数字后缀的拼音
pinyin('汉语拼音', { toneType: 'num' } as CompleteOptions); // 'han4 yu3 pin1 yin1'

// 获取数组形式带音调拼音
pinyin('汉语拼音', { type: 'array' } as CompleteOptions); // ["hàn", "yǔ", "pīn", "yīn"]

// 获取数组形式不带声调的拼音
pinyin('汉语拼音', { toneType: 'none', type: 'array' } as CompleteOptions); // ["han", "yu", "pin", "yin"]

// 获取数组形式声调转换为数字后缀的拼音
pinyin('汉语拼音', { toneType: 'num', type: 'array' } as CompleteOptions); // ["han4", "yu3", "pin1", "yin1"]

获取声母

设置 options.patterninitial 时,返回拼音的声母:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 获取声母
pinyin('汉语拼音', { pattern: 'initial' } as CompleteOptions); // 'h y p y'

// 获取数组形式声母
pinyin('汉语拼音', { pattern: 'initial', type: 'array' } as CompleteOptions); // ["h", "y", "p", "y"]

获取韵母

设置 options.patternfinal 时,返回拼音的韵母:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 获取带音调韵母
pinyin('汉语拼音', { pattern: 'final' } as CompleteOptions); // 'àn ǔ īn īn'

// 获取不带音调韵母
pinyin('汉语拼音', { pattern: 'final', toneType: 'none' } as CompleteOptions); // 'an u in in'

// 获取音调为数字的韵母
pinyin('汉语拼音', { pattern: 'final', toneType: 'num' } as CompleteOptions); // 'an4 u3 in1 in1'

// 获取数组形式带音调韵母
pinyin('汉语拼音', { pattern: 'final', type: 'array' } as CompleteOptions); // ["àn", "ǔ", "īn", "īn"]

获取韵头/韵腹/韵尾

设置 options.patternfinalHead/finalBody/finalTail 时,返回拼音的韵头/韵腹/韵尾:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 返回韵头
pinyin('村庄', { pattern: 'finalHead', type: 'array' } as CompleteOptions); // [ '', 'u' ]

// 返回韵腹
pinyin('村庄', { pattern: 'finalBody', type: 'array' } as CompleteOptions); // [ 'ū', 'ā' ]

// 返回韵尾
pinyin('村庄', { pattern: 'finalTail', type: 'array' } as CompleteOptions); // [ 'n', 'ng' ]

获取音调

设置 options.patternnum 时,返回拼音的音调对应的数字:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 获取音调
pinyin('汉语拼音', { pattern: 'num' } as CompleteOptions); // '4 3 1 1'

// 获取数组形式音调
pinyin('汉语拼音', { pattern: 'num', type: 'array' } as CompleteOptions); // ["4", "3", "1", "1"]

获取首字母

设置 options.patternfirst 时,返回拼音的首字母:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 获取拼音首字母
pinyin('赵钱孙李额', { pattern: 'first' } as CompleteOptions); // 'z q s l é'

// 获取不带音调拼音首字母
pinyin('赵钱孙李额', { pattern: 'first', toneType: 'none' } as CompleteOptions); // 'z q s l e'

// 获取数组形式拼音首字母
pinyin('赵钱孙李额', { pattern: 'first', type: 'array' } as CompleteOptions); // ['z', 'q', 's', 'l', 'é']

获取完整内容

设置 options.typeall 时,返回拼音的全部内容的数组:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

const result = pinyin('汉语拼音', { type: 'all' });
// 返回包含完整拼音信息的数组

处理多音字

设置 options.multipletrue 时,可以获取多音字的所有拼音:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 获取多音
pinyin('好', { multiple: true } as CompleteOptions); // 'hǎo hào'

// 获取数组形式多音
pinyin('好', { multiple: true, type: 'array' } as CompleteOptions); // ["hǎo", "hào"]

// text 不为单个字符时 multiple 不生效
pinyin('好学', { multiple: true } as CompleteOptions); // hào xué

姓氏模式

设置 options.surnamehead(只识别字符串开头的姓氏字符) 或者 all(识别字符串全部的姓氏字符) 可以开启姓氏模式:

js
import { pinyin, type CompleteOptions } from '@/uni_modules/lime-pinyin'

// 不开启姓氏模式
pinyin('我叫曾乐乐'); // 'wǒ jiào céng lè lè'

// 开启 head 姓氏模式
pinyin('我叫曾乐乐', { surname: 'head' } as CompleteOptions); // 'wǒ jiào zēng lè lè'

// 开启 all 姓氏模式(会将"乐"也识别为乐毅的yuè姓氏)
pinyin('我叫曾乐乐', { surname: 'all' } as CompleteOptions); // 'wǒ jiào zēng yuè yuè'

自定义词汇

插件内置了一些高频常用词的词典,想要保证高准确率,需要应用更完备的词典,可以通过 addDict 添加词典。

可以使用pinyin-pro官方提供的词典,但是数据包比较大,不建议直接放在项目里加载,特别是UniAppX App端会直接崩溃。

shell
npm install @pinyin-pro/data
yarn add @pinyin-pro/data
pnpm add @pinyin-pro/data
js
import { addDict } from '@/uni_modules/lime-pinyin'

// 非App端
import CharsDict from '@pinyin-pro/data/chars'; // 僻字字典
import CompleteDict from '@pinyin-pro/data/complete'; // 中文分词库词语拼音合集
import ModernDict from '@pinyin-pro/data/modern'; // 《现代汉语词典(第 7 版)》词语拼音合集
addDict(json)

// UniAppX App端 - 把词汇复制到static目录,或放在服务器下载到本地再加载
const manager = uni.getFileSystemManager();
manager.readFile({
  filePath: 'static/modern.json',
  encoding: 'utf-8',
  success: (res) => {
    const obj = JSON.parse<UTSJSONObject>(res.data as string)
    if(obj == null) return
    addDict(obj)
  },
} as ReadFileOptions);

快速预览

导入插件后,可以直接使用以下标签查看演示效果:

html
<!-- 代码位于 uni_modules/lime-pinyin/components/lime-pinyin -->
<lime-pinyin />

插件标签说明

标签名说明
l-pinyin组件标签
lime-pinyin演示标签

API文档

pinyin 函数参数

参数说明类型默认值
text要转换的中文文本string-
options转换选项CompleteOptions{}

CompleteOptions 选项

属性名说明类型默认值
pattern拼音输出模式string'pinyin'
toneType音调输出类型'symbol' | 'num' | 'none''symbol'
type返回结果类型'string' | 'array' | 'all''string'
multiple是否输出多音字的所有拼音booleanfalse
surname姓氏模式'head' | 'all' | nullnull

pattern 可选值

说明
pinyin完整拼音
initial声母
final韵母
finalHead韵头(介音)
finalBody韵腹
finalTail韵尾
first首字母
num音调数字

toneType 可选值

说明
symbol带音调符号,如 "hàn"
num数字音调,如 "han4"
none不带音调,如 "han"

type 可选值

说明
string返回字符串,如 "hàn yǔ"
array返回数组,如 ["hàn", "yǔ"]
all返回包含完整拼音信息的数组

addDict 函数参数

参数说明类型
dict要添加的词典对象object

功能特点

  • 支持多种拼音输出格式(带音调、不带音调、数字音调)
  • 支持声母、韵母、韵头、韵腹、韵尾等细粒度拼音组成部分的获取
  • 支持多音字处理
  • 支持姓氏模式,优先识别百家姓
  • 支持自定义词典,提高转换准确率
  • 轻量高效,全端通用

常见问题

  • App端需要自定义基座才能使用
  • 大型词典可能会占用较多内存,建议按需加载
  • 多音字在非单字模式下默认只返回一个音,如需获取所有读音,请使用单字 + multiple 模式
  • 姓氏模式可能会导致某些词语的拼音不符合常规读音,请根据实际需求选择是否启用

感谢

本插件基于 pinyin-pro 实现,感谢原作者的贡献。

支持与赞赏

如果你觉得本插件解决了你的问题,可以考虑支持作者:

支付宝赞助微信赞助

源代码

组件源码