ブラウザで日本語文章を貼り付けると Kuromoji.js で形態素解析し、SVG ベースのワードクラウドを生成するアプリです。src/App.tsx が UI 本体で、src/lib/textProcessing.ts が頻度計算、src/hooks/useKuromojiTokenizer.ts が辞書ロードを担当しています。
現在は public/vendor/kuromoji/ にスクリプトと辞書を同梱し、src/hooks/useKuromojiTokenizer.ts で import.meta.env.BASE_URL を考慮した相対パスから読み込んでいます。
public/vendor/kuromoji/kuromoji.jsとpublic/vendor/kuromoji/dict/はnode_modules/kuromojiからコピーした成果物です。依存バージョンを更新した際は、必ず同じ手順で再コピーしてコミットしてください。(例:cp node_modules/kuromoji/build/kuromoji.js public/vendor/kuromoji//cp -R node_modules/kuromoji/dict public/vendor/kuromoji/)- こうすることで GitHub Pages / Netlify / Vercel などセルフホスト環境でも CDN 依存なしで動作します。
- 必要に応じて
withBasePath()の引数(vendor/kuromoji/...)を書き換えることで別パスへの配置にも対応できます。 - Vite の dev/preview サーバーは
.gz辞書をそのまま配信するためにvite.config.tsのカスタムプラグインでContent-Encoding: identityを設定しています。通常の静的ホスティングでも追加設定なしで同じ挙動になります。
kuromoji が返す IpadicFeatures には以下のようなフィールドが含まれます。src/lib/textProcessing.ts ではこの情報を元に品詞フィルタリングや基本形(basic_form)への正規化を行っています。
surface_form/basic_form: 元の表記と辞書上の基本形。pos,pos_detail_1〜pos_detail_3: 名詞・動詞などの品詞と階層的な詳細分類。conjugated_type,conjugated_form: 活用の種類とその形。reading,pronunciation: カタカナ読み・発音(語により欠損あり)。- そのほか
word_id,word_type,word_positionなど辞書参照用のメタデータ。
これらの属性を活用することで、不要な品詞の除外や読み情報を利用した表記ゆれ吸収など、追加の可視化ロジックにも拡張しやすくなっています。
npm install
npm run dev # Vite dev サーバー(辞書配信ヘッダーを忘れずに)
npm run build # 本番ビルドhttp://localhost:5173/ http://localhost:5173/?auth_debug
アプリケーションは以下のURLパラメータをサポートしています。
project_id: 指定されたUUIDのプロジェクトを自動的にサーバーから読み込み、表示します。- 例:
https://word-cloud.dataviz.jp/?project_id=a55cbec0-8338-4656-bf7f-a39dd4873518
- 例: