Наверное, во все века были переводчики-буквалисты и переводчики-«вольнодумцы». Последние чувствовали себя совершенно вправе изменять текст, перекопмоновывать его, выбрасывать одни куски и дописывать другие. А перед современными исследователями стоит типичный вопрос: «Что детально произошло во время трансформации оригинала? Что вычеркнуто, что сохранено, что переделано, что дописано?»
Перед тем, как вчитываться в тексты со всей тщательностью, хотелось попробовать отдать их роботам на предварительную проработку. Надежд на роботов у нас было мало, однако помощь от них мы получили существенную. О том, как мы заставили Google Translate и Яндекс.Переводчик тягаться в работе над греческим текстом «Невидимой брани», читайте под катом.
Рабочий материал
«Невидимая брань» — аскетический трактат, изначально написанный на итальянском, потом переведённый на греческий в XVIII веке, отредактированный в соответствии с восточно-христианской аскетической практикой, и после этого переведённый на русский. Но тоже не буквально, а с существенными изменениями. Описывая принципы своей работы по переводу на русский, святитель Феофан Затворник писал:
Я [эту книгу] не перевожу, но свободно перелагаю своею речью… прибавляя и убавляя и изменяя против подлинника.
Общий обзор редакторских изменений есть в работе еп. Феоктиста, но хотелось получить именно детальный diff по всему тексту.
Метод сопоставления
Для этого оба текста (новогреческий и русский) были разбиты на абзацы. Получилось примерно по 700 абзацев в каждом.
Греческий текст мы перевели на русский дважды — один раз при помощи Яндекс.Переводчика, другой раз — при помощи Google Translate. Просто создали большие страницы с полным текстом и открыли их через соответствующие веб-морды. Читать переведённый текст было почти невозможно: видимо, слишком сложный оригинал, однако что-то можно было из этого ужаса извлечь. Ключевые слова где-то должны были совпасть, циферки тоже.
Особого разнообразия инструментария для поиска нечётких дубликатов не нашлось, ухватились за fuzzywuzzy
, который считает расстояние Левенштейна. Из четырёх функций: ratio
, partial_ratio
, token_sort_ratio
, token_set_ratio
— была выбрана последняя, не связанная ни с порядком слов, ни с их повторами. И, как оказалось впоследствии, выбор был правильным.
Для всех пар абзацев (русский vs греческий) были вычислены степени сходства token_set_ratio
феофановского перевода с яндексовским и с гугловским. Решили не опираться ни на один из них в отдельности, а на их сумму (à la бивалютная корзина — и это тоже оказалось правильным решением), и далее уже глазками и ручками смотрелись и перепроверялись кандидаты с большими значениями этой суммы, а также рассматривались соседние с проверенными пары.
В итоге за несколько часов работы удалось сопоставить 2/3 абзацев, из остальных только единицы можно будет сопоставить вручную.
Перепроверка методов
После проделанной работы и полученного результата интересно было вернуться и снова посмотреть на то, какие функции fuzzywuzzy
и какой из переводчиков лучше всего подходит для подобной задачи.
Вычисление partial_ratio
слишком времязатратное (было лениво 120 часов кряду гонять свою компутерку), но примерно за час были посчитаны остальные три функции: ratio
, token_sort_ratio
и token_set_ratio
как для яндексовских, так и для гугловских переводов. Итого шесть функций близости текста и седьмая — наша «бивалютная корзина».
Теперь можно взглянуть на следующие таблички. Первая отвечает на вопрос: «Если мы для данного русского абзаца будем искать соответствующий греческий, рассматривая абзацы в порядке убывания схожести (вычисленной по данной функции), то какова вероятность, что мы увидим нужный абзац, просмотрев всего лишь первых трёх кандидатов?»
функция | вероятность нахождения с трёх попыток |
---|---|
google_set_ratio + yandex_set_ratio |
66.5% |
google_ratio |
65.0% |
google_set_ratio |
64.8% |
yandex_ratio |
62.0% |
google_sort_ratio |
61.8% |
yandex_set_ratio |
56.2% |
yandex_sort_ratio |
54.6% |
То есть примерно в 2/3 случаев мы почти сразу наткнёмся на нужный абзац. А в остальной трети случаев придётся изрядно помучиться. Вот гляньте на вторую табличку, которая отвечает на вопрос: «Сколько в среднем придётся просмотреть кандидатов, пока мы увидим нужный абзац?»
функция | среднее количество попыток |
---|---|
google_set_ratio + yandex_set_ratio |
36.7 |
google_set_ratio |
37.6 |
yandex_set_ratio |
47.0 |
google_sort_ratio |
65.9 |
yandex_sort_ratio |
69.7 |
google_ratio |
71.7 |
yandex_ratio |
75.3 |
Просматривать 40 и более абзацев — это печальная печалька, и машина в таком случае вовсе не выглядит как разумный подсказчик. В итоге оптимальной стратегией при сопоставлении текстов будет «снять сливки», просматривая только наиболее вероятных кандидатов, а остальное сопоставление делать, исходя из структуры и каких-то иных факторов.
Похвала собственной интуиции
Удивительным для нас самих стало то, что взятая «с потолка» «бивалютная корзина» google_set_ratio + yandex_set_ratio
сработала лучше всего, даже лучше, чем каждая из этих функций по отдельности. Кроме того, значения в обеих таблицах показывают, что по всем параметрам с этой задачей Google Translate справляется лучше, чем Яндекс.Переводчик. Так что отечественным роботам есть куда расти.
P.S. В использованных скриптах особой премудрости нет, но если кому надо, можем выложить. Сам же итог сопоставления вот тут.
P.P.S. Если кому интересно, то картинка в заголовке — это фрагмент страницы из «Букваря славено-греко-латинского» Фёдора Поликарпова-Орлова (1701 г.).
P.P.P.S. Может быть, есть научный журнал, куда этот текст, соответствующим образом допиленный, стоит предложить для публикации?