fcitx / libime

43 stars 21 forks source link

码表里是否应该删去一些兼容区的字,以及日本简化字(还混进了乱码) #33

Closed garywill closed 7 months ago

garywill commented 2 years ago

关于码表疑问

开始问之前:

  1. 平常使用的码表似乎仅在repo https://github.com/fcitx/fcitx-table-data 里,而这个repo已经archive了
  2. 根据之前这个PR的处理(https://gitlab.com/fcitx/fcitx-table-extra/-/merge_requests/9 )我当时想将wubi-large.txt里兼容区字符搜(FA8E)换成统一区的搜(641C)。当时的维护者添加了漏掉了的统一区字符,不删除兼容区的,同时保留两者。

    • 五笔字型wbx.txt in fcitx-table-data
    • 五笔大字集wubi-large.txt in fcitx5-table-extra
    • 五笔98 in fcitx5-table-extra

    那么,我的理解:五笔码表3种,只有wbx.txt是给普通的五笔86用户日常所用的

现在,码表里发现,https://github.com/fcitx/fcitx-table-data/blob/master/wbx.txt 中有以下兼容区字符:

   兼容字符  -> 所对应的统一字符
郎 63788 F92C -> U+90CE (yveb 郎,与统一区字yvcb码不同), U+90DE
凉 63865 F979 -> U+51C9 (以下几个,左右五笔码相同)
秊 63893 F995 -> U+79CA
裏 63975 F9E7 -> U+88CF
隣 63985 F9F1 -> U+96A3
兀 64012 FA0C -> U+5140
嗀 64013 FA0D -> U+55C0
礼 64024 FA18
蘒 64032 FA20

我认为是否应删除? 或许至少应该删除前7个有对应Unihan kCompatibilityVariant的(即,Unicode认为这些汉字兼容字符不应使用,人们应该使用其所对应的统一汉字字符)

删除的理由还有:

  1. 那7个兼容字符对应的统一区字符已在wbx.txt中有了,无必要另有兼容区字符
  2. 凡是有这些兼容字符的,都仅是单字,并不成词语。而对应的统一区字符成词语
  3. 简单比较了一下前7个兼容字符与所对应的统一字符外观,可以说无区别
  4. 拼音码表 https://github.com/fcitx/fcitx/blob/289b2f674d95651d4e0d0c77a48e3a2f0da40efe/src/im/pinyin/data/gbkpy.org 里无这些兼容区字符
  5. 遍历搜索了fcitx5-table-extra/的文件(搜索词为郎|凉|秊|裏|隣|兀|嗀|礼|蘒|),许多IM也没有这些字符

兀

凉

附:wbx.txt里那些兼容区字符所在:

3865:atnv   蘒
3913:attg   蘒
3920:attx   蘒
6248:boqh   隣
18261:finn  礼
19596:fpgc  嗀
25565:gqv   兀
77059:ttfj  秊
83137:uyiy  凉
96185:yjfe  裏
98898:yveb  郎

另外这还有一个乱码 � 65533 FFFD

88857:wqfn 低�   
lilydjwg commented 2 years ago

支持删掉这些没啥用的字,或者至少单独放着。

我甚至想要只包含中国大陆规范中的字,去除各种繁体异体。

garywill commented 2 years ago

我甚至想要只包含中国大陆规范中的字,去除各种繁体异体。

繁体异体还不算最离谱的,现实是连日本专用新字形也在码表里

我做了一个工具用以发现这些特殊字符 https://garywill.github.io/cc-visualize/

Screenshot_20220623_174247

其实这样很容易造成人打错字的,比如「步行」的「步」字,如果你记忆失误,把其下半部分记成了「少」(多了一点),那么刚好有一个日本字在那让你选

hir 步
hitr 歩   《==这个是日本字

Screenshot_20220623_174747

不只是这个五笔码表有这样的问题。我简略测试了一下别的输入法和其他地方repo的码表,许多都有类似的问题

lilydjwg commented 2 years ago

@garywill 我没看明白你这个工具的数据在哪里。我想用你的数据写个命令行版本来处理我的码表。

garywill commented 2 years ago

@lilydjwg

opencc-data/    
unicode-data/
summary-data/     这里面是结合了以上两者的数据,用这个吧

数据是包装在.js的文件里的。若看到以类似

summary_data = {
  ..... 很多很多行
}

开头的.js文件就是数据。

xxxx-data/下面的pre开头的文件是预处理(shell及node),用来将原始数据生成以上.js包装的数据(已生成好了,不用管)

至于如何使用这些数据,你可以参考根目录下的那几个.js文件(先看unusual_conditions.js吧,里面是如何判断一个字符属于”非寻常“字符)

不知道这样说清楚了没。。

我想用你的数据写个命令行版本来处理我的码表。

如果你真的弄好了cli,PR一个给我吧,我也在想要有个cli的来处理local text files 处理好生成了码表共享一下 :)

lilydjwg commented 2 years ago

感谢解释,我已经把自己的码表处理好了。所有代码公开,但是码表含有私人信息,无法共享。新写的 filter-lines 功能比较简陋,我先不发 pr 了。

我的处理流程:

  1. 导出主码表: libime_tabledict -d ~/.local/share/fcitx5/table/lilywb.main.dict main.txt
  2. 导出用户码表: libime_tabledict -du ~/.local/share/fcitx5/table/lilywb.user.dict user.txt
  3. 使用 tabledict_combine 合并: tabledict_combine main.txt user.txt > combined.txt
  4. 使用 filter-lines 关掉其它字符过滤(修改 main.rs): cargo run --release < combined.txt > filtered.txt
  5. 开启其它字符过滤(修改 main.rs): cargo run --release < combined.txt > filtered-with-others.txt
  6. 确认需要删除的其它字符项: vimdiff filtered.txt filtered-with-others.txt
  7. 修改 filtered.txt 生成删除并保存的指令
  8. 关闭输入法,使用 fcitx5-tabledict 执行删除操作: fcitx5-tabledict < filtered.txt
  9. 导出主码表: libime_tabledict -d ~/.local/share/fcitx5/table/lilywb.main.dict main.txt
  10. 导出用户码表: libime_tabledict -du ~/.local/share/fcitx5/table/lilywb.user.dict user.txt
  11. 合并: tabledict_combine main.txt user.txt > combined.txt
  12. 修改 main.txt,替换数据为 combined.txt 的结果,然后生成新码表: libime_tabledict main.txt lilywb.main.dict
  13. 安装新码表、删除旧的用户码表
  14. 启动 fcitx5
wengxt commented 7 months ago

过去的 pua 区的字符是在老系统上 gbk 到 unicode 转换造成的,已经在 https://github.com/fcitx/libime/commit/ed70dc4ef1e2223da2a12d907b4adb2e4bf9f9ae 去掉