スタンドアロン。小さい。言語中立。
Budouxは、機械学習式のラインブレイクオーガナイザーツールであるBudouの後継者です。
スタンドアロンです。 Google Cloud Natural Language APIなど、サードパーティの単語セグメントターに依存せずに動作します。
小さいです。機械学習モデルを含めて、約15 kbしかかかりません。クライアント側でも使用することは合理的です。
言語中立です。 Budouxのトレーニングスクリプトにデータセットをフィードすることにより、あらゆる言語のモデルをトレーニングできます。
最後になりましたが、BudouxはHTML入力をサポートしています。
https://google.github.io/budoux
韓国は単語の間のスペースを使用するため、一般に、CSSプロパティの単語を壊すことにより、単語が分割されるのを防ぐことができます。 word-break: keep-all 。とはいえ、上記の解決策が不十分であることが判明した場合、専用の韓国語のサポートを探求させていただきます。
$ pip install budouxパーサーに文を供給することで、フレーズのリストを取得できます。最も簡単な方法は、パーサーを取得することです。各言語のデフォルトパーサーをロードすることです。
日本語:
import budoux
parser = budoux . load_default_japanese_parser ()
print ( parser . parse ( '今日は天気です。' ))
# ['今日は', '天気です。']単純化された中国人:
import budoux
parser = budoux . load_default_simplified_chinese_parser ()
print ( parser . parse ( '今天是晴天。' ))
# ['今天', '是', '晴天。']伝統的な中国語:
import budoux
parser = budoux . load_default_traditional_chinese_parser ()
print ( parser . parse ( '今天是晴天。' ))
# ['今天', '是', '晴天。']タイ人:
import budoux
parser = budoux . load_default_thai_parser ()
print ( parser . parse ( 'วันนี้อากาศดี' ))
# ['วัน', 'นี้', 'อากาศ', 'ดี']また、HTML文字列を非難のマークアップでフレーズをラップすることもできます。デフォルトのパーサーは、ゼロ幅空間(U+200b)を使用してフレーズを分離します。
print ( parser . translate_html_string ( '今日は<b>とても天気</b>です。' ))
# <span style="word-break: keep-all; overflow-wrap: anywhere;">今日は<b>u200bとてもu200b天気</b>です。</span>例の目的のために、上記の例ではセパレーターはu200bとして示されていますが、実際の出力はゼロ幅空間であるため、目に見えない文字列です。
カスタムモデルがある場合は、次のように使用できます。
with open ( '/path/to/your/model.json' ) as f :
model = json . load ( f )
parser = budoux . Parser ( model )Budouxのモデルファイルは、機能のペアと機械学習トレーニングによって抽出されたスコアを含むJSONファイルです。各スコアは、特定のポイントで文を破るかどうかを決定する上で機能の重要性を表します。
JavaScriptモデルの詳細については、JavaScriptモジュールREADMEを参照してください。
budouxコマンドを使用して、端末に入力をフォーマットすることもできます。
$ budoux 本日は晴天です。 # default: japanese
本日は
晴天です。
$ budoux -l ja 本日は晴天です。
本日は
晴天です。
$ budoux -l zh-hans 今天天气晴朗。
今天
天气
晴朗。
$ budoux -l zh-hant 今天天氣晴朗。
今天
天氣
晴朗。
$ budoux -l th วันนี้อากาศดี
วัน
นี้
อากาศ
ดี $ echo $'本日は晴天です。 n明日は曇りでしょう。 ' | budoux
本日は
晴天です。
---
明日は
曇りでしょう。 $ budoux 本日は晴天です。 -H
<span style="word-break: keep-all; overflow-wrap: anywhere;">本日はu200b晴天です。</span>例の目的のために、上記の例ではセパレーターはu200bとして示されていますが、実際の出力はゼロ幅空間であるため、目に見えない文字列です。
ヘルプを見たい場合は、 budoux -hを実行してください。
$ budoux -h
usage: budoux [-h] [-H] [-m JSON | -l LANG] [-d STR] [-V] [TXT]
BudouX is the successor to Budou,
the machine learning powered line break organizer tool.
positional arguments:
TXT text (default: None)
optional arguments:
-h, --help show this help message and exit
-H, --html HTML mode (default: False)
-m JSON, --model JSON custom model file path (default: /path/to/budoux/models/ja.json)
-l LANG, --lang LANG language of custom model (default: None)
-d STR, --delim STR output delimiter in TEXT mode (default: ---)
-V, --version show program's version number and exit
supported languages of `-l`, `--lang`:
- ja
- zh-hans
- zh-hant
- th Budouxは、HTML入力をサポートし、HTML文字列をフレーズをラップするマークアップで出力しますが、HTML消毒剤として使用することを意図したものではありません。 Budouxは入力を消毒しません。悪意のあるHTML入力により、悪意のあるHTML出力が得られます。入力を信用していない場合は、適切な消毒剤ライブラリで使用してください。
英語のテキストには、美しく読みやすいラインブレークを可能にする間隔やハイフネーションなど、多くの手がかりがあります。ただし、一部のCJK言語にはこれらの手がかりがないため、処理するのが難しいことで有名です。ラインブレークはランダムに発生する可能性があり、通常、単語やフレーズの途中で発生する可能性があります。これは、ウェブ上のタイポグラフィの長年にわたる問題であり、読みやすさの低下をもたらします。
Budouは、2016年にこの問題の解決策として提案されました。これは、非壊れたマークアップに包まれた語彙フレーズを使用して、CJK文をHTMLに自動的に変換して、意味的にラインブレークを制御します。 Budouはこの問題をある程度解決しましたが、最新のWebプロダクションワークフローと統合された問題がまだいくつかあります。
WebサイトにBudouを適用する最大の障壁は、サードパーティの単語セグメント担当者に依存していることです。通常、ワードセグメントターは、すべてのWebページリクエストに対してダウンロードすることができない大規模なプログラムです。また、速度とコストを考慮して、すべての文でクラウドベースの単語セグメンテーションサービスにリクエストを行う望ましくないオプションでもあります。そのため、クライアント側のJavaScriptコードにバンドルされるのに十分な小さなセグメンテーションエンジンを備えたスタンドアロンラインブレイクオーガナイザーツールが必要です。
Budou XはBudouの後継者であり、手間をかけずにWebサイトと統合するように設計されています。
Budouxは、Adaboostアルゴリズムを使用して、タスクをバイナリ分類問題として検討して、すべての文字間で破損するかどうかを予測することにより、フレーズにセグメント化します。ブレークポイントの周りの文字、ユニコードブロック、それらの組み合わせなどの機能を使用して、予測を行います。 JSONファイルとしてエンコードされた出力機械学習モデルは、機能のペアとその有意スコアを保存します。 Budoux Parserは、Modelファイルを使用してセグメルダーを構築し、入力文をフレーズのリストに変換します。
ターゲット言語でトレーニングデータを準備することにより、あらゆる言語の独自のカスタムモデルを構築できます。トレーニングデータセットは、以下のようにセパレーターシンボル「o」(u+2581)を持つフレーズで区切られた文で構成される大きなテキストファイルです。
私は▁遅刻魔で、▁待ち合わせに▁いつも▁遅刻してしまいます。
メールで▁待ち合わせ▁相手に▁一言、▁「ごめんね」と▁謝れば▁どうにか▁なると▁思っていました。
海外では▁ケータイを▁持っていない。
テキストファイルがmysource.txtとして保存されていると仮定すると、次のコマンドを実行して独自のカスタムモデルを構築できます。
$ pip install .[dev]
$ python scripts/encode_data.py mysource.txt -o encoded_data.txt
$ python scripts/train.py encoded_data.txt -o weights.txt
$ python scripts/build_model.py weights.txt -o mymodel.json train.py 、コンピューターのリソースに応じて完了するのに時間がかかることに注意してください。良いニュースは、トレーニングアルゴリズムがいつでもアルゴリズムであるため、実行を中断しても重みファイルを取得できることです。そのような場合でも、その重みファイルをbuild_model.pyに渡すことにより、有効なモデルファイルを構築できます。
日本のデフォルトモデル( budoux/models/ja.json )は、KNBCコーパスを使用して構築されています。トレーニングデータセットを作成できます。これには、以下のコマンドを実行して、以下のsource_knbc.txtに名前を付けます。
$ curl -o knbc.tar.bz2 https://nlp.ist.i.kyoto-u.ac.jp/kuntt/KNBC_v1.0_090925_utf8.tar.bz2
$ tar -xf knbc.tar.bz2 # outputs KNBC_v1.0_090925_utf8 directory
$ python scripts/prepare_knbc.py KNBC_v1.0_090925_utf8 -o source_knbc.txt shuhei iitsuka
これは、公式にサポートされているGoogle製品ではありません。