Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The --no-text-lang-skip parameter is ineffective for Chinese, and --skip-lang is ineffective for all languages. #734

Open
popcion opened this issue Nov 8, 2024 · 0 comments

Comments

@popcion
Copy link
Contributor

popcion commented Nov 8, 2024

关于--skip-lang
经过测试我发现译前过滤的参数--skip-lang并不会像文档中说明的一样,文档中的描述是译前跳过指定的源语言

Skip translation if source image is one of the provide languages,
use comma to separate multiple

而实际上是源语言和目标语言相同时才会跳过翻译,例如一篇源语言为ENG的漫画:
--skip-lang ENG --target-lang CHS 这不会过滤任何内容
--skip-lang ENG --target-lang ENG 这会过滤源语言为ENG的内容
[EDIT]
边测边写大概猜了猜--skip-lang失灵的可能原因.....下面是对一页源语言为ENG,目标语言也为ENG的一页漫画的检测,同时设置--skip-lang ENG。我在manga_translator.py# -- OCR下面添加了

logger.info(f'Detected source_language: {source_language}, in skip_langs: {source_language in skip_langs}')

进行输出,通过下面的输出结果可见这个源语言识别库不太行,源语言大量错误识别导致指定--skip-lang失去了意义。但是即使少量的源语言成功被判断为ENG,也没有因为ENG在skip_langs列表中而过滤这些少数被成功判断的句子,这彻底说明--skip-lang没用了。但是事实上ENG to ENG的这些句子仍然会被过滤掉,并不是因为--skip-lang的作用,而是因为这些句子满足了_run_textline_merge函数中的

not ctx.no_text_lang_skip and langcodes.tag_distance(region.source_lang, ctx.target_lang) == 0

而在译前被过滤了,ENG to CHS由于没有满足这个条件而没有任何内容被过滤,--skip-lang没有起到任何作用,即使不添加--skip-lang结果也是一样的。

[web_client] Detected source_language: PTB, in skip_langs: False
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: FIL, in skip_langs: False
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: ENG, in skip_langs: True
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: VIN, in skip_langs: False
[web_client] Detected source_language: NLD, in skip_langs: False
[web_client] Detected source_language: ENG, in skip_langs: True
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: ENG, in skip_langs: True
[web_client] Detected source_language: UNKNOWN, in skip_langs: False
[web_client] Detected source_language: DEU, in skip_langs: False
[web_client] Detected source_language: PTB, in skip_langs: False
[web_client] Detected source_language: ENG, in skip_langs: True
[web_client] Detected source_language: DEU, in skip_langs: False

关于--no-text-lang-skip
--no-text-lang-skip在文档中的说明是不跳过与目标语言相同的文本。(这个描述同样符合当下--skip-lang的结果,虽然结果是歪打正着的)

--no-text-lang-skip Dont skip text that is seemingly already in the target
language.

一页源语言为ENG的漫画的例子(此例为正常):

--no-text-lang-skip-lang --target-lang CHS 源语言为ENG的一页漫画正常翻译成了中文
--target-lang CHS 源语言为ENG的一页漫画正常翻译成了中文(不添加--no-text-lang-skip-lang)

[EDIT]关于--no-text-lang-skip参数测明白了...
满足--no-text-lang-skip为false,且源语言和目标语言相同会被过滤。

以源语言ENG,目标语言CHS/ENG为例:

1.--no-text-lang-skip为false,源语言和目标语言不同(ENG to CHS),不过滤
2.--no-text-lang-skip为true,源语言和目标语言不同(ENG to CHS),不过滤
3.--no-text-lang-skip为false,源语言和目标语言相同(ENG to ENG),过滤
4.--no-text-lang-skip为true,源语言和目标语言相同(ENG to ENG),不过滤

看来是有前提的,当源语言和目标语言相同时 --no-text-lang-skip才会起作用,如ENG to ENG,CHS to CHS。但是这引出了一个问题,--no-text-lang-skip默认为false时确实可以正确过滤英文文本,这也说明了下面的式子被满足了。

not ctx.no_text_lang_skip and langcodes.tag_distance(region.source_lang, ctx.target_lang) == 0

意味着源语言和目标语言判断为相同,所以源语言实际上被正确识别了,但是前面我提到的源语言识别库难以识别源语言的,在这里就不会被判断成相同也不会被过滤,而事实上却被判断成了相同且过滤了,说明之前的说法有问题,但是上方打印出来的结果又显示识别出了多种源语言,这个矛盾百思不得其解。而且既然实际上源语言是正确识别的,则进一步证明了--skip-lang这个参数是无效的。

[EDIT]再次测试发现--no-text-lang-skip参数是对中文无效(这也是我最初遇到的问题)

以源语言CHS,目标语言CHS为例:

3.--no-text-lang-skip为false,源语言和目标语言相同(CHS to CHS),不过滤
4.--no-text-lang-skip为true,源语言和目标语言相同(CHS to CHS),不过滤

可以看出在目标语言相同时,无论是否设置--no-text-lang-skip,只要是 中文==>中文 ,译前都不能正常过滤,使得中文失去了控制译前过滤的开关,而译后却会满足_run_text_translation函数中的条件而被过滤。

not ctx.translator == 'original' and region.text.lower().strip() == region.translation.lower().strip())

而译后过滤当前又没有开关,导致只要出现中译中就必然在译后被过滤(出现英译英等却能在译前用--no-text-lang-skip过滤,但是中文无效),现在想要在译前过滤中文节省token无法实现,想在译后让一些日语汉字不被检测成汉语过滤掉无法实现 ( 译后在所有情况下都会过滤源文本和目标文本相同的内容导致在渲染JPA to CHS时被过滤掉的汉字有概率被涂抹覆盖,需要特殊处理,见#721 ),译前译后都和需求反着来了,需要对中文的译前译后过滤做修复。

译后对中文过滤的动态控制的需求满足了,只对目标文本为CHT/CHS有效对目标文本'CHS', 'CHT', 'JPN', 'KOR', 'IND', 'UKR', 'RUS', 'THA', 'ARA'有效,只有当前页所有句子译前译后相同时,源文本和目标文本相同的结果才会被过滤,对目标语言为这9种语言时使用风险抵触型方法,不像原来的过滤模式那么激进。
#739

还剩译前过滤参数--skip-lang的修复,译前过滤参数--no-text-lang-skip支持中文的修复

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant