Giter Site home page Giter Site logo

wuhgit / custompinyindictionary Goto Github PK

View Code? Open in Web Editor NEW
1.4K 11.0 30.0 985 KB

自建拼音输入法词库,百万常用词汇量,适配 Fcitx5 (Linux / Android) 及 Gboard (Android + Magisk or KernelSU) 。

gboard fcitx5 gboard-dictionary magisk-module aur fcitx fcitx-dict fcitx5-dict kernelsu-module

custompinyindictionary's Introduction


        


针对日常输入习惯,当前词库包含了以下内容:

  • 人文类
    • 成语
    • 俗语
    • 诗歌
    • 汉语相关词典(感谢FREEMDICT
    • ……
  • 地理类
  • 生活类
    • 统计用产品分类目录(数据来源:国家统计局
    • 商品目录(数据来源:京东、淘宝 等购物网站)
    • 常见人名
    • ……
  • 其它
    • 第三方输入法词库
    • ……

已对以上所有数据进行去重、精简处理。


Fcitx5 logo

Fcitx 5 Linux

  • 手动安装

    1. 下载 CustomPinyinDictionary_Fcitx_<版本号>.tar.gz 并解压,得到词库文件 CustomPinyinDictionary_Fcitx.dict
    2. 将词库文件复制到目录 /usr/share/fcitx5/pinyin/dictionaries/ 中(如果没有这个目录,您可以自行创建)。
    3. 重启 Fcitx 后即可生效。
  • 通过用户软件仓库安装

    • AUR

Fcitx 5 Android

  • 手动安装

    1. 下载 CustomPinyinDictionary_Fcitx_<版本号>.tar.gz 并解压,得到词库文件 CustomPinyinDictionary_Fcitx.dict
    2. 拼音输入模式下,在输入法键盘上选择 输入法设置 > 管理词库 ,添加词库文件即可。
  • 通过模块安装

    首次安装如果报错 词库文件夹不存在 ,请在拼音输入模式下前往 输入法设置 > 管理词库,以让应用生成相关目录。

    1. 下载模块文件 CustomPinyinDictionary_Fcitx_Magisk_<版本号>.zip
    2. 使用 Magisk 或 KernelSU 应用进行安装更新。详见 模块的使用

Gboard logo

Gboard

提示

  • 本词库仅对 中文(简体) 拼音 的键盘语言和布局生效。This thesaurus is only valid for Chinese (Simplified) Pinyin keyboard language and layout.
  • 词库数据通过模块进行安装,支持 Magisk 及 KernelSU
  • 当前词库在使用上会有一些限制和问题,详情请查看 相关issue
  • 如果是旧版数据用户 (即 2022-04-22 前通过直接替换文件方式进行安装的用户) ,先恢复词库至您之前备份的数据,若没有相应备份,当迁移至 Magisk 模式时,请先在模块安装时选择卸载,此时模块会将原有词库替换为空白数据,随后再进行安装。
  • 词库导入后,可能需要一段时间后才能在输入时感知到新词。您可以在 Gboard 设置 > 字典 > 个人字典 > 中文(简体) 查看到本词库导入后的数据。

下载模块文件 CustomPinyinDictionary_Gboard_Magisk_<版本号>.zip ,使用 Magisk 或 KernelSU 应用进行安装更新。详见 模块的使用


Magisk logo
kernelsu logo

模块的使用

安装、升级、卸载此模块均 不需要重启 ,即时生效。

打开 Magisk 或 KernelSU 的应用,进入 模块 页面

  • 首次安装

    1. 从本地安装 ,选择下载的模块文件。
    2. 使用音量键选择安装
  • 升级

    • 直接检查更新并安装。
  • 卸载

    1. 从本地安装 ,选择下载的模块文件。
    2. 使用音量键选择卸载
    3. 对本模块进行 移除

    注意

    • 若未按流程进行卸载而直接对模块执行移除,会导致词库数据仍然存在,此时可以再按照上面的卸载流程重新执行一遍,随后移除模块即可。
    • “多用户”1 需要在确保其它已安装此模块的用户均已卸载的情况下才能进行移除。

Footnotes

  1. 这里的“多用户”指 Android 系统自带的“多用户”功能
    模块信息存放在系统目录,所有用户共用,而本模块写入的词库数据位于各用户独立的数据文件目录中,无法互相访问。
    如果某一用户需要使用本模块提供的词库数据,请使用该用户安装模块。
    在某一用户下进行的安装或升级操作,其它已安装本模块的用户数据会同步更新。
    如果某一用户不想再使用,单独以该用户执行卸载(只需执行 卸载 中的 1~2 即可),若其它用户也安装有此模块,请确保其它用户均完成卸载后再执行移除
    使用 IslandShelter 等应用创建的“多用户”需要进行一些手动操作

custompinyindictionary's People

Contributors

wuhgit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

custompinyindictionary's Issues

能否添加linux下智能拼音的支持

在ubuntu 22.04下似乎默认的中文输入法为智能拼音。有一些优点,但词库和联想机制实在拉胯。更逆天的是用户词库自创了一种读取方法导致本仓库的资源无法使用:

image

能否提供图中所描述的词库文件,或是提供给我一些关于.dict文件的解析方法,我愿意提交一份pr以适配智能拼音

平板没有音量键,无法安装magisk模块

我现在文石设备使用gboard,想导入你的magisk模块词库,发现需要按音量键+,但是本设备只有电源键和返回键,请问可以修改成直接安装的形式吗?

Ubuntu 将词库转换为txt文件教程

  1. 备份 sources.listcp /etc/apt/sources.list /etc/apt/sources.list.bak
  2. 编辑 sources.listnano /etc/apt/sources.list
  3. 将文件里的内容全部替换成以下内容:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-proposed main restricted universe multiverse

  1. 更新源:apt update
  2. 安装 libime-binapt install libime-bin
  3. 还原 sources.listcp /etc/apt/sources.list.bak /etc/apt/sources.list
  4. 下载 CustomPinyinDictionary_Fcitx_<版本号>.tar.gz 并解压,得到词库文件 CustomPinyinDictionary_Fcitx.dict
  5. 进入词库文件所在目录,将词库转换为txt文件:libime_pinyindict -d CustomPinyinDictionary_Fcitx.dict CustomPinyinDictionary_Fcitx.txt

建议提供txt的词库文件,供直接导入Android

最近重置了手机新装了Gboard,找到这个词库,非常感谢开发者的分享。
但是手机没有root,不能直接使用。然后尝试了Fcitx 5安卓版,导入很快,但是输入法整体上体验还不够好。

经过一番搜寻,发现了一个第三方的App,这个App可以导入txt词库,写入Android用户词典。
尝试把词库转成txt了,最终导入成功,122万词库,耗时70分钟
(小米10,MIUI13,为了避免锁屏导入中断,我开了个抖音循环播放,把这个App通过小窗运行在上层)

因此建议开发者可以提供一下txt词库,方便其他没有root的用户使用。
App地址:https://play.google.com/store/apps/details?id=com.usr.dict.mgr
附上今天转的词库:
Gboard词库.zip

magisk词库不支持kernelsu

在ksu管理器下安装magisk词库,谷歌拼音字典里有词,但管理器显示不出来模块,希望后续能改进一下

[求助]

词库中缺少IP、DNS等词语有没有方法能让我自己加上去呢,否则每次跑来这儿麻烦你总归不好

[建议]关于符号问题

输入相应的字眼没有相应的符号出现,比如我输入“摄氏度”并不会出现相应的符号,以及等于不会出现=等等,希望作者能加上

能否制作一份小鹤双拼版呢

如题,双拼用户虽然不多,但还是有少量人在坚持。希望作者大大帮忙做一份,并不复杂。或者每次版本更新留一个txt词库文件,谢谢

能否添加一下对kernelsu支持

虽然kernelsu可以刷magisk模块,但是不知道为什么,重启过后模块就会消失,不生效。不光是kernelsu管理器的重启,正常的重启手机模块也会消失

针对使用 Island、Shelter 等应用创建的“多用户”如何安装模块的一些说明

有别于 Android 系统自带的“多用户”功能 ,如果你是通过 IslandShelter 等应用创建的多用户,在安装和卸载模块时会出现问题,这里需要做一些手动操作。

首先通过 adb 连接手机并进入 adb shell

查看手机中存在的用户 ID:

pm list users

主用户的 ID 为 0,而子用户的 ID 视具体情况不一,这里假设得到的子用户 ID 为 10

获取 root 权限:

su

接着为模块创建用户标识,下面的命令视你的需求而定

  • 针对 Gboard

    mkdir -p /data/adb/wuhgit/CustomPinyinDictionary/gboard/
    touch /data/adb/wuhgit/CustomPinyinDictionary/gboard/10
    
  • 针对 Fcitx

    mkdir -p /data/adb/wuhgit/CustomPinyinDictionary/fcitx/
    touch /data/adb/wuhgit/CustomPinyinDictionary/fcitx/10
    

随后执行模块中的安装。

如果子用户不想再使用模块数据,删除刚刚创建的空白文件,执行模块中的卸载即可。

请注意,由于无法正确识别这类多用户,在模块卸载子用户数据时也会同时卸载主用户的相关数据,如果这不是你的预期,请在卸载后重新对主用户进行安装。

Magisk 模块似乎不支持多用户

在主用户下安装了模块,Gboard 中显示有词库
其他用户下的 Magisk 也显示模块已安装,但 Gboard 中没有词库,重启无效

请问下,通过magisk安装词库后,gboard的cpu占用都会非常高,过5分钟左右才会趋于正常

magisk 版本为 26.3
gboard 版本为最新googleplay版本
测试了两种场景:
一个是删除词库后重启,cpu占用只在5%左右
另一个是安装词库后,gboard的cpu占用高达300%多,杀掉进程后继续打开gboard依然会飙到200左右。重启手机后 cpu占用依然会超过100%。

安装完词库后,我看了下安装包下面的数据库内容,基本上字典值都已经存在了,难道是gboard在重建索引之类的吗。一开始我以为是插件有问题,后来想了想感觉还是软件的问题

如何将词库转换为 txt

如果需要 txt 格式的词库,比如用于其它输入法,可以通过 Fcitx 的词库进行转换,但需要您使用 Linux 系统 (WSL也可以)

  • 下载 CustomPinyinDictionary_Fcitx_<版本号>.tar.gz 并解压,得到词库文件 CustomPinyinDictionary_Fcitx.dict
  • Linux 下,安装 libime
  • 在词库文件所在目录下使用命令 libime_pinyindict -d CustomPinyinDictionary_Fcitx.dict CustomPinyinDictionary_Fcitx.txt 进行转换

提示:

在使用 libime 进行转换的时候请注意软件版本,如果出现转换失败,多半是因为不是最新版本所导致。

最新的版本号请查阅 https://github.com/fcitx/libime/tags 或者 https://archlinux.org/packages/extra/x86_64/libime/

关于 Gboard 双拼支持、输入中出现词语和拼音被莫名分割 等问题的说明

首先说明,虽然这个名为“词库”,但对于 Gboard 而言,当前的实现方式更类似于 “自定义短语”,这两者存在巨大的区别,使用过程中出现的很多问题也是由此造成。

对于拼音输入法而言,词条对应的全拼字符串应该有正确的分割,让词条能够通过 完整全拼、全拼的首字母、部分全拼及部分首字母混合 等一切可以匹配到的形式进行匹配,并且输入法还会根据已输入的字符进行一些延伸,达到所谓智能预测输入的特性。

当设置为 双拼 输入方案时,这个过程只是多了一次键盘映射,以 小鹤双拼 为例,输入 xn,输入法仍旧是以全拼 xiao 的形式在词库中进行匹配,得到 字。

而自定义短语只有完整输入相应的字符串才能匹配,输入法本身无法对其进行正确的分割。

Gboard 真正的词库类型是 dict_3_3 ,通常是 user_dict_3_3 ,这也是从 谷歌拼音输入法 延续下来的。

将词库类型设置为 自定义短语 而不是 dict_3_3 ,这是对于实际使用的一个取舍。

对于 Gboard 和以前的 谷歌拼音输入法,用户在使用过程中输入的任何新词,达到一定的频次后就会被加入到词库中。
但输入法针对 dict_3_3 类型的词库设置有一个 500000 的容量上限,只要词库达到这个上限,输入法会将其整个清空。

之所以有这样的限制,显而易见的是出于运行效率的考虑,加之 Gboard 本身是一个多语言输入法,这个容量上限对于 99% 的语言都已经足够。
另外,如果用户某一次的输入无意间触发了错误的索引,也会导致词库被清空。

从 2020年11月1号 的第一个版本开始,我这个词库的数据量就远远超出了上限,如果制作一个词库就是为了它被清空,毫无必要。
之前也考虑过对词条数量进行精简,只是词条少了就无法弥补 Gboard 自带中文词库的缺点,词条多了还需要考虑到每个用户日常输入的新词数量(这个数量千差万别根本无法定量),并且可以肯定的是,这两者叠加在一起最终触发清空只是一个时间问题。

要想绕过这个限制,一个直观方法是修改源码中的容量上限做一个 mod 版的 Gboard ,但这是一个极不正确且极度危险的方法,输入法涉及到个人最基本的隐私安全,任何时候都不要做这样的决定,更不要使用任何第三方修改过的输入法。

另一个可行的方法就是使用输入法的 自定义短语 ,也就是我现在所用的类型,它没有容量上限(至少目前我没发现)。
唯一的缺点就是输入方式过于呆板,并且由于输入法并不知道如何把词条和用户输入的字符串进行对应,也就造成了 词语和拼音被莫名其妙分割 的现象。
在这种模式下,要想实现双拼输入,只能是为每一个词条存入不同的字符,比如凡是有 字的词条,不仅存入xn 也存入 xiao ,很显然这种粗暴的处理模式将导致最终数据量的暴涨,消耗更多的系统资源,并且在输入过程中出现过多的非必要的候选内容。
即便是单独为每一种双拼方案提供各自的双拼词库,由于双拼的特性,以及必须完全匹配才能输入相应词条的原因,输入法的重码和误码率将会异常之高,以至于这样的词库不如不用。

如果没有 root , 又或者你自己有能力动手修改了 Gboard 源码解决了隐私安全的担忧,就是想用 dict_3_3 格式以获得最好的使用体验,这时又会出现另外一个问题,那就是漫长的导入时间。

在非 root 的情况下,导入词库只能通过 txt 格式,并且这也是目前生成 dict_3_3 格式词库的唯一方法。

有网友做过实际操作,122万词条实际导入时间在 70分钟左右
受限于每个用户设备的性能表现以及中间难免发生导入失败之类的意外,如果每一次词库更新都要这样操作,这种耐心我实在难以想象。

这也是我没有提供 txt 格式的主要原因,并且对于原版 Gboard 用户而言,如果它注定会被清空,何必浪费这么多时间和精力?
已 root 用户直接使用 Magisk 模块,刷入只需几秒钟,效果立等可得,词库有更新也能在第一时间得到通知,不想使用这个词库时清除相关数据也非常方便,唯一的缺点就是输入体验不佳,但至少够用。

如何证明我所说的“词库达到上限后会被清空”?你可以自己试一下:

未 root 的设备,首先在 Gboard 的应用信息里记录下导入前数据的空间占用,导入 txt 格式后记录下空间占用,使用一段时间后再观察空间占用,你会发现之前增加的空间已经消失了。
已 root 的设备,观察 Gboard 数据目录下 user_dict_3_3 文件尺寸的前后变化。

在刷入 Magisk 模块的时候,实际上输入法也会为这些自定义短语生成一个 dict_3_3 格式的词库,在某些版本的 Gboard 中会用类似 正在改善您的打字输入体验 这样的通知进行提示,生成的这个词库也不会存在太久,但由于这些词条数据实际存储在输入法用于提供自定义短语的数据库中,它们并不会被删除。

请问可以发布时使用版本号吗

如果一直发到同一个release里面,会导致无法写PKGBUILD或者nix来分发,因为每次新的版本发布,旧的链接就会被覆盖,如果更新不及时就直接构建失败了。

Fcitx5 Magisk 模块安装,词库文件夹不存在

文件夹不存在的问题

      DICT_DIR=/storage/emulated/$1/Android/data/$FCITX_PACKAGENAME/files/data/pinyin/dictionaries
      DICT_LOC=$DICT_DIR/CustomPinyinDictionary_Fcitx.dict
      if [ ! -d "$DICT_DIR" ];then
        ui_print "- 词库文件夹不存在!"

dictionaries 文件夹在 Fcitx5 安装时不会自动生成,这里可能少了个 mkdir

Shelter 多用户问题

系统是 Android 13(LineageOS 20.0),用户 10 是用 Shelter 创建的。

手动为主用户和用户 10 新建该文件夹后,主用户可以安装,但用户 10 仍然安装失败。

可能是某种权限问题,我在终端下以 root 权限也打不开这个目录。

/storage/emulated # ls
ls: .: Permission denied

Screenshot_20230222-233528_Trebuchet

如何导入

现用同文输入法的四叶草九宫格方案,不知该如何导入贵词库?

参考 #21 进行转换报错

 ✘ lkyu@lkyu  ~/pinyin  ls -la
total 27808
drwxr-xr-x 2 lkyu lkyu     4096 Dec 19 11:20 .
drwxr-xr-x 8 lkyu lkyu     4096 Dec 19 11:27 ..
-rw-r--r-- 1 lkyu lkyu 28466954 Dec  2 13:53 CustomPinyinDictionary_Fcitx.dict
 ✘ lkyu@lkyu  ~/pinyin  libime_pinyindict -d CustomPinyinDictionary_Fcitx.dict CustomPinyinDictionary_Fcitx.txt
terminate called after throwing an instance of 'std::invalid_argument'
  what():  Invalid pinyin version.
[1]    885 abort      libime_pinyindict -d CustomPinyinDictionary_Fcitx.dict

词库版本:CustomPinyinDictionary_Fcitx_20231202.tar

linux版本:

 lkyu@lkyu  ~/pinyin  uname -a
Linux lkyu 5.15.133.1-microsoft-standard-WSL2 #1 SMP Thu Oct 5 21:02:42 UTC 2023 x86_64 GNU/Linux

libime版本:

 ✘ lkyu@lkyu  ~/pinyin  apt list | grep libime

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libime-bin/oldstable,now 1.0.4-1 amd64 [installed]
libime-data-language-model/oldstable,now 1.0.4-1 amd64 [installed,automatic]
libime-data/oldstable,now 1.0.4-1 all [installed,automatic]
libimecore-dev/oldstable 1.0.4-1 amd64
libimecore0/oldstable,now 1.0.4-1 amd64 [installed,automatic]
libimepinyin-dev/oldstable 1.0.4-1 amd64
libimepinyin0/oldstable,now 1.0.4-1 amd64 [installed]
libimetable-dev/oldstable 1.0.4-1 amd64
libimetable0/oldstable,now 1.0.4-1 amd64 [installed,automatic]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.