Наверное, во все века были переводчики-буквалисты и переводчики-«вольнодумцы». Последние чувствовали себя совершенно вправе изменять текст, перекопмоновывать его, выбрасывать одни куски и дописывать другие. А перед современными исследователями стоит типичный вопрос: «Что детально произошло во время трансформации оригинала? Что вычеркнуто, что сохранено, что переделано, что дописано?» Перед тем, как вчитываться в тексты со всей тщательностью, хотелось попробовать отдать их роботам на предварительную проработку. Надежд на роботов у нас было мало, однако помощь от них мы получили существенную. О том, как мы заставили 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 как для яндексовских, так и для гугловских переводов. Итого шесть функций близости текста и седьмая — наша «бивалютная корзина». Теперь можно взглянуть на следующие таблички. Первая отвечает на вопрос: «Если мы для данного русского абзаца будем искать соответствующий греческий, рассматривая абзацы в порядке убывания схожести (вычисленной по данной функции), то какова вероятность, что мы увидим нужный абзац, просмотрев всего лишь первых трёх кандидатов?» То есть примерно в 2/3 случаев мы почти сразу наткнёмся на нужный абзац. А в остальной трети случаев придётся изрядно помучиться. Вот гляньте на вторую табличку, которая отвечает на вопрос: «Сколько в среднем придётся просмотреть кандидатов, пока мы увидим нужный абзац?» Просматривать 40 и более абзацев — это печальная печалька, и машина в таком случае вовсе не выглядит как разумный подсказчик. В итоге оптимальной стратегией при сопоставлении текстов будет «снять сливки», просматривая только наиболее вероятных кандидатов, а остальное сопоставление делать, исходя из структуры и каких-то иных факторов. Удивительным для нас самих стало то, что взятая «с потолка» «бивалютная корзина» google_set_ratio + yandex_set_ratio сработала лучше всего, даже лучше, чем каждая из этих функций по отдельности. Кроме того, значения в обеих таблицах показывают, что по всем параметрам с этой задачей Google Translate справляется лучше, чем Яндекс.Переводчик. Так что отечественным роботам есть куда расти. P.S. В использованных скриптах особой премудрости нет, но если кому надо, можем выложить. Сам же итог сопоставления вот тут. P.P.S. Если кому интересно, то картинка в заголовке — это фрагмент страницы из «Букваря славено-греко-латинского» Фёдора Поликарпова-Орлова (1701 г.). P.P.P.S. Может быть, есть научный журнал, куда этот текст, соответствующим образом допиленный, стоит предложить для публикации? книгоиздание