## 対応方法 [[chinese-tokenizer]]を使う。 ```ts const tokenize = require("chinese-tokenizer").loadFile("./cedict_ts.u8"); console.log( JSON.stringify(tokenize("我认为 Obsidian 是编写文档的好工具。"), null, " ") ); ``` `cedict_ts.u8`は[[CC-CEDICT]]からダウンロード。 https://www.mdbg.net/chinese/dictionary?page=cc-cedict Vaultのrootに配置する。 ## [[chinese-tokenizer]]のインストール ```console npm i chinese-tokenizer ``` ## [[Obsidian]]で動作させる 型定義がないので、`require`しかできないがエラーになる。 ``` app.js:1 Plugin failure: various-complements Error: Cannot find module 'chinese-tokenizer' Require stack: - electron/js2c/renderer_init ``` [[module (tsconfig)|module]]が`esnext`のため、`require`を認識しないから。 ### 型定義を追加 `import`が使えるよう、`chinese-tokenizer.d.ts`を作成して型定義する。 ```ts declare module "chinese-tokenizer" { export const loadFile: (path: string) => any; export const load: (content: string) => any; } ``` `loadFile`だと`cedict_ts.u8`のパスが解決しないので、`cedict_ts.u8`は[[Obsidian API]]で読み込み、その結果を`load`する。 ```ts import chineseTokenizer from "chinese-tokenizer"; const dict = await this.app.vault.adapter.read("./cedict_ts.u8"); const tokenize = chineseTokenizer.load(dict); console.log(tokenize("我是中国人。")); console.log(tokenize("我认为 Obsidian 是编写文档的好工具。")); ``` ### モバイル対応 [[chinese-tokenizer]]が[[Node.js]]に依存しているため、[[Obsidian Mobile]]でインストールに失敗する。[[chinese-tokenizer]]をforkして`loadFile`関数を削除する。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <div> <p class="link-card-title">GitHub - tadashi-aikawa/chinese-tokenizer: Tokenizes Chinese texts into words.</p> </div> <div class="link-card-description"> Tokenizes Chinese texts into words. Contribute to tadashi-aikawa/chinese-tokenizer development by cr... </div> </div> <img src="https://opengraph.githubassets.com/293b95fe83ccbb65b8d6c904b9aa6a88d3e13d425df24b568595876e0a4f94f5/tadashi-aikawa/chinese-tokenizer" class="link-card-image" /> </div> <a href="https://github.com/tadashi-aikawa/chinese-tokenizer"></a> </div> [[Prettier]]のフォーマットがかかっているため差分が大量に出ているが、他の変更はない。 `chinese-tokenizer.d.ts`の型定義も変更。 ```ts declare module "chinese-tokenizer" { export interface TokenizedResult { text: string; traditional: string; simplified: string; position: { offset: number; line: number; column: number; }; matches: unknown[]; } export const load: ( content: string ) => (content: string) => TokenizedResult[]; } ``` あとは[[Obsidian API]]を使って辞書データを読み込み、それを使う。 ```ts import chineseTokenizer from "chinese-tokenizer"; // Vault rootにcedict_ts.u8がある前提 const dict = await this.app.vault.adapter.read("./cedict_ts.u8"); const tokenize = chineseTokenizer.load(dict); tokenize("我认为 Obsidian 是编写文档的好工具。") ``` ## 動作確認 ```txt 談到貿易戰的長遠影響,林行止表示貿易戰促使在中國的工廠搬遷到越南、寮國、印度、台灣甚至是馬來西亞,以避開關稅。當工廠搬遷完成後,關稅導致進口貨加價的浪潮很快就過去,由於上述地方的生產成本比中國低,屆時貨物零售價可能會比在內地生產便宜。 ```