UNPKG

taipa

Version:

Taiwanese morphological parsing library

121 lines 5.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getToneEndingNumbersThree = exports.getToneEndingNumbersTwo = exports.getToneEndingNumber = exports.extractTones = exports.LexicalTone = void 0; const morpheme_1 = require("../unchange/morpheme"); const unit_1 = require("../unit"); const analyzer_1 = require("../unchange/analyzer"); const tonalres_1 = require("./tonalres"); /** Tone letters and stop finals of the syllables of a word. */ class LexicalTone { /** Tone letters of all syllables. A transfix is comprised of its tone affixes. */ toneLetters = []; /** Stop finals of all syllables. */ stopFinals = []; /** Return the last tone letter of a word. */ getInflectionalEnding() { return this.toneLetters[this.toneLetters.length - 1]; } /** Return the tone of a word. */ getAllomorphicEnding() { return (this.stopFinals[this.stopFinals.length - 1] + this.toneLetters[this.toneLetters.length - 1]); } /** Return tone numbers for all syllables. */ getToneNumbers() { const numbers = []; for (let i = 0; i < this.toneLetters.length; i++) { if (this.toneLetters[i] === '' && this.stopFinals[i] === '') numbers.push(1); else if (this.toneLetters[i] === '' && this.stopFinals[i] !== '') { if (this.stopFinals[i].length == 1) numbers.push(4); else if (this.stopFinals[i].length == 2) numbers.push(8); } else if (this.toneLetters[i] !== '') { if (this.toneLetters[i] === tonalres_1.TonalLetterTags.f) numbers.push(1); if (this.toneLetters[i] === tonalres_1.TonalLetterTags.y) numbers.push(2); if (this.toneLetters[i] === tonalres_1.TonalLetterTags.w) numbers.push(3); if (this.toneLetters[i] === tonalres_1.TonalLetterTags.x) numbers.push(5); if (this.toneLetters[i] === tonalres_1.TonalLetterTags.z) numbers.push(7); if (this.toneLetters[i] === tonalres_1.TonalLetterTags.xx) numbers.push(9); } } return numbers; } } exports.LexicalTone = LexicalTone; /** Given a word, populate and return a LexicalTone object. */ function extractTones(token) { const gs = (0, analyzer_1.graphAnalyzeTonal)(token); const ltrs = gs.map((it) => it.letter); const ptrns = (0, unit_1.makeMatchedPatterns)(ltrs, morpheme_1.syllabifyTonal); const tone = new LexicalTone(); const ptn = ptrns.map((it) => it.pattern); const stps = ptn.map((it) => it .map((it) => it.name === tonalres_1.TonalSpellingTags.stopFinalConsonant ? it.toString() : '') .filter((it) => it.length > 0)); const tnls = ptn.map((it) => it .map((it) => it.name === tonalres_1.TonalSpellingTags.freeTone || it.name === tonalres_1.TonalSpellingTags.checkedTone ? it.toString() : '') .filter((it) => it.length > 0)); stps.map((it) => it.length > 0 ? tone.stopFinals.push(it[0]) : tone.stopFinals.push('')); tnls.map((it) => it.length > 0 ? tone.toneLetters.push(it[0]) : tone.toneLetters.push('')); return tone; } exports.extractTones = extractTones; /** Return tone ending number for 1 word. */ function getToneEndingNumber(token) { const tone = extractTones(token); if (tone.getInflectionalEnding() === '' && tone.getAllomorphicEnding() === '') return 1; if (tone.getInflectionalEnding() === '' && tone.getAllomorphicEnding() !== '') { // p, t, k, h if (tone.getAllomorphicEnding().length == 1) return 4; // pp, tt, kk, hh if (tone.getAllomorphicEnding().length == 2) return 8; } if (tone.getInflectionalEnding() !== '') { // -f, -y, -w, -x, -z, -xx. -pf, -tf, -kf, -hf. if (tone.getInflectionalEnding() === tonalres_1.TonalLetterTags.f) return 1; if (tone.getInflectionalEnding() === tonalres_1.TonalLetterTags.y) return 2; if (tone.getInflectionalEnding() === tonalres_1.TonalLetterTags.w) return 3; if (tone.getInflectionalEnding() === tonalres_1.TonalLetterTags.x) return 5; if (tone.getInflectionalEnding() === tonalres_1.TonalLetterTags.z) return 7; if (tone.getInflectionalEnding() === tonalres_1.TonalLetterTags.xx) return 9; } return -1; } exports.getToneEndingNumber = getToneEndingNumber; /** Return tone ending numbers for 2 words. */ function getToneEndingNumbersTwo(token1, token2) { return [getToneEndingNumber(token1), getToneEndingNumber(token2)]; } exports.getToneEndingNumbersTwo = getToneEndingNumbersTwo; /** Return tone ending numbers for 3 words. */ function getToneEndingNumbersThree(token1, token2, token3) { return [ getToneEndingNumber(token1), getToneEndingNumber(token2), getToneEndingNumber(token3), ]; } exports.getToneEndingNumbersThree = getToneEndingNumbersThree; //# sourceMappingURL=tone.js.map