This commit is contained in:
test123456654321 2024-10-28 12:00:12 +08:00
parent bb6c0f7efd
commit 50d2550511
9 changed files with 317 additions and 326 deletions

View File

@ -4,27 +4,27 @@
This method utilizes parameters such as “Image Stability Threshold,” “Image Consistency Threshold,” and “Text Similarity Threshold.”
#### 1. Image Stability Threshold
1. #### Image Stability Threshold
When game text does not appear immediately (text speed is not the fastest), or when the game has a dynamic background or live2D elements, the captured images will continuously change.
When game text does not appear immediately (text speed is not the fastest), or when the game has a dynamic background or live2D elements, the captured images will continuously change.
Each time a screenshot is taken, it is compared to the previous screenshot to calculate similarity. When the similarity exceeds the threshold, the image is considered stable, and the next step is performed.
Each time a screenshot is taken, it is compared to the previous screenshot to calculate similarity. When the similarity exceeds the threshold, the image is considered stable, and the next step is performed.
If it can be confirmed that the game is completely static, this value can be set to 0. Conversely, if it isn't, this value should be appropriately increased.
If it can be confirmed that the game is completely static, this value can be set to 0. Conversely, if it isn't, this value should be appropriately increased.
#### 2. Image Consistency Threshold
1. #### Image Consistency Threshold
This parameter is the most important one.
This parameter is the most important one.
After the image stabilizes, the current image is compared to the image at the last OCR execution (not the last screenshot). When the similarity is lower than this threshold, it is considered that the game text has changed, and OCR is performed.
After the image stabilizes, the current image is compared to the image at the last OCR execution (not the last screenshot). When the similarity is lower than this threshold, it is considered that the game text has changed, and OCR is performed.
If the OCR frequency is too high, this value can be appropriately increased; conversely, if it is too sluggish, it can be appropriately decreased.
If the OCR frequency is too high, this value can be appropriately increased; conversely, if it is too sluggish, it can be appropriately decreased.
#### 3. Text Similarity Threshold
1. #### Text Similarity Threshold
The results of OCR are unstable, and minor disturbances in the image can cause slight changes in the text, leading to repeated translations.
The results of OCR are unstable, and minor disturbances in the image can cause slight changes in the text, leading to repeated translations.
After each OCR invocation, the current OCR result is compared to the previous OCR result (using edit distance). Only when the edit distance is greater than the threshold will the text be outputted.
After each OCR invocation, the current OCR result is compared to the previous OCR result (using edit distance). Only when the edit distance is greater than the threshold will the text be outputted.
### Periodic Execution
@ -39,22 +39,22 @@ Combining the above two methods, OCR is executed at least once every “Executio
### Mouse/Keyboard Trigger + Wait for Stability
#### 1. Trigger Events
1. #### Trigger Events
By default, the following mouse/keyboard events trigger this method: pressing the left mouse button, pressing Enter, releasing Ctrl, releasing Shift, and releasing Alt. If the game window is bound, the method is triggered only when the game window is the foreground window.
By default, the following mouse/keyboard events trigger this method: pressing the left mouse button, pressing Enter, releasing Ctrl, releasing Shift, and releasing Alt. If the game window is bound, the method is triggered only when the game window is the foreground window.
After triggering the method, a short wait period is required for the game to render new text, considering that text may not appear immediately (if the text speed is not the fastest).
After triggering the method, a short wait period is required for the game to render new text, considering that text may not appear immediately (if the text speed is not the fastest).
Once the method is triggered and stability is achieved, a translation is always performed, without considering the similarity of the text.
Once the method is triggered and stability is achieved, a translation is always performed, without considering the similarity of the text.
If the text speed is the fastest, both of the following parameters can be set to 0. Otherwise, the time needed to wait is determined by the following parameters:
If the text speed is the fastest, both of the following parameters can be set to 0. Otherwise, the time needed to wait is determined by the following parameters:
#### 2. Delay (s)
1. #### Delay (s)
Wait for a fixed delay time (there is an inherent delay of 0.1 seconds built-in to accommodate the internal logic handling of game engines).
Wait for a fixed delay time (there is an inherent delay of 0.1 seconds built-in to accommodate the internal logic handling of game engines).
#### 3. Image Stability Threshold
1. #### Image Stability Threshold
This value is similar to the previously mentioned parameter with the same name. However, this is used solely to determine whether the text rendering is complete, and thus it does not share the configuration with the similarly named parameter above.
This value is similar to the previously mentioned parameter with the same name. However, this is used solely to determine whether the text rendering is complete, and thus it does not share the configuration with the similarly named parameter above.
Due to the unpredictable rendering times of slower text speeds, a specified fixed delay might not suffice. The action is executed when the similarity between the image and the previous screenshot is higher than the threshold.
Due to the unpredictable rendering times of slower text speeds, a specified fixed delay might not suffice. The action is executed when the similarity between the image and the previous screenshot is higher than the threshold.

View File

