pinyin-pro 工具库简介

  • 核心功能:汉字转拼音、多音字处理、音调控制、格式定制等
  • 性能特点:高效、轻量级、支持多种拼音风格
  • 应用场景:搜索优化、数据排序、中文输入法等

环境准备与安装

  • Node.js 
  • npm 或 yarn 安装 pinyin-pro
npm install pinyin-pro

基础使用示例

以下代码示例展示如何通过 pinyin-pro 库实现多种拼音转换功能:

const { pinyin } = require("pinyin-pro");// 获取带音调拼音
console.log(pinyin("你好世界"));  //nǐ hǎo shì jiè// 获取不带音调拼音(toneType默认为symbol)
console.log(pinyin("你好世界", { toneType: "none" }));  //ni hao shi jie// 拼音转为数字后缀
console.log(pinyin("你好世界", { toneType: "num" }));  //ni3 hao3 shi4 jie4// 获取拼音数组(type默认为string)
console.log(pinyin("你好世界", { type: "array" }));  //[ 'nǐ', 'hǎo', 'shì', 'jiè' ]  // 获取不带音调拼音数组
console.log(pinyin("你好世界", { toneType: "none", type: "array" }
));       //[ 'ni', 'hao', 'shi', 'jie' ] // 获取数字后缀拼音数组
console.log(pinyin("你好世界", { toneType: "num", type: "array" 
}));     //[ 'ni3', 'hao3', 'shi4', 'jie4' ]

