Node.js漢字轉拼音指南:pinyin-pro全解析

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;開發者平…