@ -4,119 +4,119 @@
> If there are very complex error forms, you can activate multiple processing methods and adjust their execution order to obtain a rich combination of processing methods.
**1. Filter Non-Japanese Character Set Characters in Text**
1. #### Filter Non-Japanese Character Set Characters in Text
Sometimes, garbled text is hooked. Since this problem usually occurs in Japanese games, this method is preset to filter out **characters that cannot be encoded using the shift-jis character set**, for example:
Sometimes, garbled text is hooked. Since this problem usually occurs in Japanese games, this method is preset to filter out **characters that cannot be encoded using the shift-jis character set**, for example:
`エマさんԟのイԠラストは全部大好き!` will be processed into `エマさんのイラストは全部大好き!`
`エマさんԟのイԠラストは全部大好き!` will be processed into `エマさんのイラストは全部大好き!`
**2. Filter Control Characters**
1. #### Filter Control Characters
This method will filter out ASCII control characters in the text, such as `` etc.
This method will filter out ASCII control characters in the text, such as `` etc.
**3. Filter English Punctuation**
1. #### Filter English Punctuation
This method will filter out ```!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~``` in the text.
This method will filter out ```!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~``` in the text.
**4. Filter Other Garbled Text**
1. #### Filter Other Garbled Text
This requires setting the allowed character encoding or Unicode range in the settings. Characters not allowed will be filtered out.
This requires setting the allowed character encoding or Unicode range in the settings. Characters not allowed will be filtered out.
**5. Filter Characters Outside「」**
1. #### Filter Characters Outside「」
For example: `こなみ「ひとめぼれってやつだよね……」` will be processed into `「ひとめぼれってやつだよね……」`
For example: `こなみ「ひとめぼれってやつだよね……」` will be processed into `「ひとめぼれってやつだよね……」`
**6. Remove Curly Braces {}**
1. #### Remove Curly Braces {}
This is not exactly as it seems; it is mainly used to filter Japanese furigana. Many game scripts use {} and some other characters to add furigana to kanji. It supports two furigana formats: `{汉字/注音}` and `{汉字:注音}`, for example:
This is not exactly as it seems; it is mainly used to filter Japanese furigana. Many game scripts use {} and some other characters to add furigana to kanji. It supports two furigana formats: `{汉字/注音}` and `{汉字:注音}`, for example:
`「{恵麻/えま}さん、まだ{起き/おき}てる?」` or `「{恵麻:えま}さん、まだ{起き:おき}てる?」` will be processed into `「恵麻さん、まだ起きてる?」`
`「{恵麻/えま}さん、まだ{起き/おき}てる?」` or `「{恵麻:えま}さん、まだ{起き:おき}てる?」` will be processed into `「恵麻さん、まだ起きてる?」`
**7. Filter or Truncate by Word Count**
1. #### Filter or Truncate by Word Count
This method determines how to handle the text based on its word count.
This method determines how to handle the text based on its word count.
If the text length is less than the minimum word count, the text will be filtered out. For example, some games continuously refresh a single inverted triangle character in a static state, which can be filtered using this method.
If the text length is less than the minimum word count, the text will be filtered out. For example, some games continuously refresh a single inverted triangle character in a static state, which can be filtered using this method.
If the text length exceeds the maximum word count, if **Truncate instead of Filter when exceeding maximum word count** is activated, it will truncate the text to the specified word count; otherwise, the text will be completely filtered out.
If the text length exceeds the maximum word count, if **Truncate instead of Filter when exceeding maximum word count** is activated, it will truncate the text to the specified word count; otherwise, the text will be completely filtered out.
If **Reverse Truncation when Truncating** is activated, when truncating, it will keep the last `maximum word count` words; otherwise, it will keep the first `maximum word count` words.
If **Reverse Truncation when Truncating** is activated, when truncating, it will keep the last `maximum word count` words; otherwise, it will keep the first `maximum word count` words.
**8. Filter or Truncate by Line Count**
1. #### Filter or Truncate by Line Count
This is similar to the above, but it determines based on the number of lines in the text. It can be mainly used to truncate the first three lines of the text, or the last line of the text, or to filter out lines that are too many or too few.
This is similar to the above, but it determines based on the number of lines in the text. It can be mainly used to truncate the first three lines of the text, or the last line of the text, or to filter out lines that are too many or too few.
If the number of lines in the text is less than the minimum line count, the text will be filtered out.
If the number of lines in the text is less than the minimum line count, the text will be filtered out.
If the number of lines in the text exceeds the maximum line count, if **Truncate instead of Filter when exceeding maximum line count** is activated, it will truncate the text to the specified number of lines; otherwise, the text will be completely filtered out.
If the number of lines in the text exceeds the maximum line count, if **Truncate instead of Filter when exceeding maximum line count** is activated, it will truncate the text to the specified number of lines; otherwise, the text will be completely filtered out.
If **Reverse Truncation when Truncating** is activated, when truncating, it will keep the last `maximum line count` lines; otherwise, it will keep the first `maximum line count` lines.
If **Reverse Truncation when Truncating** is activated, when truncating, it will keep the last `maximum line count` lines; otherwise, it will keep the first `maximum line count` lines.
**9. Remove Duplicate Characters _AAAABBBBCCCC->ABC**
1. #### Remove Duplicate Characters _AAAABBBBCCCC->ABC
This is the most commonly used filter.
This is the most commonly used filter.
Due to the way games sometimes draw text (e.g., drawing text, then shadow, then outline), HOOK mode may extract the same characters multiple times. For example, `恵恵恵麻麻麻さささんんんははは再再再びびび液液液タタタブブブへへへ視視視線線線ををを落落落とととすすす。。。` will be processed into `恵麻さんは再び液タブへ視線を落とす。`. The default repetition count is `1`, which automatically analyzes the number of repeated characters, but there may be inaccuracies, so it is recommended to specify a definite repetition count.
Due to the way games sometimes draw text (e.g., drawing text, then shadow, then outline), HOOK mode may extract the same characters multiple times. For example, `恵恵恵麻麻麻さささんんんははは再再再びびび液液液タタタブブブへへへ視視視線線線ををを落落落とととすすす。。。` will be processed into `恵麻さんは再び液タブへ視線を落とす。`. The default repetition count is `1`, which automatically analyzes the number of repeated characters, but there may be inaccuracies, so it is recommended to specify a definite repetition count.
**10. Filter Historical Duplicates LRU**
1. #### Filter Historical Duplicates LRU
Sometimes, the way the game redraws text is not character by character but line by line, and it continuously redraws the current displayed text in a static state. For example, if the current display is two lines of text `你好` and `哈哈`, without using this method, it will repeatedly output `你好哈哈你好哈哈你好哈哈你好哈哈……`. Using this method, it caches several recently output texts, and when the cache is full and new text appears, it removes the earliest text in the cache, thus preventing recent texts from repeatedly refreshing.
Sometimes, the way the game redraws text is not character by character but line by line, and it continuously redraws the current displayed text in a static state. For example, if the current display is two lines of text `你好` and `哈哈`, without using this method, it will repeatedly output `你好哈哈你好哈哈你好哈哈你好哈哈……`. Using this method, it caches several recently output texts, and when the cache is full and new text appears, it removes the earliest text in the cache, thus preventing recent texts from repeatedly refreshing.
**11. Remove Duplicate Lines _ABCDABCDABCD->ABCD**
1. #### Remove Duplicate Lines _ABCDABCDABCD->ABCD
This is also common, similar to the above, but generally does not refresh repeatedly, but quickly refreshes multiple times. The effect is `恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。` will become `恵麻さんは再び液タブへ視線を落とす。`. Similarly, the default repetition count is `1`, which automatically analyzes the number of repeated characters, but there may be inaccuracies, so it is recommended to specify a definite repetition count.
This is also common, similar to the above, but generally does not refresh repeatedly, but quickly refreshes multiple times. The effect is `恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。` will become `恵麻さんは再び液タブへ視線を落とす。`. Similarly, the default repetition count is `1`, which automatically analyzes the number of repeated characters, but there may be inaccuracies, so it is recommended to specify a definite repetition count.
**12. Remove Duplicate Lines _S1S1S1S2S2S2->S1S2**
1. #### Remove Duplicate Lines _S1S1S1S2S2S2->S1S2
This is relatively complex; sometimes, the refresh count of each sentence is not exactly the same, so the program must analyze how to deduplicate. For example, `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。私は恵麻さんの目元を優しくハンカチで拭う。` where `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。` repeats 3 times, `なんてニヤニヤしていると、恵麻さんが振り返った。` does not repeat, and `私は恵麻さんの目元を優しくハンカチで拭う。` repeats 2 times, the final analysis will get `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。`, where due to the complexity, there may be a few analysis errors, which is unavoidable, but generally, it can get the correct result.
This is relatively complex; sometimes, the refresh count of each sentence is not exactly the same, so the program must analyze how to deduplicate. For example, `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。私は恵麻さんの目元を優しくハンカチで拭う。` where `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。` repeats 3 times, `なんてニヤニヤしていると、恵麻さんが振り返った。` does not repeat, and `私は恵麻さんの目元を優しくハンカチで拭う。` repeats 2 times, the final analysis will get `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。`, where due to the complexity, there may be a few analysis errors, which is unavoidable, but generally, it can get the correct result.
**13. Filter Angle Brackets <>**
1. #### Filter Angle Brackets <>
This is actually filtering HTML tags, but the name is written this way to avoid confusion for beginners. For example, `<div>`, `</div>`, and `<div id="dsds">` will be filtered. This is mainly used in TyranoScript games where the HOOK extracts the text as innerHTML, usually containing many such tags.
This is actually filtering HTML tags, but the name is written this way to avoid confusion for beginners. For example, `<div>`, `</div>`, and `<div id="dsds">` will be filtered. This is mainly used in TyranoScript games where the HOOK extracts the text as innerHTML, usually containing many such tags.
**14. Filter Newline Characters**
1. #### Filter Newline Characters
Originally named **Filter Newline Characters Language Adaptive**, the old **Filter Newline Characters** has been deprecated.
Originally named **Filter Newline Characters Language Adaptive**, the old **Filter Newline Characters** has been deprecated.
If the source language is not Japanese, when filtering newline characters, they will be replaced with spaces instead of being filtered out to avoid multiple words being connected together.
If the source language is not Japanese, when filtering newline characters, they will be replaced with spaces instead of being filtered out to avoid multiple words being connected together.
**15. Filter Numbers**
1. #### Filter Numbers
N/A
N/A
**16. Filter English Letters**
1. #### Filter English Letters
N/A
N/A
**17. Remove Duplicate Lines _ABCDBCDCDD->ABCD**
1. #### Remove Duplicate Lines _ABCDBCDCDD->ABCD
This is also common. The reason for this is that sometimes the function HOOKed to display text has the displayed text as a parameter, which is called every time a character is displayed, and each time the parameter string points to the next character, resulting in the fact that the first call has already obtained the complete text, and subsequent calls output the remaining substring until the length decreases to 0. For example, `恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。` will be analyzed to determine that the real text should be `恵麻さんは再び液タブへ視線を落とす。`
This is also common. The reason for this is that sometimes the function HOOKed to display text has the displayed text as a parameter, which is called every time a character is displayed, and each time the parameter string points to the next character, resulting in the fact that the first call has already obtained the complete text, and subsequent calls output the remaining substring until the length decreases to 0. For example, `恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。` will be analyzed to determine that the real text should be `恵麻さんは再び液タブへ視線を落とす。`
**18. Remove Duplicate Lines _AABABCABCD->ABCD**
1. #### Remove Duplicate Lines _AABABCABCD->ABCD
This is also common. The reason for this is that every time a character is drawn, the previous characters are redrawn when the next character is drawn. For example, `恵麻恵麻さ恵麻さん恵麻さんは恵麻さんは再恵麻さんは再び恵麻さんは再び液恵麻さんは再び液タ恵麻さんは再び液タブ恵麻さんは再び液タブへ恵麻さんは再び液タブへ視恵麻さんは再び液タブへ視線恵麻さんは再び液タブへ視線を恵麻さんは再び液タブへ視線を落恵麻さんは再び液タブへ視線を落と恵麻さんは再び液タブへ視線を落とす恵麻さんは再び液タブへ視線を落とす。` will be analyzed to determine that the real text should be `恵麻さんは再び液タブへ視線を落とす。`
This is also common. The reason for this is that every time a character is drawn, the previous characters are redrawn when the next character is drawn. For example, `恵麻恵麻さ恵麻さん恵麻さんは恵麻さんは再恵麻さんは再び恵麻さんは再び液恵麻さんは再び液タ恵麻さんは再び液タブ恵麻さんは再び液タブへ恵麻さんは再び液タブへ視恵麻さんは再び液タブへ視線恵麻さんは再び液タブへ視線を恵麻さんは再び液タブへ視線を落恵麻さんは再び液タブへ視線を落と恵麻さんは再び液タブへ視線を落とす恵麻さんは再び液タブへ視線を落とす。` will be analyzed to determine that the real text should be `恵麻さんは再び液タブへ視線を落とす。`
**19. Remove Duplicate Lines _AABABCABCDEEFEFG->ABCDEFG**
1. #### Remove Duplicate Lines _AABABCABCDEEFEFG->ABCDEFG
This is similar to the above, but when there are multiple lines of text, each line is processed separately according to the above logic, which brings more complexity. Due to the complexity, this processing often fails to handle correctly. If encountered, it is recommended to write a custom Python script to solve it.
This is similar to the above, but when there are multiple lines of text, each line is processed separately according to the above logic, which brings more complexity. Due to the complexity, this processing often fails to handle correctly. If encountered, it is recommended to write a custom Python script to solve it.
**20. Custom Python Processing**
1. #### Custom Python Processing
Write a Python script for more complex processing. When the processing script does not exist, it will automatically generate a `mypost.py` file and the following template in the userconfig directory:
Write a Python script for more complex processing. When the processing script does not exist, it will automatically generate a `mypost.py` file and the following template in the userconfig directory:
```
def POSTSOLVE(line):
return line
```
```
def POSTSOLVE(line):
return line
```
**21. String Replacement**
1. #### String Replacement
Not only replacement but also mainly used for filtering. For example, fixed garbled characters, repeatedly refreshed inverted triangle characters, etc., can be filtered by replacing them with blanks.
Not only replacement but also mainly used for filtering. For example, fixed garbled characters, repeatedly refreshed inverted triangle characters, etc., can be filtered by replacing them with blanks.
Both the `Regex` and `Escape` options can be activated simultaneously, or only one of them, or neither.
Both the `Regex` and `Escape` options can be activated simultaneously, or only one of them, or neither.
When neither is activated, ordinary string replacement will be used.
When neither is activated, ordinary string replacement will be used.
When `Escape` is activated, the input content will be treated as an escaped string rather than a string literal. For example, `\n` can be used to represent a newline character, thus enabling filtering of characters that appear only before or after newline characters.
When `Escape` is activated, the input content will be treated as an escaped string rather than a string literal. For example, `\n` can be used to represent a newline character, thus enabling filtering of characters that appear only before or after newline characters.
When `Regex` is activated, regular expression replacement will be used.
When `Regex` is activated, regular expression replacement will be used.

