BudouX C#は、Google BudouXの.NET実装です。日本語や中国語などのCJK言語のテキストを適切な位置で改行するためのライブラリです。
- スタンドアロン: サードパーティの単語分割器に依存しません
- 軽量: 機械学習モデルを含めて約15KBのサイズです
- 言語に依存しない: データセットを与えることで任意の言語のモデルをトレーニングできます
- .NET SDK 6.0以上
- Mono(Unityでの利用やテスト実行時に必要)
- Python 3.8以上(比較テスト用)
# リポジトリのクローン
git clone https://github.com/Saqoosha/BudouX-CSharp.git
cd BudouX-CSharp
# ライブラリのビルド
dotnet build -c Release
# または、Monoを使用してビルド
mcs -target:library -out:BudouX.dll Runtime/BudouX/Parser.csUnityプロジェクトで利用する場合はPackage Managerから以下のURLを追加してください:
https://github.com/Saqoosha/BudouX-CSharp.git
# Python版BudouXのインストール(比較テスト用)
pip install budoux
# テストコードのコンパイル
mcs -r:BudouX.dll TestComparison.cs -out:TestComparison.exe
# テストの実行
mono TestComparison.exe > csharp_results.txt
python test_comparison.py > python_results.txt
# 結果の比較
diff -y csharp_results.txt python_results.txt- UPMパッケージとして追加する場合は「UPMパッケージとしての使用方法」セクションを参照
- 手動でインストールする場合は
Runtime/BudouXのファイルをプロジェクトにコピー - モデルファイル(
ja.json)をAssets/Resourcesフォルダにコピー - 後は「使用方法」セクションの手順に従って利用
using BudouX;
using System.Collections.Generic;
// モデルファイルからParserを初期化
var parser = Parser.LoadDefaultJapaneseParser("path/to/ja.json");
// 文を意味のある単位で区切る
List<string> chunks = parser.Parse("今日は天気です。");
// 結果: ["今日は", "天気です。"]using BudouX;
using System.Collections.Generic;
using UnityEngine;
// モデルファイルからParserを初期化
TextAsset jaModel = Resources.Load<TextAsset>("ja");
string tempPath = System.IO.Path.GetTempFileName();
System.IO.File.WriteAllText(tempPath, jaModel.text);
var parser = Parser.LoadDefaultJapaneseParser(tempPath);
// 文を意味のある単位で区切る
List<string> chunks = parser.Parse("今日は天気です。");
// 結果: ["今日は", "天気です。"]
// ゼロ幅スペースで区切って結合する場合
string processedText = string.Join("\u200b", chunks);C#実装のパフォーマンス測定結果:
- 1000文の処理時間: 約57ms
- 1文あたりの平均処理時間: 約0.057ms
- 1秒あたりの処理可能文数: 約17,544文
これはUnityでのリアルタイム処理に十分な速度です。100文字以内の短い文章を処理する場合、1秒間に数千の文章を処理できるため、パフォーマンスの問題はありません。
このプロジェクトはApache License 2.0の下でライセンスされています。詳細についてはLICENSEファイルを参照してください。
このプロジェクトはGoogle BudouXをベースにしています。