home icon indicating copy to clipboard operation
home copied to clipboard

导入扩展词库后无法使用自动造词功能

Open feijie825 opened this issue 2 years ago • 4 comments

使用五笔输入,导入搜狗扩展词库,使用中英混输(easy_en),同时希望使用自动造词功能。 但是一旦导入外部词库,自动造词功能就无法使用。就是说,既无法使用之前的自造词,也无法自动造新词。 下面是我的配置:

# wubi86.custom.yaml
patch:
  translator/enable_user_dict: true                 # 用户词典开启/关闭、词序自动调频
  translator/dictionary: wubi86_feijie             # 载入扩展词库
  __include: easy_en:/patch                            # 中英混输
  easy_en/enable_sentence: false                   # 防止英文无意义带太极图案的词
---
# wubi86_feijie.dict.yaml
name: wubi86_feijie
version: "2022.07.16"
sort: by_wight
use_preset_vocabulary: true

import_tables:
  - wubi86	#这个是默认使用五笔词库,没事别删
  - wubi86_sougou_stand.extended   #这个是搜狗标准库,以后别的词库也要这样输入进来才有效
...
# wubi86_sougou_stand.extended.dict.yaml
---
name: wubi86_sougou_stand.extended
version: "1.0"
sort: by_weight
columns:
  - text
  - code
  - weight
  - stem
encoder:
  exclude_patterns:
    - '^z.*$'
  rules:
    - length_equal: 2
      formula: "AaAbBaBb"
    - length_equal: 3
      formula: "AaBaCaCb"
    - length_in_range: [4, 10]
      formula: "AaBaCaZa"
...

# 下面是扩展词库内容
啊啊啊	kkkb	1
阿埃二氏病变	bffy	1
阿埃二氏手术	bffs	1
阿埃二氏损害	bffp	1
阿埃二氏细胞	bffe	1
阿埃斯特兰德二氏手术	bfas	1

目前基础词库、扩展词库、中英混输功能都正常,但是无法使用自动造词功能,之前的自造词也不会出现。我做过多次尝试,该功能始终无法正常,相同配置情况下如果不导入扩展词库则功能正常。

自动造词和动态词序自动调频功能是否分离呢?比如,使用自动造词功能,但不使用词序自动调频功能。

feijie825 avatar Aug 17 '22 04:08 feijie825

未指定用户词典,默认与固态词典同名,如果要使用 wubi86 的用户词典,须定义 translator/user_dict: wubi86。 造词规则应当在 wubi86_feijie.dict.yaml 中定义。

Ace-Who avatar Aug 17 '22 05:08 Ace-Who

未指定用户词典,默认与固态词典同名,如果要使用 wubi86 的用户词典,须定义 translator/user_dict: wubi86。 造词规则应当在 wubi86_feijie.dict.yaml 中定义。

感谢👍,这个问题困扰我好久! 定义 translator/user_dict: wubi86 后,之前的自造词就能够出现在候选词列表中了,我之前一直尝试添加 translator/dictionary: wubi86 原来是搞错了。目前无法造新词,应该和你说的造词规则相关。

下面便是添加造词规则相关问题:

  1. 造词规则是不是这些代码,我在中间文件和每个词典中单独都添加了:
# wubi86_feijie.dict.yaml
---
name: wubi86_feijie
version: "2022.07.16"
sort: by_wight
use_preset_vocabulary: true

encoder:
  exclude_patterns:
    - '^z.*$'
  rules:
    - length_equal: 2
      formula: "AaAbBaBb"
    - length_equal: 3
      formula: "AaBaCaCb"
    - length_in_range: [4, 10]
      formula: "AaBaCaZa"

import_tables:
  - wubi86	#这个是默认使用五笔词库,没事别删
  - wubi86_sougou_stand.extended   #这个是搜狗标准库,以后别的词库也要这样输入进来才有效
...

# wubi86_sougou_stand.extended.dict.yaml
---
name: wubi86_sougou_stand.extended
version: "1.0"
sort: by_weight
columns:
  - text
  - code
  - weight
  - stem