View File

@ -1,40 +1,40 @@
## Functions of Various Translation Optimizations
#### **1. Proper Noun Translation - Direct Replacement**
1. #### Proper Noun Translation - Direct Replacement
This method directly replaces the original text with the translated text before translation. It supports using `Regex` and `Escape` for more complex replacements.
This method directly replaces the original text with the translated text before translation. It supports using `Regex` and `Escape` for more complex replacements.
When the game loads metadata from VNDB, it queries the game's character names as a preset dictionary. However, the translations are in English due to VNDB, and you can modify them to Chinese.
When the game loads metadata from VNDB, it queries the game's character names as a preset dictionary. However, the translations are in English due to VNDB, and you can modify them to Chinese.
<details>
<summary>Example</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/1.png">
</details>
<details>
<summary>Example</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/1.png">
</details>
#### **2. Proper Noun Translation**
1. #### Proper Noun Translation
If using the `sakura large model` and setting the prompt format to support the gpt dictionary prompt, it will be converted into the gpt dictionary format. Otherwise, it will refer to the VNR approach, replacing the original text with the placeholder `ZX?Z` (ps: I don't know what this means), and after the source translation, the placeholder is generally not destroyed. Then, after the translation, the placeholder will be replaced with the translation.
If using the `sakura large model` and setting the prompt format to support the gpt dictionary prompt, it will be converted into the gpt dictionary format. Otherwise, it will refer to the VNR approach, replacing the original text with the placeholder `ZX?Z` (ps: I don't know what this means), and after the source translation, the placeholder is generally not destroyed. Then, after the translation, the placeholder will be replaced with the translation.
For game-specific entries, it is recommended not to add them in `Text Processing` -> `Translation Optimization`. In the past, the game's md5 value was used to distinguish entries for multiple games, but this implementation was not very good and has been deprecated. Now, it is recommended to add game-specific entries in the `Game Settings` -> `Translation Optimization` settings for this method.
For game-specific entries, it is recommended not to add them in `Text Processing` -> `Translation Optimization`. In the past, the game's md5 value was used to distinguish entries for multiple games, but this implementation was not very good and has been deprecated. Now, it is recommended to add game-specific entries in the `Game Settings` -> `Translation Optimization` settings for this method.
The last column `Comment` is only used for the `Sakura Large Model`; other translations will ignore this column.
The last column `Comment` is only used for the `Sakura Large Model`; other translations will ignore this column.
<details>
<summary>Setting Game-specific Entries</summary>
It is recommended to use:
<img src="https://image.lunatranslator.org/zh/transoptimi/2.png">
Instead of:
<img src="https://image.lunatranslator.org/zh/transoptimi/3.png">
</details>
<details>
<summary>Setting Game-specific Entries</summary>
It is recommended to use:
<img src="https://image.lunatranslator.org/zh/transoptimi/2.png">
Instead of:
<img src="https://image.lunatranslator.org/zh/transoptimi/3.png">
</details>
<details>
<summary>Setting the Sakura Large Model Prompt Format to v0.10pre1 (Supports gpt Dictionary)</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/4.png">
</details>
<details>
<summary>Setting the Sakura Large Model Prompt Format to v0.10pre1 (Supports gpt Dictionary)</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/4.png">
</details>
#### **3. Translation Result Correction**
1. #### Translation Result Correction
This method allows for certain corrections to the translation result after translation and can use the entire expression for complex corrections.
This method allows for certain corrections to the translation result after translation and can use the entire expression for complex corrections.
## Game-specific Translation Optimization

View File

@ -4,27 +4,27 @@
Этот метод использует параметры "Порог стабильности изображения", "Порог согласованности изображения" и "Порог сходства текста".
#### 1. Порог стабильности изображения
1. #### Порог стабильности изображения
Когда текст игры не появляется сразу (скорость текста не самая высокая) или игра имеет динамическое фоновое изображение или live2d, захваченное изображение постоянно меняется.
Когда текст игры не появляется сразу (скорость текста не самая высокая) или игра имеет динамическое фоновое изображение или live2d, захваченное изображение постоянно меняется.
При каждом захвате изображения оно сравнивается с предыдущим захватом, вычисляя степень сходства. Если степень сходства больше порогового значения, изображение считается стабильным и производится следующее определение.
При каждом захвате изображения оно сравнивается с предыдущим захватом, вычисляя степень сходства. Если степень сходства больше порогового значения, изображение считается стабильным и производится следующее определение.
Если можно утверждать, что игра полностью статична, этот параметр можно установить в 0, в противном случае его можно увеличить.
Если можно утверждать, что игра полностью статична, этот параметр можно установить в 0, в противном случае его можно увеличить.
#### 2. Порог согласованности изображения
1. #### Порог согласованности изображения
Этот параметр является наиболее важным.
Этот параметр является наиболее важным.
После того как изображение стабилизируется, сравнивается текущее изображение с изображением, на котором была проведена OCR в последний раз (а не с предыдущим захватом). Если степень сходства меньше порогового значения, предполагается, что текст игры изменился и выполняется OCR.
После того как изображение стабилизируется, сравнивается текущее изображение с изображением, на котором была проведена OCR в последний раз (а не с предыдущим захватом). Если степень сходства меньше порогового значения, предполагается, что текст игры изменился и выполняется OCR.
Если частота OCR слишком высока, этот параметр можно увеличить; наоборот, если он слишком медленный, его можно уменьшить.
Если частота OCR слишком высока, этот параметр можно увеличить; наоборот, если он слишком медленный, его можно уменьшить.
#### 3. Порог сходства текста
1. #### Порог сходства текста
Результаты OCR не являются стабильными, часто малые изменения в изображении могут вызвать незначительные изменения в тексте, что, в свою очередь, приводит к повторному переводу.
Результаты OCR не являются стабильными, часто малые изменения в изображении могут вызвать незначительные изменения в тексте, что, в свою очередь, приводит к повторному переводу.
После каждого вызова OCR результаты сравниваются с предыдущими результатами OCR (редакционное расстояние), и текст выводится только при превышении редакционного расстояния пороговым значением.
После каждого вызова OCR результаты сравниваются с предыдущими результатами OCR (редакционное расстояние), и текст выводится только при превышении редакционного расстояния пороговым значением.
### Периодическое выполнение
@ -36,22 +36,22 @@
### Триггер мыши и клавиатуры + Ожидание стабильности
#### 1. Событие триггера
1. #### Событие триггера
По умолчанию следующие события мыши и клавиатуры активируют этот метод: нажатие левой кнопки мыши, нажатие клавиши Enter, отпускание клавиши Ctrl, отпускание клавиши Shift, отпускание клавиши Alt. Если окно игры привязано, метод активируется только тогда, когда окно игры находится в фокусе.
По умолчанию следующие события мыши и клавиатуры активируют этот метод: нажатие левой кнопки мыши, нажатие клавиши Enter, отпускание клавиши Ctrl, отпускание клавиши Shift, отпускание клавиши Alt. Если окно игры привязано, метод активируется только тогда, когда окно игры находится в фокусе.
После активации этого метода, поскольку необходимо подождать, пока игра отрендерит новый текст или пока текст не появится сразу (скорость текста не самая высокая), необходимо немного подождать, пока отображаемый текст стабилизируется.
После активации этого метода, поскольку необходимо подождать, пока игра отрендерит новый текст или пока текст не появится сразу (скорость текста не самая высокая), необходимо немного подождать, пока отображаемый текст стабилизируется.
После активации этого метода и стабилизации будет выполнен перевод, без учета сходства текста.
После активации этого метода и стабилизации будет выполнен перевод, без учета сходства текста.
Если скорость текста является максимальной, следующие два параметра можно установить в 0. В противном случае, для определения времени ожидания необходимы следующие параметры:
Если скорость текста является максимальной, следующие два параметра можно установить в 0. В противном случае, для определения времени ожидания необходимы следующие параметры:
#### 2. Задержка (с)
1. #### Задержка (с)
Ждет фиксированное время задержки (встроенная задержка составляет 0,1 с для удовлетворения внутренней логики обработки игрового движка).
Ждет фиксированное время задержки (встроенная задержка составляет 0,1 с для удовлетворения внутренней логики обработки игрового движка).
#### 3. Порог стабильности изображения
1. #### Порог стабильности изображения
Этот параметр аналогичен вышеупомянутому с同名 параметру. Но он используется только для определения завершения рендеринга текста, поэтому не используется совместно с вышеупомянутым параметром.
Этот параметр аналогичен вышеупомянутому с同名 параметру. Но он используется только для определения завершения рендеринга текста, поэтому не используется совместно с вышеупомянутым параметром.
Поскольку время рендеринга медленного текста нефиксированно, использование указанного фиксированного задержки может быть недостаточным. При выполнении данного триггерного события, когда степень сходства изображения с предыдущим захватом больше порогового значения.
Поскольку время рендеринга медленного текста нефиксированно, использование указанного фиксированного задержки может быть недостаточным. При выполнении данного триггерного события, когда степень сходства изображения с предыдущим захватом больше порогового значения.

View File

@ -4,120 +4,119 @@
> Если есть очень сложные формы ошибок, можно активировать несколько методов обработки и настроить их порядок выполнения, чтобы получить богатый набор методов обработки.
**1. Фильтрация символов, не входящих в японский набор символов в тексте**
1. #### Фильтрация символов, не входящих в японский набор символов в тексте
Иногда считывается текст с глифами. Поскольку эта проблема обычно возникает в японских играх, этот метод заранее фильтрует **символы, которые не могут быть закодированы с использованием набора символов shift-jis**, например:
Иногда считывается текст с глифами. Поскольку эта проблема обычно возникает в японских играх, этот метод заранее фильтрует **символы, которые не могут быть закодированы с использованием набора символов shift-jis**, например:
`エマさんԟのイԠラストは全部大好き!` будет обработан в `エマさんのイラストは全部大好き!`
`エマさんԟのイԠラストは全部大好き!` будет обработан в `エマさんのイラストは全部大好き!`
**2. Фильтрация управляющих символов**
1. #### Фильтрация управляющих символов
Этот метод фильтрует управляющие символы ASCII в тексте, такие как `` и т.д.
Этот метод фильтрует управляющие символы ASCII в тексте, такие как `` и т.д.
**3. Фильтрация пунктуации на английском языке**
1. #### Фильтрация пунктуации на английском языке
Этот метод фильтрует ```!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~``` в тексте.
Этот метод фильтрует ```!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~``` в тексте.
**4. Фильтрация других глифов**
1. #### Фильтрация других глифов
Это требует настройки разрешенных кодировок символов или диапазонов Unicode в настройках. Символы, которые не разрешены, будут отфильтрованы.
Это требует настройки разрешенных кодировок символов или диапазонов Unicode в настройках. Символы, которые не разрешены, будут отфильтрованы.
**5. Фильтрация символов вне「」**
1. #### Фильтрация символов вне「」
Например: `こなみ「ひとめぼれってやつだよね……」` будет обработан в `「ひとめぼれってやつだよね……」`
Например: `こなみ「ひとめぼれってやつだよね……」` будет обработан в `「ひとめぼれってやつだよね……」`
**6. Удаление фигурных скобок {}**
1. #### Удаление фигурных скобок {}
Это не совсем соответствует буквальному значению, на самом деле это в основном используется для фильтрации японского фуриганы. Многие игровые сценарии используют {} и некоторые другие символы для добавления фуриганы к иероглифам. Поддерживаются два формата фуриганы: `{汉字/注音}` и `{汉字:注音}`, например:
Это не совсем соответствует буквальному значению, на самом деле это в основном используется для фильтрации японского фуриганы. Многие игровые сценарии используют {} и некоторые другие символы для добавления фуриганы к иероглифам. Поддерживаются два формата фуриганы: `{汉字/注音}` и `{汉字:注音}`, например:
`「{恵麻/えま}さん、まだ{起き/おき}てる?」` или `「{恵麻:えま}さん、まだ{起き:おき}てる?」` будет обработан в `「恵麻さん、まだ起きてる?」`
`「{恵麻/えま}さん、まだ{起き/おき}てる?」` или `「{恵麻:えま}さん、まだ{起き:おき}てる?」` будет обработан в `「恵麻さん、まだ起きてる?」`
**7. Фильтрация или усечение по количеству слов**
1. #### Фильтрация или усечение по количеству слов
Этот метод определяет, как обрабатывать текст, основываясь на его количестве слов.
Этот метод определяет, как обрабатывать текст, основываясь на его количестве слов.
Если длина текста меньше минимального количества слов, текст будет отфильтрован. Например, в некоторых играх в статическом состоянии непрерывно обновляется один символ в виде перевернутого треугольника, который можно отфильтровать с помощью этого метода.
Если длина текста меньше минимального количества слов, текст будет отфильтрован. Например, в некоторых играх в статическом состоянии непрерывно обновляется один символ в виде перевернутого треугольника, который можно отфильтровать с помощью этого метода.
Если длина текста превышает максимальное количество слов, и активирована опция **Усекать вместо фильтрации при превышении максимального количества слов**, текст будет усечен до указанного количества слов; в противном случае текст будет полностью отфильтрован.
Если длина текста превышает максимальное количество слов, и активирована опция **Усекать вместо фильтрации при превышении максимального количества слов**, текст будет усечен до указанного количества слов; в противном случае текст будет полностью отфильтрован.
Если активирована опция **Обратное усечение при усечении**, при усечении будут сохранены последние `максимальное количество слов` слов; в противном случае будут сохранены первые `максимальное количество слов` слов.
Если активирована опция **Обратное усечение при усечении**, при усечении будут сохранены последние `максимальное количество слов` слов; в противном случае будут сохранены первые `максимальное количество слов` слов.
**8. Фильтрация или усечение по количеству строк**
1. #### Фильтрация или усечение по количеству строк
Это похоже на предыдущий метод, но определяется на основе количества строк в тексте. Он может использоваться для усечения первых трех строк текста или последней строки текста, а также для фильтрации строк, которых слишком много или слишком мало.
Это похоже на предыдущий метод, но определяется на основе количества строк в тексте. Он может использоваться для усечения первых трех строк текста или последней строки текста, а также для фильтрации строк, которых слишком много или слишком мало.
Если количество строк в тексте меньше минимального количества строк, текст будет отфильтрован.
Если количество строк в тексте меньше минимального количества строк, текст будет отфильтрован.
Если количество строк в тексте превышает максимальное количество строк, и активирована опция **Усекать вместо фильтрации при превышении максимального количества строк**, текст будет усечен до указанного количества строк; в противном случае текст будет полностью отфильтрован.
Если количество строк в тексте превышает максимальное количество строк, и активирована опция **Усекать вместо фильтрации при превышении максимального количества строк**, текст будет усечен до указанного количества строк; в противном случае текст будет полностью отфильтрован.
Если активирована опция **Обратное усечение при усечении**, при усечении будут сохранены последние `максимальное количество строк` строк; в противном случае будут сохранены первые `максимальное количество строк` строк.
Если активирована опция **Обратное усечение при усечении**, при усечении будут сохранены последние `максимальное количество строк` строк; в противном случае будут сохранены первые `максимальное количество строк` строк.
**9. Удаление повторяющихся символов _AAAABBBBCCCC->ABC**
1. #### Удаление повторяющихся символов _AAAABBBBCCCC->ABC
Это самый часто используемый фильтр.
Это самый часто используемый фильтр.
Из-за того, что игры иногда рисуют текст, затем тень, затем контур и т.д., режим HOOK может несколько раз извлекать повторяющиеся символы. Например, `恵恵恵麻麻麻さささんんんははは再再再びびび液液液タタタブブブへへへ視視視線線線ををを落落落とととすすす。。。` будет обработан в `恵麻さんは再び液タブへ視線を落とす。`. По умолчанию количество повторений равно `1`, автоматически анализирует количество повторяющихся символов, но также есть случаи неточного анализа, рекомендуется указать определенное количество повторений.
Из-за того, что игры иногда рисуют текст, затем тень, затем контур и т.д., режим HOOK может несколько раз извлекать повторяющиеся символы. Например, `恵恵恵麻麻麻さささんんんははは再再再びびび液液液タタタブブブへへへ視視視線線線ををを落落落とととすすす。。。` будет обработан в `恵麻さんは再び液タブへ視線を落とす。`. По умолчанию количество повторений равно `1`, автоматически анализирует количество повторяющихся символов, но также есть случаи неточного анализа, рекомендуется указать определенное количество повторений.
**10. Фильтрация исторических повторений LRU**
1. #### Фильтрация исторических повторений LRU
Иногда способ повторного рисования игры не по одному символу, а по строкам, и, что еще более извращенно, в статическом состоянии непрерывно перерисовывается текущий отображаемый текст. Например, предположим, что текущий отображаемый текст - две строки `你好` и `哈哈`, если не использовать этот метод, будет повторяться вывод `你好哈哈你好哈哈你好哈哈你好哈哈……`. Используя этот метод, кэшируется несколько недавно выведенных текстов, когда кэш заполнен и появляется новый текст, удаляется самая старая запись в кэше, чтобы недавний текст не повторялся.
Иногда способ повторного рисования игры не по одному символу, а по строкам, и, что еще более извращенно, в статическом состоянии непрерывно перерисовывается текущий отображаемый текст. Например, предположим, что текущий отображаемый текст - две строки `你好` и `哈哈`, если не использовать этот метод, будет повторяться вывод `你好哈哈你好哈哈你好哈哈你好哈哈……`. Используя этот метод, кэшируется несколько недавно выведенных текстов, когда кэш заполнен и появляется новый текст, удаляется самая старая запись в кэше, чтобы недавний текст не повторялся.
**11. Удаление повторяющихся строк _ABCDABCDABCD->ABCD**
1. #### Удаление повторяющихся строк _ABCDABCDABCD->ABCD
Это тоже довольно распространено, похоже на вышеупомянутое, но обычно не повторяется, а быстро обновляется несколько раз. Эффект: `恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。` станет `恵麻さんは再び液タブへ視線を落とす。`. Аналогично, по умолчанию количество повторений равно `1`, автоматически анализирует количество повторяющихся символов, но также есть случаи неточного анализа, рекомендуется указать определенное количество повторений.
Это тоже довольно распространено, похоже на вышеупомянутое, но обычно не повторяется, а быстро обновляется несколько раз. Эффект: `恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。` станет `恵麻さんは再び液タブへ視線を落とす。`. Аналогично, по умолчанию количество повторений равно `1`, автоматически анализирует количество повторяющихся символов, но также есть случаи неточного анализа, рекомендуется указать определенное количество повторений.
**12. Удаление повторяющихся строк _S1S1S1S2S2S2->S1S2**
1. #### Удаление повторяющихся строк _S1S1S1S2S2S2->S1S2
Это относительно сложно, иногда количество обновлений каждого предложения не одинаково, в этом случае только программа может полностью решить, как удалить дубликаты. Например, `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。私は恵麻さんの目元を優しくハンカチで拭う。`, где `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。` повторяется 3 раза, `なんてニヤニヤしていると、恵麻さんが振り返った。` не повторяется, `私は恵麻さんの目元を優しくハンカチで拭う。` повторяется 2 раза, в конечном итоге анализ даст `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。`, где из-за сложности может быть небольшая ошибка анализа, это неизбежно, но обычно можно получить правильный результат.
Это относительно сложно, иногда количество обновлений каждого предложения не одинаково, в этом случае только программа может полностью решить, как удалить дубликаты. Например, `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。私は恵麻さんの目元を優しくハンカチで拭う。`, где `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。` повторяется 3 раза, `なんてニヤニヤしていると、恵麻さんが振り返った。` не повторяется, `私は恵麻さんの目元を優しくハンカチで拭う。` повторяется 2 раза, в конечном итоге анализ даст `恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。`, где из-за сложности может быть небольшая ошибка анализа, это неизбежно, но обычно можно получить правильный результат.
**13. Фильтрация угловых скобок <>**
1. #### Фильтрация угловых скобок <>
Это на самом деле фильтрация HTML-тегов, название написано так, чтобы избежать путаницы для новичков. Например, `<div>`, `</div>` и `<div id="dsds">` и т.д. будут отфильтрованы. Это в основном используется в играх TyranoScript, где извлеченный текст - innerHTML, обычно содержит много таких тегов.
Это на самом деле фильтрация HTML-тегов, название написано так, чтобы избежать путаницы для новичков. Например, `<div>`, `</div>` и `<div id="dsds">` и т.д. будут отфильтрованы. Это в основном используется в играх TyranoScript, где извлеченный текст - innerHTML, обычно содержит много таких тегов.
**14. Фильтрация символов новой строки**
1. #### Фильтрация символов новой строки
Первоначально называлось **Фильтрация символов новой строки адаптивная к языку**, старая версия **Фильтрация символов новой строки** была упразднена.
Первоначально называлось **Фильтрация символов новой строки адаптивная к языку**, старая версия **Фильтрация символов новой строки** была упразднена.
Если исходный язык не японский, то при фильтрации символов новой строки они будут заменены на пробелы, а не отфильтрованы, чтобы избежать соединения нескольких слов вместе.
Если исходный язык не японский, то при фильтрации символов новой строки они будут заменены на пробелы, а не отфильтрованы, чтобы избежать соединения нескольких слов вместе.
**15. Фильтрация цифр**
1. #### Фильтрация цифр
Пропущено
Пропущено
**16. Фильтрация английских букв**
1. #### Фильтрация английских букв
Пропущено
Пропущено
**17. Удаление повторяющихся строк _ABCDBCDCDD->ABCD**
1. #### Удаление повторяющихся строк _ABCDBCDCDD->ABCD
Это тоже довольно распространено. Причина этого в том, что иногда функция HOOK для отображения текста имеет параметр текста для отображения, эта функция вызывается каждый раз при отображении символа, и каждый раз параметр строки указывает на следующий символ, что приводит к тому, что первый вызов уже получил полный текст, а последующие вызовы выводят оставшуюся подстроку до тех пор, пока длина не уменьшится до 0. Например, `恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。` анализ определит, что реальный текст должен быть `恵麻さんは再び液タブへ視線を落とす。`
Это тоже довольно распространено. Причина этого в том, что иногда функция HOOK для отображения текста имеет параметр текста для отображения, эта функция вызывается каждый раз при отображении символа, и каждый раз параметр строки указывает на следующий символ, что приводит к тому, что первый вызов уже получил полный текст, а последующие вызовы выводят оставшуюся подстроку до тех пор, пока длина не уменьшится до 0. Например, `恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。` анализ определит, что реальный текст должен быть `恵麻さんは再び液タブへ視線を落とす。`
**18. Удаление повторяющихся строк _AABABCABCD->ABCD**
1. #### Удаление повторяющихся строк _AABABCABCD->ABCD
Это тоже довольно распространено. Причина этого в том, что каждый раз при рисовании символа, а затем при рисовании следующего символа, все предыдущие символы рисуются снова. Например, `恵麻恵麻さ恵麻さん恵麻さんは恵麻さんは再恵麻さんは再び恵麻さんは再び液恵麻さんは再び液タ恵麻さんは再び液タブ恵麻さんは再び液タブへ恵麻さんは再び液タブへ視恵麻さんは再び液タブへ視線恵麻さんは再び液タブへ視線を恵麻さんは再び液タブへ視線を落恵麻さんは再び液タブへ視線を落と恵麻さんは再び液タブへ視線を落とす恵麻さんは再び液タブへ視線を落とす。` анализ определит, что реальный текст должен быть `恵麻さんは再び液タブへ視線を落とす。`
Это тоже довольно распространено. Причина этого в том, что каждый раз при рисовании символа, а затем при рисовании следующего символа, все предыдущие символы рисуются снова. Например, `恵麻恵麻さ恵麻さん恵麻さんは恵麻さんは再恵麻さんは再び恵麻さんは再び液恵麻さんは再び液タ恵麻さんは再び液タブ恵麻さんは再び液タブへ恵麻さんは再び液タブへ視恵麻さんは再び液タブへ視線恵麻さんは再び液タブへ視線を恵麻さんは再び液タブへ視線を落恵麻さんは再び液タブへ視線を落と恵麻さんは再び液タブへ視線を落とす恵麻さんは再び液タブへ視線を落とす。` анализ определит, что реальный текст должен быть `恵麻さんは再び液タブへ視線を落とす。`
**19. Удаление повторяющихся строк _AABABCABCDEEFEFG->ABCDEFG**
1. #### Удаление повторяющихся строк _AABABCABCDEEFEFG->ABCDEFG
Это похоже на вышеупомянутое, но когда есть несколько строк текста, каждая строка обрабатывается отдельно по вышеупомянутой логике, что приводит к большей сложности. Из-за сложности эта обработка часто не может быть правильно обработана, если встретите, рекомендуется написать пользовательскую обработку на python для решения.
Это похоже на вышеупомянутое, но когда есть несколько строк текста, каждая строка обрабатывается отдельно по вышеупомянутой логике, что приводит к большей сложности. Из-за сложности эта обработка часто не может быть правильно обработана, если встретите, рекомендуется написать пользовательскую обработку на python для решения.
**20. Пользовательская обработка на python**
1. #### Пользовательская обработка на python
Напишите скрипт на python для более сложной обработки, когда скрипт обработки не существует, он автоматически сгенерирует файл `mypost.py` и следующий шаблон в каталоге userconfig:
Напишите скрипт на python для более сложной обработки, когда скрипт обработки не существует, он автоматически сгенерирует файл `mypost.py` и следующий шаблон в каталоге userconfig:
```
def POSTSOLVE(line):
return line
```
```
def POSTSOLVE(line):
return line
```
1. #### Замена строки
**21. Замена строки**
Не только замена, но и в основном можно использовать для фильтрации. Например, можно отфильтровать фиксированные несколько глифов, повторяющиеся символы в виде перевернутого треугольника и т.д., заменив их на пустоту.
Не только замена, но и в основном можно использовать для фильтрации. Например, можно отфильтровать фиксированные несколько глифов, повторяющиеся символы в виде перевернутого треугольника и т.д., заменив их на пустоту.
Можно одновременно активировать опции `Регулярное выражение` и `Экранирование`, или выбрать только одну из них, или не активировать ни одну.
Можно одновременно активировать опции `Регулярное выражение` и `Экранирование`, или выбрать только одну из них, или не активировать ни одну.
Если ни одна из них не активирована, будет использоваться обычная замена строки.
Если ни одна из них не активирована, будет использоваться обычная замена строки.
При активации `Экранирование`, вводимое содержимое будет рассматриваться как экранированная строка, а не буквальная строка. Например, можно использовать `\n` для представления символа новой строки, чтобы можно было фильтровать символы, появляющиеся только до или после символа новой строки.
При активации `Экранирование`, вводимое содержимое будет рассматриваться как экранированная строка, а не буквальная строка. Например, можно использовать `\n` для представления символа новой строки, чтобы можно было фильтровать символы, появляющиеся только до или после символа новой строки.
При активации `Регулярное выражение`, будет использоваться замена регулярного выражения.
При активации `Регулярное выражение`, будет использоваться замена регулярного выражения.

View File

@ -1,40 +1,40 @@
## Роль различных методов оптимизации перевода
#### **1. Перевод собственных названий - Прямое замещение**
1. #### Перевод собственных названий - Прямое замещение
Этот метод заменяет исходный текст на перевод непосредственно перед переводом. Поддерживает использование `регулярных выражений` и `экранирования` для более сложных замен.
Этот метод заменяет исходный текст на перевод непосредственно перед переводом. Поддерживает использование `регулярных выражений` и `экранирования` для более сложных замен.
Когда игра загружает метаданные из VNDB, информация о персонажах игры извлекается для использования в качестве предустановленного словаря. Однако переводы, по причине VNDB, находятся на английском языке и могут быть отредактированы на китайский.
Когда игра загружает метаданные из VNDB, информация о персонажах игры извлекается для использования в качестве предустановленного словаря. Однако переводы, по причине VNDB, находятся на английском языке и могут быть отредактированы на китайский.
<details>
<summary>Пример</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/1.png">
</details>
<details>
<summary>Пример</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/1.png">
</details>
#### **2. Перевод собственных названий**
1. #### Перевод собственных названий
Если использовать `sakura большую модель` и установить формат подсказки для поддержки подсказки словаря gpt, она будет преобразована в формат словаря gpt. В противном случае будет использоваться подход VNR, заменяя исходный текст заполнителем `ZX?Z` (ps: я тоже не знаю, что это значит), и после перевода источника заполнитель обычно не разрушается. Затем после перевода заполнитель будет заменен на перевод.
Если использовать `sakura большую модель` и установить формат подсказки для поддержки подсказки словаря gpt, она будет преобразована в формат словаря gpt. В противном случае будет использоваться подход VNR, заменяя исходный текст заполнителем `ZX?Z` (ps: я тоже не знаю, что это значит), и после перевода источника заполнитель обычно не разрушается. Затем после перевода заполнитель будет заменен на перевод.
Для специализированных терминов игры рекомендуется не добавлять их в раздел `Обработка текста -> Оптимизация перевода`. Раньше для различения терминов из разных игр использовался md5-хеш игры, но такой подход оказался не очень хорошим и был отменен. Теперь рекомендуется добавлять специализированные термины игры в настройках `Оптимизация перевода` в разделе `Настройки игры`.
Для специализированных терминов игры рекомендуется не добавлять их в раздел `Обработка текста -> Оптимизация перевода`. Раньше для различения терминов из разных игр использовался md5-хеш игры, но такой подход оказался не очень хорошим и был отменен. Теперь рекомендуется добавлять специализированные термины игры в настройках `Оптимизация перевода` в разделе `Настройки игры`.
Последний столбец `Комментарий` предназначен только для использования с `сакура большой моделью`, другие переводы проигнорируют этот столбец.
Последний столбец `Комментарий` предназначен только для использования с `сакура большой моделью`, другие переводы проигнорируют этот столбец.
<details>
<summary>Настройка специализированных терминов игры</summary>
Рекомендуется использовать:
<img src="https://image.lunatranslator.org/zh/transoptimi/2.png">
а не:
<img src="https://image.lunatranslator.org/zh/transoptimi/3.png">
</details>
<details>
<summary>Настройка специализированных терминов игры</summary>
Рекомендуется использовать:
<img src="https://image.lunatranslator.org/zh/transoptimi/2.png">
а не:
<img src="https://image.lunatranslator.org/zh/transoptimi/3.png">
</details>
<details>
<summary>Настройка sakura большого модель формата prompt на v0.10pre1 (поддерживает словарь gpt)</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/4.png">
</details>
<details>
<summary>Настройка sakura большого модель формата prompt на v0.10pre1 (поддерживает словарь gpt)</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/4.png">
</details>
#### **3. Исправление результатов перевода**
1. #### Исправление результатов перевода
Этот метод позволяет внести некоторые коррективы в результаты перевода после его завершения и использовать целые выражения для более сложных исправлений.
Этот метод позволяет внести некоторые коррективы в результаты перевода после его завершения и использовать целые выражения для более сложных исправлений.
## Оптимизация перевода, специфичная для игры

View File

@ -4,27 +4,27 @@
这个方法会使用参数“图像稳定性阈值”“图像一致性阈值”“文本相似度阈值”
#### 1. 图像稳定性阈值
1. #### 图像稳定性阈值
当游戏文本不是立即出现文本速度不是最快或者游戏有动态背景或live2d时截取的图片是会不停的发生变化的。
当游戏文本不是立即出现文本速度不是最快或者游戏有动态背景或live2d时截取的图片是会不停的发生变化的。
每次截图时,和上一次截图进行比较,计算相似度。当相似度大于阈值时,认为图片是处于稳定状态,进行下一步判断。
每次截图时,和上一次截图进行比较,计算相似度。当相似度大于阈值时,认为图片是处于稳定状态,进行下一步判断。
如果可以确定游戏是完全静态的可以将这个值设置为0反之可以适当提高该值。
如果可以确定游戏是完全静态的可以将这个值设置为0反之可以适当提高该值。
#### 2. 图像一致性阈值
1. #### 图像一致性阈值
这个参数是最重要的。
这个参数是最重要的。
当图片稳定后比较当前图片和上一次进行OCR时图片而非上一次截图的相似度。当相似度小于该阈值时认为游戏文本发生了变化进行OCR。
当图片稳定后比较当前图片和上一次进行OCR时图片而非上一次截图的相似度。当相似度小于该阈值时认为游戏文本发生了变化进行OCR。
如果OCR频率过快可以适当提高该值反之如果太过迟钝可以适当降低该值。
如果OCR频率过快可以适当提高该值反之如果太过迟钝可以适当降低该值。
#### 3. 文本相似度阈值
1. #### 文本相似度阈值
OCR的结果是不稳定的经常对于图片的微小扰动会使文本发生微小变化导致翻译也会连带重新翻译。
OCR的结果是不稳定的经常对于图片的微小扰动会使文本发生微小变化导致翻译也会连带重新翻译。
每次调用OCR后都会比较本次OCR的结果和上一次OCR的结果编辑距离当编辑距离大于阈值时才会输出文本。
每次调用OCR后都会比较本次OCR的结果和上一次OCR的结果编辑距离当编辑距离大于阈值时才会输出文本。
### 周期执行
@ -40,23 +40,22 @@ OCR的结果是不稳定的经常对于图片的微小扰动会使文本发
### 鼠标键盘触发+等待稳定
#### 1. 触发事件
1. #### 触发事件
默认以下鼠标键盘事件将触发该方法按下鼠标左键、按下Enter、松开Ctrl、松开Shift、松开Alt。如果绑定了游戏窗口则仅当游戏窗口为前台窗口时才会触发方法。
默认以下鼠标键盘事件将触发该方法按下鼠标左键、按下Enter、松开Ctrl、松开Shift、松开Alt。如果绑定了游戏窗口则仅当游戏窗口为前台窗口时才会触发方法。
触发该方法后,由于需要等待游戏渲染新的文本,或文本可能不是立即出现(文本速度不是最快),因此需要稍微等待一小段时间,直到显示的文本稳定。
触发该方法后,由于需要等待游戏渲染新的文本,或文本可能不是立即出现(文本速度不是最快),因此需要稍微等待一小段时间,直到显示的文本稳定。
触发该方法并稳定后,一定会进行翻译,不会考虑文本的相似度。
触发该方法并稳定后,一定会进行翻译,不会考虑文本的相似度。
如果文本速度是最快的则可以将以下两个参数都设置为0。否则判断需要等待的时间需要以下参数
如果文本速度是最快的则可以将以下两个参数都设置为0。否则判断需要等待的时间需要以下参数
1. #### 延迟(s)
#### 2. 延迟(s)
等待一个固定的延迟时间内置有0.1s的固有延迟时间,以满足游戏引擎的内部逻辑处理)。
等待一个固定的延迟时间内置有0.1s的固有延迟时间,以满足游戏引擎的内部逻辑处理)。
1. #### 图像稳定性阈值
#### 3. 图像稳定性阈值
这个值和上面的同名参数类似。不过这个仅用来判定文本是否绘制完毕,因此和上面的同名参数不共用配置。
这个值和上面的同名参数类似。不过这个仅用来判定文本是否绘制完毕,因此和上面的同名参数不共用配置。
由于慢速文本的绘制时间不固定,因此使用指定的固定延迟可能不能满足需要。当图像与上次截图相似度大于阈值时,执行本次触发事件。
由于慢速文本的绘制时间不固定,因此使用指定的固定延迟可能不能满足需要。当图像与上次截图相似度大于阈值时,执行本次触发事件。

