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