ICU で文節単位の改行をするための提案
2021-08-02
提案書の初稿を作成
ICU 70 API proposal: line breaking for Japanese unit base breaking - Google Docs
2021-08-03
ICU に提出
[ICU-21699] line breaking for Japanese unit base breaking - Unicode Consortium
2021-08-10
ICU チームとミーティング、フィードバックと宿題 をいただく
『@lb とは直交している概念なのでは?』 → たしかにそう。
2021-08-11
今再確認しているもの
- CSS Text Module Level 4 / word-bound-detection (link)
- Boundary Analysis - ICU Documentation (link)
- tr35/#UnicodeDictionaryBreakExclusionIdentifier (link)
CSS ではすでに必要な API はありそう。実装はまだ?要調査
h1:lang(ja) {
word-boundary-detection: auto(ja);
word-break: keep-all;
}
@lb (line-break) よりも word-bound-detection 相当の keyword を足す方が筋がよさそう。
word-break 相当の keyword は @lw としてすでにある。 (link)
2021-08-12
方針だけ夜のうちに伝えて、返事を待ちつつ、明日は提案書の更新をする
2021-08-13
次のミーティングを 2021-08-17 08:15 からに設定。それまでに準備を終わらせる。
2021-08-15
プロポーザルを更新。CSS4 word-boundary-detection の定義を LDML および ICU でも使うように変更。ぎりぎりで申し訳ない。
ja@*ld=auto*;lw=keepall
が下記の CSS と同様の挙動としたい。
body:lang(ja) {
word-boundary-detection: auto(ja);
word-break: keep-all;
}
次の宿題
文節の定義および日本語以外での等価的な定義の確認
このあたりを読んでおく
2021-08-17
プロポーザルを CSS4 word-boundary-detection の定義を LDML および ICU でも使うように変更した上で、 ICU に提案。
CSS と定義を揃えることには合意を得るが、word-boundary-detection の定義自体についての不明点およびフィードバックをいただく。
- word-break を常に keep-all にする必要があるのか? (直交していないのでは)
- auto(ja) のような言語指定を必要しない方法にできないか
以上もふまえて、CSS ワーキンググループに、文節単位での改行を実現できる仕様の考案を依頼中
CSS ワーキンググループからの返信を待つことに。
2021-11-11
ひさしぶりに ICU のミーティングに出席。定例ミーティングに出席したため、日本時間は午前 3:30 からのミーティング。出張するより気持ちはラク。
挨拶および現状の報告と確認。
- スケジュール: 最短で ICU 71 (feature freeze: 2022-02-23)
- API: W3C CSS WG からの返信待ち
- 実装: 実装中 (cjdict.txt ベースでの単語分割を拡張予定) / 将来的には機械学習ベースへの変更も検討中
- プロポーザル も現状を踏まえた内容に更新
次回のミーティングは 2021-11-18。日本からでも参加しやすい時間を用意してもらいました。
参照
2022-01-15
C++ ICU に必要な PR がマージされました。
- https://github.com/unicode-org/icu/pull/1953
- https://github.com/unicode-org/icu/pull/1957
- https://github.com/unicode-org/icu/pull/1936
lw=phrase
を指定すると使用できる。
2022-01-27
結合するべき単語列を追加
cjdict.txt ベースで単語を分割したのち、このリストに含まれる単語 (cjdict.txt のサブセット) は前の単語と結合される。別のロジックで、ひらがなカタカナ1文字も結合される。
もとの文字列
- 今日はいい天気です。
cjdict.txt に基づく分割 (概念)
- 今日_は_いい_天気_です_。
ja.txt に "です" が含まれていた場合の結合 (概念)
- 今日_は_いい_天気です_。
かな1文字の結合
- 今日は_いい_天気です。
2022-02-01
上記 PR の続き
助詞として足されたものと、ICU の実装の都合上足されたものがあるので、今後のために区別しておいて欲しいとのフィードバックをいただく。おっしゃる通りですね。
全部見直してカテゴリー分けをする。ついでに追加するテストケースも提案
ICU-21699 icu/pull/1964 - Google スプレッドシート
見直した際に、間違って追加されていたエントリーを見つけたのはボーナスでした。よかった。
2022-02-02
PR#1970 で、長音 (ー U+30FC) 以外に前の文字と接続するべき文字はあるかというコメントが出る。
日本語組版処理の要件の文字クラス を参照して、まとめたものを返信する。
2022-02-09
全角英数が一文字ごとに切れてしまわないようするなど、文字単位での制御を行う PR。(A_B_C → ABC) 確認を求められたので LGTM する。
data/brkitr/ja.txt に直接書いていたデータを適切な場所に移すための議論。
選択肢として、CLDR と ICU がある。
- CLDR: common/segments/ja.xml
- ICU: data/xml/brkitr/ja.xml
CLDR 側を提案されたけれど、cjdict.txt にべったりの実装なので、ICU 側に残すことに。(というのが僕の今の理解)
2022-02-11
提案していた最後の PR が ICU にマージされました。おつかれさまでした。
2022-02-14
余談:
文節区切りとは別の話として、分かち書きに使われている cjdict.txt には改善の余地があるよね?という新しいチケット。
今回の実装は、 cjdict.txt による制約を回避するためのものも少なくはないので、元から改善できるのは願ったりかなったり。
CLDR の keyword について
3 案
- @lb に "unit" / "term" 等を追加する。初期案
- @lw=keepall の動作を変更する。提案書へのコメントより
- CSS4 word-boundary-detection 相当の keyword を追加する
案2 が簡潔で好きだけれど、案3 の方が CSS と挙動がそろう
手堅く 案3 にする。
案3 (word-boundry-detection) を提案したところ、「CSS と挙動はそろえたいが、案3 の CSS ドラフトでの不明な点を解決したい」というフィードバックをいただく。
不明な点
- word-break を常に keep-all にする必要があるのか? (直交していないのでは)
- auto(ja) のような言語指定を必要しない方法にできないか
以上もふまえて、CSS ワーキンググループに、文節単位での改行を実現できる仕様の考案を依頼中
文節の定義および日本語以外での等価的な定義の確認
下記の疑問への答えを用意する
- 『文節区切り』ってどう実装すればいいの?
- 日本語以外ではどういう定義(実装)なの?
- 英語の particles (接続詞, 前置詞など) はどういう扱いなの?
まずはこのあたりを読む。「xx を参照」で解決すれば一番ありがたい。