Node.js漢字轉(zhuǎn)拼音pinyin-pro的具體使用
pinyin-pro 工具庫簡介
- 核心功能:漢字轉(zhuǎn)拼音、多音字處理、音調(diào)控制、格式定制等
- 性能特點:高效、輕量級、支持多種拼音風(fēng)格
- 應(yīng)用場景:搜索優(yōu)化、數(shù)據(jù)排序、中文輸入法等
環(huán)境準(zhǔn)備與安裝
- Node.js
- npm 或 yarn 安裝 pinyin-pro
npm install pinyin-pro
基礎(chǔ)使用示例
以下代碼示例展示如何通過 pinyin-pro 庫實現(xiàn)多種拼音轉(zhuǎn)換功能:
const { pinyin } = require("pinyin-pro");
// 獲取帶音調(diào)拼音
console.log(pinyin("你好世界")); //nǐ hǎo shì jiè
// 獲取不帶音調(diào)拼音(toneType默認(rèn)為symbol)
console.log(pinyin("你好世界", { toneType: "none" })); //ni hao shi jie
// 拼音轉(zhuǎn)為數(shù)字后綴
console.log(pinyin("你好世界", { toneType: "num" })); //ni3 hao3 shi4 jie4
// 獲取拼音數(shù)組(type默認(rèn)為string)
console.log(pinyin("你好世界", { type: "array" })); //[ 'nǐ', 'hǎo', 'shì', 'jiè' ]
// 獲取不帶音調(diào)拼音數(shù)組
console.log(pinyin("你好世界",
{
toneType: "none",
type: "array"
}
)); //[ 'ni', 'hao', 'shi', 'jie' ]
// 獲取數(shù)字后綴拼音數(shù)組
console.log(pinyin("你好世界", {
toneType: "num",
type: "array"
})); //[ 'ni3', 'hao3', 'shi4', 'jie4' ]
參數(shù)說明
toneType
"symbol": 默認(rèn)值,輸出帶聲調(diào)符號的拼音(如nǐ hǎo shì jiè)"none": 輸出無聲調(diào)拼音(如ni hao shi jie)"num": 輸出數(shù)字后綴形式(如ni3 hao3 shi4 jie4)
type
"string": 默認(rèn)值,返回拼接后的字符串"array": 返回分段拼音數(shù)組(如["nǐ", "hǎo", "shì", "jiè"])"all": 返回拼音完整內(nèi)容
聲母與韻母
// 獲取聲母
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("關(guān)刀", { pattern: "finalBody", type: "array" }));
//輸出:[ 'ā', 'ā' ]
// 獲取韻尾
console.log(pinyin("大關(guān)刀", { pattern: "finalTail", type: "array" }));
//輸出:[ '', 'n', 'o' ]
// 獲取音調(diào)
console.log(pinyin("漢語拼音", { pattern: "num", type: "array" }));
//輸出:[ '4', '3', '1', '1' ]
// 獲取拼音首字母
console.log(pinyin("漢語拼音", { pattern: "first", type: "array" }));
//輸出:[ 'h', 'y', 'p', 'y' ]
功能說明
- 聲母:提取每個漢字拼音的起始輔音部分。
- 韻母:提取每個漢字拼音的元音及后續(xù)部分。
- 韻頭、韻腹、韻尾:分別拆分韻母的結(jié)構(gòu),適用于需要分析拼音細(xì)節(jié)的場景。
- 音調(diào):以數(shù)字形式返回拼音的聲調(diào)(如
4表示第四聲)。 - 拼音首字母:返回每個漢字拼音的首字母(大寫形式)。
通過調(diào)整 pattern 和 type 參數(shù),可以靈活控制輸出格式(字符串或數(shù)組)。
完整拼音
// 獲取拼音完整內(nèi)容
console.log(pinyin("漢語拼音", { type: "all" }));輸出結(jié)果:
[
{
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'
}
]結(jié)果參數(shù)說明(以“你”為例):
- origin: 漢字本體為“你”
- pinyin: 標(biāo)準(zhǔn)拼音為“nǐ”
- initial: 聲母為“n”
- final: 韻母為“ǐ”(單韻母結(jié)構(gòu))
- 音節(jié)拆分:
- first: 首字母“n”
- finalHead: 韻頭為空
- finalBody: 韻腹為“ǐ”
- finalTail: 韻尾為空
- 其他屬性:
- num: 音調(diào)為第三聲
- isZh: 屬于中文字符
- polyphonic: 無雙音,僅“nǐ”一個讀音
- inZhRange: 在漢字Unicode范圍內(nèi)
- 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è
代碼說明
- 默認(rèn)模式:僅自動識別首個字符作為文字(如“曾”讀 céng)。
head模式:明確指定首個字符按姓氏處理(與默認(rèn)行為相同,但顯式聲明意圖)。all模式:強(qiáng)制將所有可能的姓氏字符按多音字處理(如“樂樂”中的“樂”讀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ī
參數(shù)說明
nonZh 參數(shù)控制非中文字符的處理方式:
- 默認(rèn)行為:將每個非中文字符拆分為單獨(dú)的元素
"removed":完全移除所有非中文字符"consecutive":將連續(xù)的非中文字符合并為一個元素
拼音 ü 替換為 v
console.log(pinyin("呂布"));
//輸出 lǚ bù
console.log(pinyin("呂布", { toneType: "none", v: true }));
//輸出 lv bu
// 帶音調(diào)的 ǖ,ǘ,ǚ,ǜ 不轉(zhuǎn)換
console.log(pinyin("呂布", { v: true }));
// lǚ bù
console.log(pinyin("呂布", { type: "num", v: true }));
//官方文檔顯示 lv3 bu4
//實際輸出 lǚ bù
參數(shù)說明
toneType: "none"參數(shù)會移除拼音中的音調(diào)標(biāo)記v: true參數(shù)將拼音中的ü替換為vtype: "num"參數(shù)會以數(shù)字形式標(biāo)注音調(diào)位置
分詞
const { segment, addDict, OutputFormat } = require("pinyin-pro");
//完整詞典
const CompleteDict = require("@pinyin-pro/data/complete");
//現(xiàn)代漢語詞典
const ModernChineseDict = require("@pinyin-pro/data/modern");
addDict(CompleteDict); //這里使用完整詞典
let res1 = segment("小明碩士畢業(yè)于中國科學(xué)院計算所,后在日本京都大學(xué)深造");
res1 是默認(rèn)輸出格式的結(jié)果,通常為分詞后的數(shù)組形式,結(jié)果如下:
[
{ origin: '小', result: 'xiǎo' },
{ origin: '明', result: 'míng' },
{ origin: '碩士', result: 'shuòshì' },
{ origin: '畢業(yè)', result: 'bìyè' },
{ origin: '于', result: 'yú' },
{ origin: '中國科學(xué)院', result: 'zhōngguókēxuéyuàn' },
{ origin: '計算所', result: 'jìsuànsuǒ' },
{ origin: ',', result: ',' },
{ origin: '后', result: 'hòu' },
{ origin: '在', result: 'zài' },
{ origin: '日本京都大學(xué)', result: 'rìběnjīngdūdàxué' },
{ origin: '深造', result: 'shēnzào' }
]分詞的不同返回格式
let res2 = segment("小明碩士畢業(yè)于中國科學(xué)院計算所,后在日本京都大學(xué)深造", {
format: OutputFormat.AllSegment,
});
format:
- OutputFormat.AllSegment:使用
AllSegment格式,輸出所有可能的分詞組合,通常用于語言學(xué)研究或需要全面分析的場景。 - OutputFormat.
AllArray:將分詞結(jié)果以數(shù)組形式返回 - OutputFormat.
AllString:將分詞結(jié)果以字符串形式返回 - OutputFormat.
PinyinSegment:輸出分詞后的拼音組合 - OutputFormat.
PinyinArray:將拼音結(jié)果以數(shù)組形式返回 - OutputFormat.
PinyinString:將拼音結(jié)果以字符串形式返回 - OutputFormat.
ZhSegment:輸出分詞后的中文組合 - OutputFormat.
ZhArray:將中文分詞結(jié)果以數(shù)組形式返回 - OutputFormat.
ZhString:中文分詞結(jié)果以字符串形式返回
let res = segment("小明碩士畢業(yè)于中國科學(xué)院計算所,后在日本京都大學(xué)深造", {
format: OutputFormat.AllString,
separator: "-",
});
使用自定義分隔符 -,將分詞結(jié)果以字符串形式返回,適合需要特定分隔符的場景。
拼音漢字匹配
若拼音和文本匹配,返回匹配的文本下標(biāo):
import { match } from 'pinyin-pro';
match('漢語拼音', 'hanyupinyin'); // [0, 1, 2, 3]使用 continuous 屬性指定匹配的漢字下標(biāo)是否為連續(xù)的才算匹配成功(默認(rèn)值為 false,即不需要為連續(xù)的匹配):
import { match } from 'pinyin-pro';
match('漢語拼音', 'hanpin'); // [0, 2]
match('漢語拼音', 'hanpin', { continuous: true }); // null使用 precision 屬性可以控制漢字和拼音匹配的精度:
import { match } from 'pinyin-pro';
// 默認(rèn)首字母匹配算匹配成功
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';
// 默認(rèn)不參與匹配
match('漢語拼音', 'han yupinyin'); // [0, 1, 2, 3]
match('漢語拼音', 'han yupinyin', { space: 'preserve' }); // null使用 lastPrecision 屬性可以控制最后一個漢字和拼音匹配的精度。默認(rèn)情況下,precision 為 any 時,lastPrecision 為 any; 否則 lastPrecision 為 start。
import { match } from 'pinyin-pro';
// 默認(rèn)情況下
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字符串
在瀏覽器中的預(yù)覽效果如下:

當(dāng)設(shè)置 toneType 屬性的值為 none 時,返回值中的拼音是不帶音調(diào)的。
import { html } from 'pinyin-pro';
const htmlString = html('漢語拼音', { toneType: 'none' });
在瀏覽器中的預(yù)覽效果如下:

可以通過 html api 返回值中的類名來控制具體的樣式,如下面的例子中,我們讓漢字部分為藍(lán)色,拼音部分為紅色。
// js
import { html } from 'pinyin-pro';
const htmlString = html('漢語拼音');/* css */
.py-chinese-item {
color: blue;
}
.py-pinyin-item {
color: red;
}在瀏覽器中的預(yù)覽效果:

到此這篇關(guān)于Node.js漢字轉(zhuǎn)拼音pinyin-pro的具體使用的文章就介紹到這了,更多相關(guān)Node.js漢字轉(zhuǎn)拼音pinyin-pro內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫及頁面數(shù)據(jù)傳遞操作實例分析
這篇文章主要介紹了Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫及頁面數(shù)據(jù)傳遞操作,結(jié)合實例形式分析了node.js查詢MongoDB數(shù)據(jù)庫及vue前臺頁面渲染等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
淺談Node新版本13.2.0正式支持ES Modules特性
這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
nodejs+mongodb aggregate級聯(lián)查詢操作示例
這篇文章主要介紹了nodejs+mongodb aggregate級聯(lián)查詢操作,結(jié)合實例形式分析了基于nodejs的mongodb數(shù)據(jù)庫級聯(lián)查詢相關(guān)操作技巧,需要的朋友可以參考下2018-03-03

