UNPKG

cjk-readings

Version:

Web service that generates readings for chinese characters.

73 lines 2.51 kB
"use strict"; /** * 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