View File

@ -4,126 +4,121 @@
>如果有非常复杂的错误形式,可以通过激活多种处理方式,并调整他们的执行顺序来得到丰富的处理方法组合
**1. 过滤文本中的非日语字符集字符**
1. #### 过滤文本中的非日语字符集字符
有时会hook到一些乱码文本。由于一般是日语游戏会出现这个问题因此预设了这个方法来过滤掉**无法使用shift-jis字符集编码的字符**,例如:
有时会hook到一些乱码文本。由于一般是日语游戏会出现这个问题因此预设了这个方法来过滤掉**无法使用shift-jis字符集编码的字符**,例如:
`エマさんԟのイԠラストは全部大好き!` 会被处理成 `エマさんのイラストは全部大好き!`
`エマさんԟのイԠラストは全部大好き!` 会被处理成 `エマさんのイラストは全部大好き!`
**2. 过滤控制字符**
1. #### 过滤控制字符
这个方法会过滤掉文本中的ascii码控制符例如``等
这个方法会过滤掉文本中的ascii码控制符例如``等
1. #### 过滤英文标点
**3. 过滤英文标点**
这个方法会过滤掉文本中```!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~```
这个方法会过滤掉文本中```!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~```
1. #### 过滤其他乱码
这个需要在设置中设置允许通过的字符编码或Unicode范围。不被允许的字符将均被过滤
**4. 过滤其他乱码**
1. #### 过滤「」以外的字符
这个需要在设置中设置允许通过的字符编码或Unicode范围。不被允许的字符将均被过滤
例如:`こなみ「ひとめぼれってやつだよね……」` 将被处理为 `「ひとめぼれってやつだよね……」`
**5. 过滤「」以外的字符**
1. #### 去除花括号{}
例如:`こなみ「ひとめぼれってやつだよね……」` 将被处理为 `「ひとめぼれってやつだよね……」`
这个和字面意思不太一样,其实主要是用来过滤日语注音的,许多游戏脚本使用{}和一些其他字符来给汉字加注音。支持两种注音格式:`{汉字/注音}`和`{汉字:注音}`,例如:
**6. 去除花括号{}**
`「{恵麻/えま}さん、まだ{起き/おき}てる?」``「{恵麻:えま}さん、まだ{起き:おき}てる?」` 将被处理成 `「恵麻さん、まだ起きてる?」`
这个和字面意思不太一样,其实主要是用来过滤日语注音的,许多游戏脚本使用{}和一些其他字符来给汉字加注音。支持两种注音格式:`{汉字/注音}`和`{汉字:注音}`,例如:
1. #### 按字数过滤或截断
`「{恵麻/えま}さん、まだ{起き/おき}てる?」``「{恵麻:えま}さん、まだ{起き:おき}てる?」` 将被处理成 `「恵麻さん、まだ起きてる?」`
这个方法会根据当前文本的字数来决定如何处理。
**7. 按字数过滤或截断**
如果文本长度小于最小字数,文本将被过滤。例如某些游戏在静态下会不停的刷新单个倒三角字符,可以用这个来过滤。
这个方法会根据当前文本的字数来决定如何处理
如果文本长度超过最大字数,如果激活了**超过最大字数时截断而非过滤**,则会将截取指定字数的文本;若未激活则文本将被完全过滤
如果文本长度小于最小字数,文本将被过滤。例如某些游戏在静态下会不停的刷新单个倒三角字符,可以用这个来过滤
如果激活了**截断时反向截断**,则当截断时,会保留后`最大字数`个字,否则则会保留前`最大字数`个字
如果文本长度超过最大字数,如果激活了**超过最大字数时截断而非过滤**,则会将截取指定字数的文本;若未激活则文本将被完全过滤。
1. #### 按行数过滤或截断
如果激活了**截断时反向截断**,则当截断时,会保留后`最大字数`个字,否则则会保留前`最大字数`个字
这个和上面的类似,只不过是根据文本行数来判定。主要可以用来截取文本的前三行或者截取文本的最后一行,或者过滤行数过多过少的行
**8. 按行数过滤或截断**
如果文本行数小于最小行数,文本将被过滤。
这个和上面的类似,只不过是根据文本行数来判定。主要可以用来截取文本的前三行或者截取文本的最后一行,或者过滤行数过多过少的行
如果文本行数超过最大行数,如果激活了**超过最大行数时截断而非过滤**,则会将截取指定行数的文本;若未激活则文本将被完全过滤
如果文本行数小于最小行数,文本将被过滤
如果激活了**截断时反向截断**,则当截断时,会保留后`最大行数`个行,否则则会保留前`最大行数`个行
如果文本行数超过最大行数,如果激活了**超过最大行数时截断而非过滤**,则会将截取指定行数的文本;若未激活则文本将被完全过滤。
1. #### 去除重复字符_AAAABBBBCCCC->ABC
如果激活了**截断时反向截断**,则当截断时,会保留后`最大行数`个行,否则则会保留前`最大行数`个行
这个是最常用的过滤器
**9. 去除重复字符_AAAABBBBCCCC->ABC**
由于游戏的文字有时会绘制一遍文字在绘制一遍阴影再绘制一遍描边等之类的原因Hook模式会多次提取到被重复绘制的字符。例如`恵恵恵麻麻麻さささんんんははは再再再びびび液液液タタタブブブへへへ視視視線線線ををを落落落とととすすす。。。`,这个方法会将他处理成`恵麻さんは再び液タブへ視線を落とす。`。默认的重复次数是`1`会自动分析重复的字数,但也有分析的不准确的情况,建议指定一个确定的重复字数。
这个是最常用的过滤器。
1. #### 过滤历史重复LRU
由于游戏的文字有时会绘制一遍文字在绘制一遍阴影再绘制一遍描边等之类的原因Hook模式会多次提取到被重复绘制的字符。例如`恵恵恵麻麻麻さささんんんははは再再再びびび液液液タタタブブブへへへ視視視線線線ををを落落落とととすすす。。。`,这个方法会将他处理成`恵麻さんは再び液タブへ視線を落とす。`。默认的重复次数是`1`会自动分析重复的字数,但也有分析的不准确的情况,建议指定一个确定的重复字数
有时,游戏重复绘制的方式不是逐个字符的,而是逐行一起绘制,而且同时很变态的是会在静态的情况下不停的重新绘制当前显示的文本。例如假设当前显示的是两行文本`你好`和`哈哈`,如果不使用这个方法,将会反复输出`你好哈哈你好哈哈你好哈哈你好哈哈……`。使用这个方法,缓存若干条近期输出过的文本,当有缓存满时且出现新的文本时,剔除掉缓存中最早的那条文本,从而使近期的文本不会反复刷新
**10. 过滤历史重复LRU**
1. #### 去除重复行_ABCDABCDABCD->ABCD
有时,游戏重复绘制的方式不是逐个字符的,而是逐行一起绘制,而且同时很变态的是会在静态的情况下不停的重新绘制当前显示的文本。例如假设当前显示的是两行文本`你好`和`哈哈`,如果不使用这个方法,将会反复输出`你好哈哈你好哈哈你好哈哈你好哈哈……`。使用这个方法,缓存若干条近期输出过的文本,当有缓存满时且出现新的文本时,剔除掉缓存中最早的那条文本,从而使近期的文本不会反复刷新
这个也比较常见,和上面的类似,只不过一般不会反复刷新,而是快速的一次刷新多次。效果为 `恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。` 会变成`恵麻さんは再び液タブへ視線を落とす。`。同样,默认的重复次数是`1`会自动分析重复的字数,但也有分析的不准确的情况,建议指定一个确定的重复字数
**11. 去除重复行_ABCDABCDABCD->ABCD**
1. #### 去除重复行_S1S1S1S2S2S2->S1S2
这个也比较常见,和上面的类似,只不过一般不会反复刷新,而是快速的一次刷新多次。效果为 `恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。恵麻さんは再び液タブへ視線を落とす。` 会变成`恵麻さんは再び液タブへ視線を落とす。`。同样,默认的重复次数是`1`会自动分析重复的字数,但也有分析的不准确的情况,建议指定一个确定的重复字数
这个相对比较复杂,有时每个句子的刷新次数是不完全一样的,这时只能完全由程序分析来决定如何去重。例如`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。私は恵麻さんの目元を優しくハンカチで拭う。` 其中`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。`重复了3次`なんてニヤニヤしていると、恵麻さんが振り返った。`没有重复,`私は恵麻さんの目元を優しくハンカチで拭う。`重复了2次最终经过分析将得到`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。`,其中因为过于复杂,会存在少许的分析错误,这也是无法避免的,但一般都能基本正确的得到结果
**12. 去除重复行_S1S1S1S2S2S2->S1S2**
1. #### 过滤尖括号<>
这个相对比较复杂,有时每个句子的刷新次数是不完全一样的,这时只能完全由程序分析来决定如何去重。例如`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。私は恵麻さんの目元を優しくハンカチで拭う。` 其中`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。`重复了3次`なんてニヤニヤしていると、恵麻さんが振り返った。`没有重复,`私は恵麻さんの目元を優しくハンカチで拭う。`重复了2次最终经过分析将得到`恵麻さん……ううん、恵麻ははにかむように私の名前を呼ぶ。なんてニヤしていると、恵麻さんが振り返った。私は恵麻さんの目元を優しくハンカチで拭う。`,其中因为过于复杂,会存在少许的分析错误,这也是无法避免的,但一般都能基本正确的得到结果
这个实际上是过滤HTML标签怕小白不知道是什么意思所以这么写的名字。例如`<div>`和`</div>`和`<div id="dsds">`等都会被过滤。这个主要用在TyranoScript游戏中HOOK提取的文本是innerHTML一般都会带有许多这个标签
**13. 过滤尖括号<>**
1. #### 过滤换行符
这个实际上是过滤HTML标签怕小白不知道是什么意思所以这么写的名字。例如`<div>`和`</div>`和`<div id="dsds">`等都会被过滤。这个主要用在TyranoScript游戏中HOOK提取的文本是innerHTML一般都会带有许多这个标签
原名为**过滤换行符 语言自适应**,旧版**过滤换行符**已被废弃
如果源语言不是日语,那么当过滤换行符时,将会把换行符替换成空格而非过滤掉,来避免多个单词连到一起。
**14. 过滤换行符**
1. #### 过滤数字
原名为**过滤换行符 语言自适应**,旧版**过滤换行符**已被废弃。
如果源语言不是日语,那么当过滤换行符时,将会把换行符替换成空格而非过滤掉,来避免多个单词连到一起。
1. #### 过滤英文字母
**15. 过滤数字**
1. #### 去除重复行_ABCDBCDCDD->ABCD
**16. 过滤英文字母**
这个也比较常见。这个出现的原因是有时HOOK的某个显示文本的函数其参数是显示的文本这个函数会再每显示一个字符时都会调用且每次会把参数的字符串指向下一个字符从而导致其实第一次调用其实就已经得到完整的文本了后续每次又输出了剩下的子串直到长度递减为0。例如`恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。` 经过分析将判断真实的文本应该是`恵麻さんは再び液タブへ視線を落とす。`
1. #### 去除重复行_AABABCABCD->ABCD
这个也比较常见,出现的原因是,每次绘制一个字符,然后绘制下一个字符时都会把前面的字符都再绘制一遍。例如`恵麻恵麻さ恵麻さん恵麻さんは恵麻さんは再恵麻さんは再び恵麻さんは再び液恵麻さんは再び液タ恵麻さんは再び液タブ恵麻さんは再び液タブへ恵麻さんは再び液タブへ視恵麻さんは再び液タブへ視線恵麻さんは再び液タブへ視線を恵麻さんは再び液タブへ視線を落恵麻さんは再び液タブへ視線を落と恵麻さんは再び液タブへ視線を落とす恵麻さんは再び液タブへ視線を落とす。`经过分析将判断真实的文本应该是`恵麻さんは再び液タブへ視線を落とす。`
**17. 去除重复行_ABCDBCDCDD->ABCD**
1. #### 去除重复行_AABABCABCDEEFEFG->ABCDEFG
这个也比较常见。这个出现的原因是有时HOOK的某个显示文本的函数其参数是显示的文本这个函数会再每显示一个字符时都会调用且每次会把参数的字符串指向下一个字符从而导致其实第一次调用其实就已经得到完整的文本了后续每次又输出了剩下的子串直到长度递减为0。例如`恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。` 经过分析将判断真实的文本应该是`恵麻さんは再び液タブへ視線を落とす。`
这个和上面的类似只不过当有多行文本时会每行单独按照上面的逻辑来重复从而带来了更多的复杂性。由于过于复杂这个处理经常难以正确处理如果遇到了建议写自定义python处理来解决
1. #### 自定义python处理
**18. 去除重复行_AABABCABCD->ABCD**
撰写一个python脚本来进行更加复杂的处理当处理脚本不存在时将自动在userconfig目录下生成`mypost.py`文件和以下模板:
这个也比较常见,出现的原因是,每次绘制一个字符,然后绘制下一个字符时都会把前面的字符都再绘制一遍。例如`恵麻恵麻さ恵麻さん恵麻さんは恵麻さんは再恵麻さんは再び恵麻さんは再び液恵麻さんは再び液タ恵麻さんは再び液タブ恵麻さんは再び液タブへ恵麻さんは再び液タブへ視恵麻さんは再び液タブへ視線恵麻さんは再び液タブへ視線を恵麻さんは再び液タブへ視線を落恵麻さんは再び液タブへ視線を落と恵麻さんは再び液タブへ視線を落とす恵麻さんは再び液タブへ視線を落とす。`经过分析将判断真实的文本应该是`恵麻さんは再び液タブへ視線を落とす。`
```
def POSTSOLVE(line):
# 请在这里编写自定义处理
return line
```
**19. 去除重复行_AABABCABCDEEFEFG->ABCDEFG**
1. #### 字符串替换
这个和上面的类似只不过当有多行文本时会每行单独按照上面的逻辑来重复从而带来了更多的复杂性。由于过于复杂这个处理经常难以正确处理如果遇到了建议写自定义python处理来解决
不止是替换,主要也可以用来过滤。例如可以将固定的若干乱码字符、反复刷新的倒三角字符等通过替换成空白来进行过滤。
**20. 自定义python处理**
可同时激活`正则`和`转义`两个选项,或仅选择其中一个,或均不激活。
撰写一个python脚本来进行更加复杂的处理当处理脚本不存在时将自动在userconfig目录下生成`mypost.py`文件和以下模板:
均不激活时,将使用普通的字符串替换。
```
def POSTSOLVE(line):
# 请在这里编写自定义处理
return line
```
激活`转义`后,输入的内容都会被视为转义字符串,而非字符串字面量。例如可以使用`\n`来表示换行符,从而实现可以过滤仅在换行符前后出现的字符等。
**21. 字符串替换**
不止是替换,主要也可以用来过滤。例如可以将固定的若干乱码字符、反复刷新的倒三角字符等通过替换成空白来进行过滤。
可同时激活`正则`和`转义`两个选项,或仅选择其中一个,或均不激活。
均不激活时,将使用普通的字符串替换。
激活`转义`后,输入的内容都会被视为转义字符串,而非字符串字面量。例如可以使用`\n`来表示换行符,从而实现可以过滤仅在换行符前后出现的字符等。
激活`正则`后,将使用正则表达式替换。
激活`正则`后,将使用正则表达式替换。