encoder:
  exclude_patterns:
    - '^z.*$'
  rules:
    - length_equal: 2
      formula: "AaAbBaBb"
    - length_equal: 3
      formula: "AaBaCaCb"
    - length_in_range: [4, 10]
      formula: "AaBaCaZa"
...
# 下面是词库
啊啊啊	kkkb	1
阿埃二氏病变	bffy	1
阿埃二氏手术	bffs	1
阿埃二氏损害	bffp	1
# wubi86.dict.yaml
---
name: wubi86
version: "0.7"
sort: by_weight
columns:
  - text
  - code
  - weight
  - stem
encoder:
  exclude_patterns:
    - '^z.*$'
  rules:
    - length_equal: 2
      formula: "AaAbBaBb"
    - length_equal: 3
      formula: "AaBaCaCb"
    - length_in_range: [4, 10]
      formula: "AaBaCaZa"
...

工	a	99454797	aa
了	b	1477224452	bn
#子	b	1477224451
以	c	418261033	ny
  1. 造词规则是否只能放在词典文件 *.dict.yaml 中?将造词规则放在 wubi86.custom.yaml 应该不起任何作用吧?

  2. 放在 wubi86_feijie.dict.yaml 中是否代表自造词放在扩展词库内了,还是仍然被放在用户词典内? 有一点想要强调一下,wubi86_feijie.dict.yaml 仅仅是一个中间文件,并还是真正的词库。我把造词规则放在这里合适吗? 使用扩展词库引入中间文件的话有三种组合,哪种是合适的?一是将造词规则放在中间文件 wubi86_feijie.dict.yaml 中,二是只需要在中间文件引入的各个词典中添加,三是在中间文件和中间文件引入的各个词典中都需要添加?

  3. 在此之前并没有定义 translator/user_dict: wubi86 ,但如果不添加扩展词库,自动造词功能便一切正常,其中的机制是什么?不添加扩展词库,便会默认启用/访问用户词典吗?

feijie825 avatar Aug 17 '22 05:08 feijie825

造词规则只在 translator/dictionary 所指定的词典(固态词典的源文件 *.dict.yaml)中配置,具体位置是 encoder 选项。通过 import_tables 导入码表,等效于将被导入的内容复制到本词典中(在统一的列顺序下),不会读取被导入码表的 encoder 配置。

只有用户词典会记录用户输入,所以自造词只能在用户词典中。

对于最后一个问题,关键信息在上次的回复中——用户词典默认与固态词典同名:所以对于原方案,translator/user_dict: wubi86 是可以省略的。当修改固态词典的名称后,用户词典也自动变更名称,所以翻译器将不再访问原来的用户词典 wubi86,除非明文定义之。

Ace-Who avatar Aug 17 '22 12:08 Ace-Who

造词规则只在 translator/dictionary 所指定的词典(固态词典的源文件 *.dict.yaml)中配置,具体位置是 encoder 选项。通过 import_tables 导入码表,等效于将被导入的内容复制到本词典中(在统一的列顺序下),不会读取被导入码表的 encoder 配置。

只有用户词典会记录用户输入,所以自造词只能在用户词典中。

对于最后一个问题,关键信息在上次的回复中——用户词典默认与固态词典同名:所以对于原方案,translator/user_dict: wubi86 是可以省略的。当修改固态词典的名称后,用户词典也自动变更名称,所以翻译器将不再访问原来的用户词典 wubi86,除非明文定义之。

十分感谢大佬!解释的清晰明了👍

现在功能全部正常,但候选里面出现很多繁体词组,这个有办法避免掉吗?

比如我打”造词“,会出现下面这些: 其中3、4、5、6、7这几项不是我期望的,需要的是简体词组。

“詞”在固态词典 wubi86 中;“造詞”选中让它上屏一次以后,在导出的用户词典文本中可以搜索到;“德慶”在任何一个词典中都不存在,却也出现在候选字当中。 image

feijie825 avatar Aug 18 '22 01:08 feijie825