LunaTranslator/docs/cht/textprocess.md
CHLBC f084c290c1
Update CHT Translation and Tutorial (#1997)
* fix: cht

* fix: cht yu to wen

* fix: cht docs

* checkout: f57e114 emugames.md
2025-11-11 16:21:31 +08:00

114 lines
No EOL
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 各種文字處理方法的作用和用法
::: info
一般在 HOOK 模式下,有時會讀取到錯誤的文字,例如有重複的文字,或者其他亂七八糟的文字,這時需要使用文字處理來解決。
:::
::: tip
如果有非常複雜的錯誤形式,可以透過啟用多種處理方式,並調整他們的執行順序來得到豐富的處理方法組合。
:::
::: tip
內嵌翻譯時大部份的處理方法不會生效,以減少遊戲崩潰的可能。可以使用的方法包括:`過濾換行符號` `字串取代` `自訂 Python 處理` `過濾角括號<>` `去除花括號{}`
:::
1. #### 過濾文字中的非日文字元集字元 {#anchor-_remove_non_shiftjis_char}
有時,會 HOOK 到一些亂碼文字。由於一般是日文遊戲會出現這個問題,因此預設了這個方法,來過濾掉**無法使用 Shift_JIS 字元集編碼的字元**,例如:
`エマさんԟのイԠラストは全部大好き!`會被處理成`エマさんのイラストは全部大好き!`
1. #### 過濾控制字元 {#anchor-_remove_control}
這個方法會過濾掉文字中的 ASCII 碼控制符,例如``等。
1. #### 過濾英文標點 {#anchor-_remove_symbo}
這個方法會過濾掉文字中```!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~```。
1. #### 過濾「」以外的字元 {#anchor-_remove_not_in_ja_bracket}
例如:`こなみ「ひとめぼれってやつだよね……」`將被處理為`「ひとめぼれってやつだよね……」`。
1. #### 去除花括號 {} {#anchor-_1}
許多遊戲腳本使用{}和一些其他字元來給漢字加讀音,例如:`{漢字/讀音}`和`{漢字:讀音}`,如`「{恵麻/えま}さん、まだ{起き/おき}てる?」`或`「{恵麻:えま}さん、まだ{起き:おき}てる?」`將被處理成`「恵麻さん、まだ起きてる?」`。會先按照這些模式嘗試去除讀音標註,然後去除所有花括號及其內的內容。
1. #### 截取指定行數 {#anchor-lines_threshold_1}
該方法會截取**截取行數**所指定的行數。
如果啟用了**截取末尾**,則會截取末尾的指定行數文字。
1. #### HOOK 去除重複字元 AAAABBBBCCCC->ABC {#anchor-_2}
::: info
該過濾器僅會對 HOOK 模式讀取到的文字生效。
:::
這個是最常用的過濾器。
由於遊戲的文字有時會繪製一遍文字、再繪製一遍陰影、再繪製一遍描邊等之類的原因HOOK 模式會多次擷取到被重複繪製的字元。例如`恵恵恵麻麻麻さささんんんははは再再再びびび液液液タタタブブブへへへ視視視線線線ををを落落落とととすすす。。。`,這個方法會將他處理成`恵麻さんは再び液タブへ視線を落とす。`。預設的重複次數是`1`代表會自動分析重複的字數,但也有分析地不準確的情況,建議指定一個確定的重複字數。
1. #### HOOK 去除重複的列 ABCDABCDABCD->ABCD {#anchor-_3}
::: info
該過濾器僅會對 HOOK 模式讀取到的文字生效。
:::
這個也比較常見,和上面的類似,只不過一般不會反覆重新整理,而是快速地一次重新整理多次。效果為`恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。`會變成`恵麻さんは再び液タブへ視線を落とす。`。同樣,預設的重複次數是`1`代表會自動分析重複的字數,但也有分析地不準確的情況,建議指定一個確定的重複字數。
1. #### HOOK 去除重複的列 S1S1S1S2S2S2->S1S2 {#anchor-_3_2}
::: info
該過濾器僅會對 HOOK 模式讀取到的文字生效。
:::
這個相對比較複雜,有時每個句子的重新整理次數是不完全一樣的,這時只能完全由程式分析來決定如何去重。例如`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。私は恵麻さんの目元を優しくハンカチで拭う。` 其中`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。`重複了 3 次,`なんてニヤニヤしていると、恵麻さんが振り返った。`沒有重複,`私は恵麻さんの目元を優しくハンカチで拭う。`重複了 2 次,最終經過分析將得到`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。`,其中因為過於複雜,會存在少許的分析錯誤,這也是無法避免的,但一般基本都能正確地得到結果。
1. #### HOOK 去除重複的列 ABCDBCDCDD->ABCD {#anchor-_10}
::: info
該過濾器僅會對 HOOK 模式讀取到的文字生效。
:::
這個也比較常見。這個出現的原因是,有時 HOOK 的某個顯示文字的函式,其參數是顯示的文字,這個函式在每顯示一個字元時都會調用,且每次會把參數的字串指向下一個字元,從而導致其實第一次調用就已經得到完整的文字了,後續每次又輸出了剩下的子串,直到長度遞減為 0。例如`恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。`經過分析將判斷真實的文字應該是`恵麻さんは再び液タブへ視線を落とす。`。
1. #### HOOK 去除重複的列 AABABCABCD->ABCD {#anchor-_13EX}
::: info
該過濾器僅會對 HOOK 模式讀取到的文字生效。
:::
這個也比較常見,出現的原因是,每次繪製一個字元,然後繪製下一個字元時會把前面的字元都再繪製一遍。例如`恵麻恵麻さ恵麻さん恵麻さんは恵麻さんは再恵麻さんは再び恵麻さんは再び液恵麻さんは再び液タ恵麻さんは再び液タブ恵麻さんは再び液タブへ恵麻さんは再び液タブへ視恵麻さんは再び液タブへ視線恵麻さんは再び液タブへ視線を恵麻さんは再び液タブへ視線を落恵麻さんは再び液タブへ視線を落と恵麻さんは再び液タブへ視線を落とす恵麻さんは再び液タブへ視線を落とす。`經過分析將判斷真實的文字應該是`恵麻さんは再び液タブへ視線を落とす。`。
當有多行文字時,會每行單獨按照上面的邏輯來重複,從而帶來了更多的複雜性。由於過於複雜,這個處理方式經常難以正確處理,如果遇到了,建議寫自訂 Python 處理來解決。
1. #### 過濾角括號 <> {#anchor-_4}
這個實際上是過濾 HTML 標籤,怕小白不知道是什麼意思所以這麼寫的名字。例如`<div>`和`</div>`和`<div id="dsds">`等都會被過濾。這個主要用在 TyranoScript 遊戲中HOOK 擷取的文字是 innerHTML一般都會帶有許多這個標籤。
1. #### 過濾換行符號 {#anchor-_6EX}
如果來源語言不是日文,那麼當過濾換行符號時,將會把換行符號取代成空格而非過濾掉,來避免多個單字連到一起。
1. #### 過濾數字 {#anchor-_91}
這個方法會過濾掉文字中的數字`0``9`。
1. #### 過濾英文字母 {#anchor-_92}
這個方法會過濾掉文字中的英文字母`A``Z`與`a``z`。
1. #### 自訂 Python 處理 {#anchor-_11}
撰寫一個 Python 腳本來進行更加複雜的處理,當處理腳本不存在時,將自動在`userconfig`目錄下生成`mypost.py`檔案和以下範本:
```python
def POSTSOLVE(line):
# 請在這裡編寫自訂處理
return line
```
1. #### 字串取代 {#anchor-stringreplace}
不止是取代,主要也可以用來過濾。例如可以將固定的若干亂碼字元、反覆重新整理的倒三角字元等透過取代成空白來進行過濾。
可同時啟用`正則`和`跳脫`兩個選項,或僅選擇其中一個,或均不啟用。
均不啟用時,將使用普通的字串取代。
啟用`跳脫`後,輸入的內容都會被視為跳脫字串,而非字串常值。例如可以使用`\n`來表示換行符號,從而可以實現過濾僅在換行符號前後出現的字元等。
啟用`正則`後,將使用正則表達式取代。