View File

@ -1,41 +1,39 @@
## 各种翻译优化的作用
#### **1. 专有名词翻译 直接替换**
1. #### 专有名词翻译 直接替换
这种方法会在翻译之前,直接用译文将原文进行替换。支持使用`正则` `转义`进行更复杂的替换。
这种方法会在翻译之前,直接用译文将原文进行替换。支持使用`正则` `转义`进行更复杂的替换。
当游戏从VNDB加载元数据时会查询游戏中的人名信息作为预设的词典。不过译文由于VNDB的原因是英文可以自行进行修改译文成中文。
当游戏从VNDB加载元数据时会查询游戏中的人名信息作为预设的词典。不过译文由于VNDB的原因是英文可以自行进行修改译文成中文。
<details>
<summary>示例</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/1.png">
</details>
<details>
<summary>示例</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/1.png">
</details>
#### **2. 专有名词翻译**
1. #### 专有名词翻译
如果使用`sakura大模型`并设置prompt格式为支持gpt词典的prompt则会转换成gpt词典格式否则会参考的VNR的做法将原文替换为占位符`ZX?Z` ps我也不知道这是什么意思翻译源翻译后一般不会将占位符破坏然后在翻译后将占位符替换成翻译。
如果使用`sakura大模型`并设置prompt格式为支持gpt词典的prompt则会转换成gpt词典格式否则会参考的VNR的做法将原文替换为占位符`ZX?Z` ps我也不知道这是什么意思翻译源翻译后一般不会将占位符破坏然后在翻译后将占位符替换成翻译。
对于游戏的专用词条,建议不要在文本处理->翻译优化中添加。过去使用游戏的md5值来区分多个游戏的词条但这样的实现其实不是很好已经废弃这样的实现。现在建议在`游戏设置`中的`翻译优化`中的该方法的设置中,添加游戏专用的词条。
对于游戏的专用词条,建议不要在文本处理->翻译优化中添加。过去使用游戏的md5值来区分多个游戏的词条但这样的实现其实不是很好已经废弃这样的实现。现在建议在`游戏设置`中的`翻译优化`中的该方法的设置中,添加游戏专用的词条。
最后一列`注释`仅用于给`sakura大模型`使用,其他翻译会无视这一列。
<details>
<summary>设置游戏的专用词条</summary>
建议使用:
<img src="https://image.lunatranslator.org/zh/transoptimi/2.png">
而不是:
<img src="https://image.lunatranslator.org/zh/transoptimi/3.png">
</details>
最后一列`注释`仅用于给`sakura大模型`使用,其他翻译会无视这一列。
<details>
<summary>设置游戏的专用词条</summary>
建议使用:
<img src="https://image.lunatranslator.org/zh/transoptimi/2.png">
而不是:
<img src="https://image.lunatranslator.org/zh/transoptimi/3.png">
</details>
<details>
<summary>sakura大模型设置prompt格式为v0.10pre1支持gpt词典</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/4.png">
</details>
1. #### 翻译结果修正
<details>
<summary>sakura大模型设置prompt格式为v0.10pre1支持gpt词典</summary>
<img src="https://image.lunatranslator.org/zh/transoptimi/4.png">
</details>
#### **3. 翻译结果修正**
这个方法是,在翻译完毕后,可以对翻译的结果进行一定的修正,并可以使用整个表达式进行复杂的修正。
这个方法是,在翻译完毕后,可以对翻译的结果进行一定的修正,并可以使用整个表达式进行复杂的修正。
## 游戏专用翻译优化