参数说明

  • toneType

    • "symbol": 默认值,输出带声调符号的拼音(如 nǐ hǎo shì jiè
    • "none": 输出无声调拼音(如 ni hao shi jie
    • "num": 输出数字后缀形式(如 ni3 hao3 shi4 jie4
  • type

    • "string": 默认值,返回拼接后的字符串
    • "array": 返回分段拼音数组(如 ["nǐ", "hǎo", "shì", "jiè"]
    • "all": 返回拼音完整内容

声母与韵母

// 获取声母
console.log(pinyin("你好世界", { pattern: "initial" }));
//输出:n h sh j// 获取韵母
console.log(pinyin("你好世界", { pattern: "final" }));
//输出:ǐ ǎo ì iè// 获取韵头
console.log(pinyin("光瓜", { pattern: "finalHead", type: "array" }));
//输出:[ 'u', 'u' ]// 获取韵腹
console.log(pinyin("关刀", { pattern: "finalBody", type: "array" }));
//输出:[ 'ā', 'ā' ]// 获取韵尾
console.log(pinyin("大关刀", { pattern: "finalTail", type: "array" }));
//输出:[ '', 'n', 'o' ]// 获取音调
console.log(pinyin("汉语拼音", { pattern: "num", type: "array" }));
//输出:[ '4', '3', '1', '1' ]// 获取拼音首字母
console.log(pinyin("汉语拼音", { pattern: "first", type: "array" }));
//输出:[ 'h', 'y', 'p', 'y' ]

功能说明

  • 声母:提取每个汉字拼音的起始辅音部分。
  • 韵母:提取每个汉字拼音的元音及后续部分。
  • 韵头、韵腹、韵尾:分别拆分韵母的结构,适用于需要分析拼音细节的场景。
  • 音调:以数字形式返回拼音的声调(如 4 表示第四声)。
  • 拼音首字母:返回每个汉字拼音的首字母(大写形式)。

通过调整 patterntype 参数,可以灵活控制输出格式(字符串或数组)。

完整拼音

// 获取拼音完整内容
console.log(pinyin("汉语拼音", { type: "all" }));

输出结果:

[{origin: '你',pinyin: 'nǐ',initial: 'n',final: 'ǐ',first: 'n',finalHead: '',finalBody: 'ǐ',finalTail: '',num: 3,isZh: true,polyphonic: [ 'nǐ' ],inZhRange: true,result: 'nǐ'},{origin: '好',pinyin: 'hǎo',initial: 'h',final: 'ǎo',first: 'h',finalHead: '',finalBody: 'ǎ',finalTail: 'o',num: 3,isZh: true,polyphonic: [ 'hǎo', 'hào' ],inZhRange: true,result: 'hǎo'}
]

结果参数说明(以“你”为例):

  • origin: 汉字本体为“你”
  • pinyin: 标准拼音为“nǐ”
  • initial: 声母为“n”
  • final: 韵母为“ǐ”(单韵母结构)
  • 音节拆分:
    • first: 首字母“n”
    • finalHead: 韵头为空
    • finalBody: 韵腹为“ǐ”
    • finalTail: 韵尾为空
  • 其他属性:
    • num: 音调为第三声
    • isZh: 属于中文字符
    • polyphonic: 无双音,仅“nǐ”一个读音
    • inZhRange: 在汉字Unicode范围内
    • result: 最终输出拼音“nǐ”

姓名模式

console.log(pinyin("曾乐乐"));
//输出:céng lè lè// 姓氏模式
console.log(pinyin("曾乐乐", { surname: "head" }));
//输出:zēng lè lè// 开启 all 姓氏模式(会将“乐”也识别为乐毅的yuè姓氏)
console.log(pinyin("曾乐乐", { surname: "all" }));
//输出:zēng yuè yuè

代码说明

  • 默认模式:仅自动识别首个字符作为文字(如“曾”读 céng)。
  • head 模式:明确指定首个字符按姓氏处理(与默认行为相同,但显式声明意图)。
  • all 模式:强制将所有可能的姓氏字符按多音字处理(如“乐乐”中的“乐”读 yuè)。

非汉字字符处理

console.log(pinyin("我very喜欢吃"));
// 输出: wǒ v e r y xǐ huan chīconsole.log(pinyin("我very喜欢吃", { nonZh: "removed" }));
// 输出: wǒ xǐ huan chīconsole.log(pinyin("我very喜欢吃", { nonZh: "consecutive" }));
// 输出: wǒ very xǐ huan chī

参数说明

nonZh 参数控制非中文字符的处理方式:

  • 默认行为:将每个非中文字符拆分为单独的元素
  • "removed":完全移除所有非中文字符
  • "consecutive":将连续的非中文字符合并为一个元素

拼音 ü 替换为 v

console.log(pinyin("吕布"));
//输出 lǚ bùconsole.log(pinyin("吕布", { toneType: "none", v: true })); 
//输出 lv bu// 带音调的 ǖ,ǘ,ǚ,ǜ 不转换
console.log(pinyin("吕布", { v: true })); 
// lǚ bùconsole.log(pinyin("吕布", { type: "num", v: true })); 
//官方文档显示 lv3 bu4
//实际输出 lǚ bù

参数说明

  • toneType: "none" 参数会移除拼音中的音调标记
  • v: true 参数将拼音中的 ü 替换为 v
  • type: "num" 参数会以数字形式标注音调位置

分词

const { segment, addDict, OutputFormat } = require("pinyin-pro");
//完整词典
const CompleteDict = require("@pinyin-pro/data/complete");
//现代汉语词典
const ModernChineseDict = require("@pinyin-pro/data/modern");addDict(CompleteDict); //这里使用完整词典let res1 = segment("小明硕士毕业于中国科学院计算所,后在日本京都大学深造");

res1 是默认输出格式的结果,通常为分词后的数组形式,结果如下:

[{ origin: '小', result: 'xiǎo' },{ origin: '明', result: 'míng' },{ origin: '硕士', result: 'shuòshì' },{ origin: '毕业', result: 'bìyè' },{ origin: '于', result: 'yú' },{ origin: '中国科学院', result: 'zhōngguókēxuéyuàn' },{ origin: '计算所', result: 'jìsuànsuǒ' },{ origin: ',', result: ',' },{ origin: '后', result: 'hòu' },{ origin: '在', result: 'zài' },{ origin: '日本京都大学', result: 'rìběnjīngdūdàxué' },{ origin: '深造', result: 'shēnzào' }
]

分词的不同返回格式

let res2 = segment("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", {format: OutputFormat.AllSegment,
});

format:

  • OutputFormat.AllSegment使用 AllSegment 格式,输出所有可能的分词组合,通常用于语言学研究或需要全面分析的场景。
  • OutputFormat.AllArray将分词结果以数组形式返回
  • OutputFormat.AllString将分词结果以字符串形式返回
  • OutputFormat.PinyinSegment输出分词后的拼音组合
  • OutputFormat.PinyinArray:将拼音结果以数组形式返回
  • OutputFormat.PinyinString:将拼音结果以字符串形式返回
  • OutputFormat.ZhSegment:输出分词后的中文组合
  • OutputFormat.ZhArray:将中文分词结果以数组形式返回
  • OutputFormat.ZhString:中文分词结果以字符串形式返回
let res = segment("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", {format: OutputFormat.AllString,separator: "-",
});

使用自定义分隔符 -,将分词结果以字符串形式返回,适合需要特定分隔符的场景。

拼音汉字匹配

若拼音和文本匹配,返回匹配的文本下标:

import { match } from 'pinyin-pro';match('汉语拼音', 'hanyupinyin'); // [0, 1, 2, 3]

使用 continuous 属性指定匹配的汉字下标是否为连续的才算匹配成功(默认值为 false,即不需要为连续的匹配):

import { match } from 'pinyin-pro';match('汉语拼音', 'hanpin'); // [0, 2]match('汉语拼音', 'hanpin', { continuous: true }); // null

使用 precision 属性可以控制汉字和拼音匹配的精度:

import { match } from 'pinyin-pro';// 默认首字母匹配算匹配成功
match('中文拼音', 'zwpy'); // [0, 1, 2, 3]// every 需要每一个字符都匹配成功
match('中文拼音', 'zwpy', { precision: 'every' }); // null
match('中文拼音', 'zhongwenpinyin', { precision: 'every' }); // [0, 1, 2, 3]// start 只要开头任意个字母匹配就算匹配成功
match('中文拼音', 'zhwpy', { precision: 'start' }); // [0, 1, 2, 3]
match('中文拼音', 'zhwpy'); // null// any 任意有一个字母匹配就算匹配成功
match('中文拼音', 'ongwpy', { precision: 'any' }); // [0, 1, 2, 3]
match('中文拼音', 'ongwpy'); // null

使用 space 属性控制匹配时空格是否不参与匹配:

import { match } from 'pinyin-pro';// 默认不参与匹配
match('汉语拼音', 'han yupinyin'); // [0, 1, 2, 3]match('汉语拼音', 'han yupinyin', { space: 'preserve' }); // null

使用 lastPrecision 属性可以控制最后一个汉字和拼音匹配的精度。默认情况下,precision 为 any 时,lastPrecision 为 any; 否则 lastPrecision 为 start

import { match } from 'pinyin-pro';// 默认情况下
match('汉语拼音', 'hanyupiny'); // [1, 2, 3, 4]// 显式控制 lastPrecision
match('汉语拼音', 'hanyupiny', { lastPrecision: 'every' }); // null

对于多音字,只要其中一个读音匹配上即算匹配成功:

import { match } from 'pinyin-pro';match('会计', 'kuaiji'); // [0, 1]
match('会计', 'huiji'); // [0, 1]

通过指定 v 选项来使用 v 来匹配 ü:v3.25.0+

import { match } from 'pinyin-pro';match('吕布', 'lvbu'); // [0, 1]

HTML字符串

import { html } from 'pinyin-pro';const htmlString = html('汉语拼音');
//输出html字符串

在浏览器中的预览效果如下:

当设置 toneType 属性的值为 none 时,返回值中的拼音是不带音调的。

import { html } from 'pinyin-pro';const htmlString = html('汉语拼音', { toneType: 'none' });

在浏览器中的预览效果如下:

可以通过 html api 返回值中的类名来控制具体的样式,如下面的例子中,我们让汉字部分为蓝色,拼音部分为红色。

// js
import { html } from 'pinyin-pro';const htmlString = html('汉语拼音');
/* css */
.py-chinese-item {color: blue;
}
.py-pinyin-item {color: red;
}

在浏览器中的预览效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95366.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95366.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95366.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UART-TCP双向桥接服务

UART-TCP双向桥接服务是一种将串口(UART)通信与TCP/IP网络通信相互转换的技术服务,其核心功能是实现两种不同协议之间的数据透明传输。1. 基本概念UART(串口):硬件设备的传统通信接口,常见于嵌入…

江协科技STM32学习笔记补充之001。为什么C语言在对STM32编程过程中的二进制要用十六进制来进行读写。而不能直接用二进制来进行读写。

下面给你一个“为什么嵌入式 C(如 STM32)普遍用十六进制而不是二进制来读写寄存器/地址”的系统性分析。核心观点:十六进制是对底层位模式更高效、更可靠的“人类可读编码”,与硬件资料、编译器和调试器生态形成了标准化协同。1&a…

从 “对话” 到 “共创”:生成式 AI 如何重塑内容创作全流程,普通人也能掌握的高效工具指南

一、引言:内容创作的 “AI 范式转移”—— 从单向输出到双向共创​传统内容创作痛点:灵感枯竭、流程繁琐(选题 - 调研 - 初稿 - 修改 - 定稿耗时久)、专业门槛高(如设计需掌握 PS、写作需深厚文字功底)​生…

函数、数组与 grep + 正则表达式的 Linux Shell 编程进阶指南

文章目录1.函数相关2.数组相关3.正则表达式与grep根据你提供的内容,我整理了一份关于Shell脚本中函数、数组和正则表达式的简明参考: 1.函数相关 函数调用: 直接使用函数名调用:函数名 参数传递: 函数内接收参数&…

nginx-realip问题解决方案

nginx-realip问题解决方案一、配置真实ip解析二、日志中记录真实 IP三、在日志中验证一、配置真实ip解析 让backend server知道前端是谁来访问的,知道他们的ip地址 LB在转发数据包的时候,在http请求报文里增加一个字段,携带user的ip地址&am…

Kafka入门指南:从安装到集群部署

一、Kafka 基础与系统要求 1.1 核心概念 Broker:Kafka 服务器节点,负责存储消息和处理客户端请求 Topic:消息分类的逻辑容器,每条消息需指定发送到某个 Topic Partition:Topic 的物理分片,可分布式存储…

20250828在荣品RD-RK3588-MID开发板的Android13系统下适配Bainianxing的GPS模块BU-16M10

20250828在荣品RD-RK3588-MID开发板的Android13系统下适配Bainianxing的GPS模块BU-16M10 2025/8/29 9:50荣品RD-RK3588-MID开发板。适配GPS 38400bps 需要配置波特率吗?一般是 9600这边使用的泰斗 你要适配新的gps模块?规格书:Baud rate 3840…

对部分国家(地区)出口商品类章金额数据库

一、数据库简介【艾思产研数据平台】对部分国家(地区)出口商品类章金额数据库,收录了2015年02月 - 2025年5月的信息,共计49万余条数据,整理出7个常用字段内容。更新频率为月更。字段内容年月、类章、国家、国家id、所属分类、月出口商品类章金…

STM32——中断

总:STM32——学习总纲 一、什么是中断 1.1 作用与意义 1.2 STM32 GPIO 外部中断简图 二、NVIC 2.1 NVIC 基本概念 Nested vectored interrupt controller,嵌套向量中断控制器,属于内核(M3、M4、M7) 用不到很多的优先…

DVWA靶场通关笔记-Weak Session IDs (Impossible级别)

目录 一、Session ID 二、源码分析 1、index.php 2、impossible.php 三、Weak Session IDs安全级别对比 四、impossible防范方法分析 1、高随机性会话 ID 生成 2、严格的 Cookie 作用域限制 3、安全的传输与存储控制期 本系列为通过《DVWA靶场通关笔记》的Weak Sessio…

SyncBack 备份同步软件: 使用 FTPS、SFTP 和 HTTPS 安全加密传输文件

传输加密是使用安全连接在网络中传输数据(例如文件)的过程。TLS(传输层安全)、SSL(安全套接字层)、SSH(安全套接字外壳)、HTTPS(基于 SSL/TLS 的超文本传输协议&#xff…

保健品跨境电商:如何筑牢产品质量与安全防线?

保健品跨境电商:如何筑牢产品质量与安全防线?在保健品跨境电商领域,“质量与安全”是消费者信任的基石,也是品牌长期发展的生命线。从海外工厂生产到国内消费者手中,产品需经历“跨国运输、清关核验、仓储配送”多环节…

手把手教你搭建 UDP 多人聊天室(附完整源码)

一、项目介绍 本文将分享一个基于 UDP 协议的简易多人聊天室项目,包含服务器端和客户端的完整实现。该聊天室支持多客户端同时连接,能实现消息群发、用户加入 / 退出通知等核心功能,适合作为网络编程入门实践案例。项目采用 C 语言开发…

Vue基础知识-使用监视属性watch和计算属性computed实现列表过滤+排序

一、完整源码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src…

自动化运维-ansible中的管理机密

自动化运维-ansible中的管理机密 一、Ansible Vault 在自动化配置管理中&#xff0c;直接以纯文本形式存储密码、API密钥、证书等敏感信息是极大的安全漏洞。Ansible Vault 正是为了解决这一问题而设计的核心功能 Ansible Vault 是 Ansible 的一个核心功能&#xff0c;它允许用…

UFUNCTION C++ 的再次理解

一.UFUNCTION 格式和属性也比较像&#xff0c;两部分 函数说明符&#xff0c;和元数据说明符UFUNCTION不仅能 控制对蓝图公开&#xff0c;还能与 绑定委托&#xff0c;用户输入,网络回调功能相关联&#xff0c;而且还能创建自己控制带命令二.函数说明符控制 &#xff0c;函数在…

《论文阅读》从心到词:通过综合比喻语言和语义上下文信号产生同理心反应 2025 ACL findings

《论文阅读》从心到词:通过综合比喻语言和语义上下文信号产生同理心反应 2025 ACL findings 前言 创新点 形象语言 (Figurative Language) 语义上下文信号(Semantic Context Signals) 模型架构 情绪原因标注 形象语言元数据获取 共情回复生成 实验结果 总结 趋势 前言 亲…

MySQL内置的各种单行函数

精选专栏链接 &#x1f517; MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅&#xff0c;点赞&#xff0b;关注&#xff0c;每日精进1%&#xff0c;与百万开发者共攀技术珠峰 更多内容持续更新中&#xff01;希望能给大家带来…

Python OpenCV图像处理与深度学习:Python OpenCV视频处理入门

视频处理基础&#xff1a;掌握OpenCV视频操作 学习目标 通过本课程&#xff0c;学员们将学习如何使用Python和OpenCV库来处理视频文件&#xff0c;包括读取视频、捕获摄像头视频流、处理视频帧以及保存处理后的视频&#xff0c;同时&#xff0c;能够独立完成基本的视频处理任务…

AI 赋能 Java 开发效率:全流程痛点解决与实践案例(四)

文档与注释自动化&#xff1a;从 “手动撰写” 到 “实时同步”&#xff0c;降低维护成本 &#x1f4c4; Java 开发强调 “文档先行”&#xff0c;Javadoc 注释、架构文档、接口文档是项目维护的重要资产。但手动撰写文档存在两大痛点&#xff1a;一是耗时&#xff08;开发者平…