Open16

ICU で文節単位の改行をするための提案

Hiroyuki KomatsuHiroyuki Komatsu

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

方針だけ夜のうちに伝えて、返事を待ちつつ、明日は提案書の更新をする
https://unicode-org.atlassian.net/browse/ICU-21699?focusedCommentId=162188

2021-08-13

次のミーティングを 2021-08-17 08:15 からに設定。それまでに準備を終わらせる。

Hiroyuki KomatsuHiroyuki Komatsu

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;
  }

次の宿題

文節の定義および日本語以外での等価的な定義の確認

このあたりを読んでおく

Hiroyuki KomatsuHiroyuki Komatsu

2021-08-17

プロポーザルを CSS4 word-boundary-detection の定義を LDML および ICU でも使うように変更した上で、 ICU に提案。

CSS と定義を揃えることには合意を得るが、word-boundary-detection の定義自体についての不明点およびフィードバックをいただく。

  • word-break を常に keep-all にする必要があるのか? (直交していないのでは)
  • auto(ja) のような言語指定を必要しない方法にできないか

以上もふまえて、CSS ワーキンググループに、文節単位での改行を実現できる仕様の考案を依頼中

CSS ワーキンググループからの返信を待つことに。

Hiroyuki KomatsuHiroyuki Komatsu

2021-11-11

ひさしぶりに ICU のミーティングに出席。定例ミーティングに出席したため、日本時間は午前 3:30 からのミーティング。出張するより気持ちはラク。

挨拶および現状の報告と確認。

  • スケジュール: 最短で ICU 71 (feature freeze: 2022-02-23)
  • API: W3C CSS WG からの返信待ち
  • 実装: 実装中 (cjdict.txt ベースでの単語分割を拡張予定) / 将来的には機械学習ベースへの変更も検討中
  • プロポーザル も現状を踏まえた内容に更新

次回のミーティングは 2021-11-18。日本からでも参加しやすい時間を用意してもらいました。

参照

Hiroyuki KomatsuHiroyuki Komatsu

2022-01-27

結合するべき単語列を追加

cjdict.txt ベースで単語を分割したのち、このリストに含まれる単語 (cjdict.txt のサブセット) は前の単語と結合される。別のロジックで、ひらがなカタカナ1文字も結合される。

もとの文字列

  • 今日はいい天気です。

cjdict.txt に基づく分割 (概念)

  • 今日_は_いい_天気_です_。

ja.txt に "です" が含まれていた場合の結合 (概念)

  • 今日_は_いい_天気です_。

かな1文字の結合

  • 今日は_いい_天気です。
Hiroyuki KomatsuHiroyuki Komatsu

2022-02-01

上記 PR の続き
https://github.com/unicode-org/icu/pull/1964/files

助詞として足されたものと、ICU の実装の都合上足されたものがあるので、今後のために区別しておいて欲しいとのフィードバックをいただく。おっしゃる通りですね。

全部見直してカテゴリー分けをする。ついでに追加するテストケースも提案
ICU-21699 icu/pull/1964 - Google スプレッドシート

見直した際に、間違って追加されていたエントリーを見つけたのはボーナスでした。よかった。

Hiroyuki KomatsuHiroyuki Komatsu

2022-02-09

https://github.com/unicode-org/icu/pull/1970

全角英数が一文字ごとに切れてしまわないようするなど、文字単位での制御を行う PR。(A_B_C → ABC) 確認を求められたので LGTM する。

https://github.com/unicode-org/icu/pull/1964#pullrequestreview-877102048

data/brkitr/ja.txt に直接書いていたデータを適切な場所に移すための議論。

選択肢として、CLDR と ICU がある。

  1. CLDR: common/segments/ja.xml
  2. ICU: data/xml/brkitr/ja.xml

CLDR 側を提案されたけれど、cjdict.txt にべったりの実装なので、ICU 側に残すことに。(というのが僕の今の理解)

Hiroyuki KomatsuHiroyuki Komatsu

2022-02-14

余談:
文節区切りとは別の話として、分かち書きに使われている cjdict.txt には改善の余地があるよね?という新しいチケット。

https://unicode-org.atlassian.net/browse/ICU-21915

今回の実装は、 cjdict.txt による制約を回避するためのものも少なくはないので、元から改善できるのは願ったりかなったり。

Hiroyuki KomatsuHiroyuki Komatsu

2022-02-17

文節区切りの精度を上げるための追加 PR を作成
https://github.com/unicode-org/icu/pull/1983

cjdict.txt のデータに強く依存しているので限界はあるけれど、多少なりともよくなるはず。

例えば「使われる」が以下のように改善される。

  • 変更前: 使_われる
  • 変更後: 使われる

文節区切りの評価は、BudouX と同様に KNBC コーパス を使用しています。

Hiroyuki KomatsuHiroyuki Komatsu

CLDR の keyword について

3 案

  1. @lb に "unit" / "term" 等を追加する。初期案
  2. @lw=keepall の動作を変更する。提案書へのコメントより
  3. CSS4 word-boundary-detection 相当の keyword を追加する

案2 が簡潔で好きだけれど、案3 の方が CSS と挙動がそろう

Hiroyuki KomatsuHiroyuki Komatsu

案3 (word-boundry-detection) を提案したところ、「CSS と挙動はそろえたいが、案3 の CSS ドラフトでの不明な点を解決したい」というフィードバックをいただく。

不明な点

  • word-break を常に keep-all にする必要があるのか? (直交していないのでは)
  • auto(ja) のような言語指定を必要しない方法にできないか

以上もふまえて、CSS ワーキンググループに、文節単位での改行を実現できる仕様の考案を依頼中

Hiroyuki KomatsuHiroyuki Komatsu

文節の定義および日本語以外での等価的な定義の確認

下記の疑問への答えを用意する

  • 『文節区切り』ってどう実装すればいいの?
  • 日本語以外ではどういう定義(実装)なの?
  • 英語の particles (接続詞, 前置詞など) はどういう扱いなの?



まずはこのあたりを読む。「xx を参照」で解決すれば一番ありがたい。