takuya kodama
takuya kodama
試しに à だけを a に変換するコードを書いてみた。 分かったこと - アルファベットの大文字は、小文字にノーマライズされていること - Dacritical Mark がついた文字と外して場合の文字の対応表が必要そうなこと - ^ NFKC の分解して判断する方法もあるが冗長な気がする ``` // à だけを a に変換してみる if (utf8_char[0] == 0xC3 && utf8_char[1] == 0xA0)...
> Dacritical Mark がついた文字と外して場合の文字の対応表が必要そうなこと 下記のようなマッピングをしたテーブルを作って、呼んであげると行けるかな? ```ruby latin_1_supplement_table = { '0xA0' => 'a', '0xA1' => 'a' } ``` 既存の仕組みを使って良い感じに対応できないかを少し確認する。
マッピングしたテーブルを使って対応してみたが、 もう少し良さそうなやり方がある気がするので相談する。 ```diff git show commit e35fe125324ac3c61aecea5b9238f747e255dc2c (HEAD -> support-latin-1-supplement-for-unify-alpabet-diacritical-marks, origin/support-latin-1-supplement-for-unify-alpabet-diacritical-marks) Author: otegami Date: Thu Aug 1 18:20:03 2024 +0900 wip normalize Latin-1 Supplements to basic alphabets diff --git a/lib/normalizer.c...
方針について相談したのでメモ 結論: 変換後のアルファベットは、アルファベット順に並んでいるので、下記のように`if`で範囲指定しながら変換していく https://github.com/groonga/groonga/blob/89e46ff9437c0ca98e417f1c87372224321b0081/lib/normalizer.c#L860-L880 理由: 変換用の対応マッピングテーブルはすべて対応すると 500 以上の要素を持つことになるので、バイナリーサイズが大きくなりかつ遅くなりそうなため
レビュー対応をしていきます!
タスクの分割の仕方が実装の都合上変更になったため、 改めて対応する必要があるタスクを洗い出します。
対応する必要があるアルファベットは下記で洗い出すと、`q` 以外すべての文字になりそうなことがわかった。 ```ruby #!/usr/bin/env ruby def have_diactritical_combining_character?(character) code_points = character.unicode_normalize(:nfd).codepoints code_points.any? do |code_point| (0x0300..0x036f).cover?(code_point) end end def base_character(character) character.unicode_normalize(:nfd).chars.first end def base_character_is_lower_alphabet?(character) base_code_point = base_character(character).codepoints.first (("a".codepoints.first)..("z".codepoints.first)).cover?(base_code_point) end alphabets = ('a'..'z').to_a...
タスクリストを更新しました。 - https://github.com/groonga/groonga/issues/1755#issuecomment-2244330981
@abetomo Thanks. I agree with your opinion because in this moment we are not sure splitting this document is better way. I will update the current document and then think...
Thanks! I've just updated the issue.