Giter Site home page Giter Site logo

pinyin's Introduction

tiny-pinyin Build Status npm version FOSSA Status

English Doc

Build Status

轻量的 汉字转拼音 JavaScript库。可以轻松获取汉字的拼音。有以下特性:

  1. 300行左右代码,内置一个很小的字典。
  2. 可以轻松处理 6763 个的常用汉字,其它汉字未测试,但应该有相当正确率,欢迎测试。
  3. 同时支持 node.js (4-latest) 和 浏览器 (safari/chrome/firefox/android 6+/ios)

注意:不支持多音字;ie/edge 测试未通过。

安装和使用

NPM

使用(浏览器端使用可通过webpack等打包,或直接引入demo中已打包好的JS):

// test.js
const pinyin = require('tiny-pinyin')

if (pinyin.isSupported()) {
  pinyin.convertToPinyin('我') // WO
}

注意在浏览器中使用时页面的charset 必须为utf-8 ,见issue#21

一般情况下,我们的node.js只支持英文,所以,我们需要让node.js支持中文(zh-Hans-CN),即pinyin.isSupported()true

npm i --save full-icu

通过安装full-icu,我们可以安装缺失的ICU数据文件,使node.js支持中文。通过node --icu-data-dir=node_modules/full-icu test.js即可使node.js支持全语言,正确把汉字转为拼音。

更多相关信息可以参考 full-icu-npm,或者 Node Intl

Important: node 13+ support full icu by default

node 13 开始,node 默认开始完整的ICU支持,意味着我们不必再安装 full-icu

详情看https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V13.md#notable-changes-16

Demo

Demo

可点击上面的图片体验线上版本

API

已通过 c6b3ba9@zhanba 支持 typescript typings。

1. pinyin.isSupported([forceRedetect])

  • forceRedetectbool类型,是否强制重新检测。

测试环境是否支持Intl.Collator以及zh-CN。本库所有功能依赖此支持。默认只检测一次,可以置forceRedetecttrue强制重新检测。

2. pinyin.parse(string)

  • string,待转成拼音的字符串。

返回指定字符串转成的token数组。典型的token格式如下:

{
  type: Number, // 1-拉丁, 2-拼音, 3-未知
  source: String, // 源字符
  target: String // 目标字符
}

请注意,当字符串为:

  1. 拉丁字母,即ascii码0-255,不处理,原样输出,即source/target一致,type1
  2. 中文,即unicode \u4e00-\u9FFF ,转成拼音,type2
  3. 其它,即以上两者以外的字符,不处理,原样输出,type3

3. pinyin.convertToPinyin(string[, separator[, lowerCase]])

  • string,待转成拼音的字符串。
  • separator,拼音的分隔符,默认''。比如设置-,则我们转成WO-MEN
  • lowerCase,转成的拼音是否小写,默认false。仅对中文转成的拼音起效(对拉丁文字和其它文字无效)。

返回指定字符串转成的拼音字符串。

pinyin.convertToPinyin('我们和他们', '-', true) // wo-men-he-ta-men

4. pinyin.patchDict(fn|[fn])

  • fnfunction类型,接受参数为当前使用的字典对象DICT,可以修改DICT.UNIHANS/DICT.PINYINS/DICT.EXCEPTIONS来修改字典。另外,fn可以是数组,数组的每个元素为函数类型。

其中:DICT.UNIHANS/DICT.PINYINS两者相对应,记录边界汉字和其对应拼音。DICT.EXCEPTIONS例外 字典,为汉字-拼音的键值对,拥有更高优先级。

致谢

感谢博客利用Android源码,轻松实现汉字转拼音功能,由这篇博客才知道Android库的相关代码和汉字转拼音的原理。

非常感谢 Android Contacts Source Code。本库由它启发,可以算作Java到JavaScript的一次转译。

License

FOSSA Status

pinyin's People

Contributors

creeperyang avatar fffx avatar zhanba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pinyin's Issues

Support IE11+ ?

IE11 开始支持了 Intl, 理论上应该是可以让本库支持 IE11+ 的。

不过 IE11 看起来错误很多,和其它版本差异很大:比如\u9fff在所有汉字的排序中排在第一位。

How to use inside browser?

2017-05-12 2 37 33

See https://creeperyang.github.io/pinyin/, this is an online demo.

The simplest way is include <script src="https://creeperyang.github.io/pinyin/browser.js"></script> and write your business code:

$dom.textContent = Pinyin.convertToPinyin('汉字', null, true)

The browser.js is umd lib.


Of course we can install with npm and use webpack to bundle our app.

"浮" 显示 fou

谢谢你的项目!
"浮" 显示 fou,应该是 fu

可能还有不少小错误,希望能全面测试一下

彻底修复汉字转拼音错误的一个想法

本库希望可以已非常小的 内置边界字典,借助Intl API来完成汉字转拼音。如果错误过多或这 内置边界字典 越来越大越复杂,那么本库就失去了最初的意义。(不如内置巨大的 汉字-拼音 字典)。

但是,Intl API从测试来看是不可控 的(汉字在不同系统的排序不一致),或者说,ICU 在不同系统/浏览器的不一致性。所以在修复了在 safari 的版本后,我比较犹豫是不是还要继续修复,这个库是不是还有必要维护——是不是当成 Intl API 的某种使用展示 算了。


不过在测试 node 4 时,一个偶然发现非常令人振奋:

node 4 上所有汉字的排序 和 safari 10+ 的汉字排序一致! 我们似乎可以得到这样一个结论:

  1. 因为node 4node 6/7的 ICU 数据文件不一致,所以汉字排序不一致。
  2. safari 10+node 4 汉字排序一致,那么看起来它们的ICU 数据文件是不是一致?
  3. 看起来我们似乎只要对不同版本的ICU 数据文件兼容即可?
  4. 不同版本ICU 数据文件的汉字排序的边界汉字肯定是有特征的,我们可以测试特定汉字来得知ICU数据文件的版本,进而自动应用正确的边界字典?这比测试 node 版本,浏览器ua要靠谱。

Could not install from "tiny-pinyin" as it does not contain a package.json file.

2117 verbose Darwin 16.6.0
2118 verbose argv "/Users/user/.nvm/versions/node/v8.1.2/bin/node" "/Users/user/.nvm/versions/node/v8.1.2/bin/npm" "install"
2119 verbose node v8.1.2
2120 verbose npm v5.3.0
2121 error code ENOLOCAL
2122 error Could not install from "tiny-pinyin" as it does not contain a package.json file.
2123 verbose exit [ 1, true ]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.