mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2025-11-28 09:00:23 +08:00
124 lines
No EOL
14 KiB
Markdown
124 lines
No EOL
14 KiB
Markdown
# Назначение и использование различных методов обработки текста
|
||
|
||
::: info
|
||
В Hook-режиме иногда могут считываться ошибочные тексты, например, дублирующиеся тексты или прочий бессмысленный текст. В таких случаях необходимо использовать обработку текста.
|
||
:::
|
||
|
||
::: tip
|
||
При наличии очень сложных форм ошибок можно активировать несколько методов обработки и настроить порядок их выполнения для получения богатых комбинаций методов обработки.
|
||
:::
|
||
|
||
::: tip
|
||
При встроенном переводе большинство методов обработки не применяются, чтобы снизить вероятность сбоя игры. Доступные методы включают: `фильтрацию переносов строк`, `замену строк`, `пользовательскую python-обработку`, `фильтрацию угловых скобок <>`, `удаление фигурных скобок {}`
|
||
:::
|
||
|
||
|
||
1. #### Фильтровать неяпонские символы {#anchor-_remove_non_shiftjis_char}
|
||
|
||
Иногда могут попадаться искаженные тексты. Поскольку эта проблема обычно возникает в японских играх, предусмотрен данный метод для фильтрации **символов, которые не могут быть закодированы в кодировке 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) функции, отвечающей за отображение текста, её параметром является сам отображаемый текст. Эта функция вызывается при выводе каждого символа, и каждый раз строка параметра смещается на следующий символ. В результате при первом вызове уже получается полный текст, а при последующих вызовах выводятся оставшиеся подстроки, пока длина не уменьшится до нуля. Например: `恵麻さんは再び液タブへ視線を落とす。麻さんは再び液タブへ視線を落とす。さんは再び液タブへ視線を落とす。んは再び液タブへ視線を落とす。は再び液タブへ視線を落とす。再び液タブへ視線を落とす。び液タブへ視線を落とす。液タブへ視線を落とす。タブへ視線を落とす。ブへ視線を落とす。へ視線を落とす。視線を落とす。線を落とす。を落とす。落とす。とす。す。。` После анализа можно сделать вывод, что настоящий текст должен быть: `恵麻さんは再び液タブへ視線を落とす。`
|
||
|
||
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}
|
||
|
||
Пропущено
|
||
|
||
1. #### Фильтровать английские буквы {#anchor-_92}
|
||
|
||
Пропущено
|
||
|
||
1. #### Пользовательская Python-обработка {#anchor-_11}
|
||
|
||
Написание Python-скрипта для более сложной обработки. Если скрипт обработки отсутствует, в каталоге userconfig автоматически создается файл `mypost.py` со следующим шаблоном:
|
||
|
||
```python
|
||
def POSTSOLVE(line):
|
||
# Пожалуйста, напишите здесь ваш пользовательский обработчик
|
||
return line
|
||
```
|
||
|
||
1. #### Замена строк {#anchor-stringreplace}
|
||
|
||
Используется не только для замены, но и для фильтрации. Например, можно отфильтровать фиксированные наборы бессмысленных символов или постоянно обновляющиеся перевернутые треугольники, заменяя их на пустые строки.
|
||
|
||
Можно одновременно активировать опции `Регулярное выражение` и `Экранирование`, или выбрать только одну из них, или не активировать ни одну.
|
||
|
||
Если ни одна не активирована, будет использована обычная замена строк.
|
||
|
||
При активации `Экранирования` вводимые данные будут рассматриваться как экранированные строки, а не как строковые литералы. Например, можно использовать `\n` для обозначения перевода строки, что позволяет фильтровать символы, встречающиеся только до или после перевода строки.
|
||
|
||
При активации `Регулярного выражения` будет использована замена по регулярному выражению. |