cjk-readings
Version:
Web service that generates readings for chinese characters.
73 lines • 2.51 kB
JavaScript
;
/**
* Parts of this file are based on:
* - https://github.com/hotoo/pinyin/blob/master/lib/index.js
* - https://github.com/hotoo/pinyin/blob/master/lib/pinyin.js
* Copyright 闲耘 <hotoo.cn@gmail.com>
* Used under MIT License
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var nodejieba_1 = __importDefault(require("nodejieba"));
var dict_zi_1 = __importDefault(require("pinyin/data/dict-zi"));
var phrases_dict_1 = __importDefault(require("pinyin/data/phrases-dict"));
function segmentIntoPhrases(text) {
return nodejieba_1.default.cutSmall(text, 4);
}
function convertCharacter(char) {
if (char.length !== 1) {
return convertCharacter(char.charAt(0));
}
var charCode = char.charCodeAt(0);
if (!dict_zi_1.default[charCode]) {
return [char, []];
}
return [char, dict_zi_1.default[charCode].split(',')];
}
function convertPhrase(phrase) {
var parts = [];
if (phrases_dict_1.default.hasOwnProperty(phrase)) {
parts = parts.concat(phrases_dict_1.default[phrase].map(function (readings, i) { return [phrase[i], readings]; }));
}
else {
parts = parts.concat(Array.from(phrase).map(convertCharacter));
}
return parts;
}
function convertText(text) {
var phrases = segmentIntoPhrases(text);
var parts = [];
var readingless = '';
for (var i = 0; i < phrases.length; i++) {
var phraseOrCharacter = phrases[i];
var firstCharCode = phraseOrCharacter.charCodeAt(0);
if (dict_zi_1.default[firstCharCode]) {
// ends of characters without readings.
if (readingless.length > 0) {
parts.push([readingless, []]);
readingless = '';
}
if (phraseOrCharacter.length === 1) {
parts = parts.concat(convertCharacter(phraseOrCharacter));
}
else {
parts = parts.concat(convertPhrase(phraseOrCharacter));
}
}
else {
readingless += phraseOrCharacter;
}
}
// finish off with any readingless characters
if (readingless.length > 0) {
parts.push([readingless, []]);
}
return parts;
}
function generatePinyin(text) {
return convertText(text);
}
exports.generatePinyin = generatePinyin;
//# sourceMappingURL=generatePinyin.js.map