UNPKG

closewords

Version:

A library for finding the most similar word from a list of words, supporting Japanese (including kanji). / 最も似た単語を単語群から検索する日本語(漢字含む)対応のライブラリ

57 lines (56 loc) 1.93 kB
const require_isAlphabetOnly = require("./isAlphabetOnly-C3VUVQyc.cjs"); let worker_threads = require("worker_threads"); let kuromoji = require("kuromoji"); kuromoji = require_isAlphabetOnly.__toESM(kuromoji); let wanakana = require("wanakana"); //#region src/toHepburn.ts function toHepburn(str) { return (0, wanakana.toRomaji)((0, wanakana.toHiragana)(str)); } //#endregion //#region src/worker.ts let tokenizer = null; function initializeTokenizer(dicPath) { if (tokenizer) return Promise.resolve(tokenizer); return new Promise((resolve, reject) => { kuromoji.default.builder({ dicPath }).build((err, builtTokenizer) => { if (err) return reject(/* @__PURE__ */ new Error("Failed to initialize tokenizer: " + err)); tokenizer = builtTokenizer; resolve(builtTokenizer); }); }); } function toRomajiWord(tok, word) { const isWordObject = typeof word === "object"; if (isWordObject && word.pronounce) return toHepburn(word.pronounce); const targetWord = isWordObject ? word.word : word; if (require_isAlphabetOnly.isAlphabetOnly(targetWord)) return targetWord.toLowerCase(); return (0, wanakana.toRomaji)(tok.tokenize(targetWord).map((token) => token.reading ?? token.surface_form).join("")); } if (worker_threads.workerData) { const { words, dicPath } = worker_threads.workerData; (async () => { try { const tok = await initializeTokenizer(dicPath); worker_threads.parentPort.postMessage(words.map((w) => toRomajiWord(tok, w))); } catch (err) { worker_threads.parentPort.postMessage({ error: String(err) }); } })(); } worker_threads.parentPort.on("message", async (msg) => { try { const tok = await initializeTokenizer(msg.dicPath); const results = msg.words.map((w) => toRomajiWord(tok, w)); worker_threads.parentPort.postMessage({ id: msg.id, results }); } catch (err) { worker_threads.parentPort.postMessage({ id: msg.id, error: String(err) }); } }); //#endregion