Найти тему
radiophysics

Почему объем переведенного длиннее текста на английском?

Для нашего эксперимента возьмем обучающие тексты на английском с хорошим переводом на русский. Для начала все тексты с раздела, на который ведет ссылка скопируем в самые обычные текстовые файлы RU.txt и EN.txt. Посчитаем, сколько раз какая буква встречается в файле с помощью простого скрипта bash, приведенного в конце статьи. Всего букв английского алфавита в анализируемом тексте встретилось 58158, а в русском переводе получилось 61325 букв. То, что перевод на русский получается длиньше, связано с информационной емкостью языка. Можно предположить, что английский язык в 61325/58158 (чуть больше 5%) раз более емкий, чем русский, хотя подтвердить это не так просто. Но давайте попробуем хотя бы частично объяснить этот факт.

Photo by ReadyElements from PxHere.
Photo by ReadyElements from PxHere.

Вычислим плотности распредения вероятностей (это тоже делает скрипт, приведенный в конце статьи), которые изображены на рисунках ниже.

Рисунок 1. Плотность распределения вероятности для букв на английском языке.
Рисунок 1. Плотность распределения вероятности для букв на английском языке.
Рисунок 2. Плотность распределения вероятности для букв на русском языке.
Рисунок 2. Плотность распределения вероятности для букв на русском языке.

Одна из важных формул в теории информации — формула Шеннона, по которой можно вычислить количество информации информационного сообщения: I = -(p1*log_2 (p1) + p2*log_2 (p2) + . . . + pN*log_2 (pN)), где pi — вероятность того, что именно i-е сообщение выделено в наборе из N сообщений. Сообщениями сейчас мы будем считать буквы алфавита (английского для текста на английском и русского для текста на русском). Отдельная буква на английском весит 4,17 бит (4,70 для равновероятных 26 символов), а на русском — 4,49 бит (5,04 для 33 равновероятных символов). Текст на русском не только больше символов в алфавите имеет, но и больше места в памяти компьютера занимает при самом оптимальном посимвольном кодировании. Отдельный символ на русском весит почти на 7,7% больше символа на английском языке.

Попробуем иначе и рассмотрим "алфавит" из комбинаций по две буквы, в рассматриваемом тексте на английском языке их 423, отдельная комбинация весит 7,42 бит. Проделаем аналогичную операцию для текста на русском языке. Всего уникальных комбинаций из двух букв встречается 650 штук, а информации несет одна комбинация 8,01 бит. Двухбуквенные сочетания на русском весят на 8,0% больше двухбуквенных сочетаний на английском.

Рассмотрение трехбуквенных комбинаций на английском приводит к размеру алфавита 2531 с весом группы символов 9,99 бит, а на русском — 3794 групп по 10,69 бит на одну группу (группа на русском весит на 7,0% больше группы на английском). Комбинации из четырех букв (5326 уникальных групп) на английском весят 11,40 бит, а на русском (8209 уникальных групп) — 12,04 бита (на 6,6% больше группы из четырех букв на английском). Комбинации из пяти букв (5749 уникальных групп) на английском весят 11,76 бит, а на русском (9741 уникальная группа) — 12,49 бит (на 6,2% больше группы из пяти букв на английском).

Поиск каждой последующей группы занимает все больше времени, но видно, что есть тенденция на уменьшение количества информации при увеличении длины последовательности на русском языке (по сравнению с английским языком). Также стоит отметить, что английских букв 26, комбинаций из двух букв нашлось 423 (62,6% от теоретически возможного), из трех букв — 2531 (14,4% от теоретически возможного), из четырех букв — 5326 (1,2% от теоретически возможного), из пяти букв — 5749 (0,05% от теоретически возможного). В свою очередь русских букв 33, комбинаций из двух букв нашлось 650 (59,7% от теоретически возможного), из трех букв — 3794 (10,6% от теоретически возможного), из четырех букв — 8209 (0,7% от теоретически возможного), из пяти букв — 9741 (0,02% от теоретически возможного).

Перечисленные проценты показывают, что на русском языке последующие буквы несколько предсказуемее, чем на английском. Это связано с количеством допустимых комбинаций букв.

Проведенный эксперимент имеет недостаток в размере анализируемого текста, который мог бы быть гораздо больше, чтобы проверять информативность языка более качественно. Также, возможно, было бы интересно посмотреть корреляции в рядах букв или проанализировать условные вероятности встречи букв после других букв.

Подписывайтесь на мой канал!:)

Скрипт bash для анализа текстовых файлов на русском и английском языках.

#!/bin/bash

globsum=0;

for let in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; do

big=$(grep -o "${let}" EN.txt | wc -l);

lets=$(printf ${let} | sed 's/[[:upper:]]*/\L&/');

small=$(grep -o "${lets}" EN.txt | wc -l);

sum=$(echo "${big}+${small}" | bc -l);

globsum=$(echo "${globsum}+${sum}" | bc -l);

done

echo ${globsum};

printf "#${globsum}\n" > ENres.dat

for let in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; do

big=$(grep -o "${let}" EN.txt | wc -l);

lets=$(printf ${let} | sed 's/[[:upper:]]*/\L&/');

small=$(grep -o "${lets}" EN.txt | wc -l);

sum=$(echo "${big}+${small}" | bc -l);

prob=$(echo "${sum}/$globsum" | bc -l);

printf "$let $lets $prob \n" >> ENres.dat;

done

globsum=0;

for let in А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я; do

big=$(grep -o "${let}" RU.txt | wc -l);

lets=$(printf ${let} | sed 's/[[:upper:]]*/\L&/');

small=$(grep -o "${lets}" RU.txt | wc -l);

sum=$(echo "${big}+${small}" | bc -l);

globsum=$(echo "${globsum}+${sum}" | bc -l);

done

echo ${globsum};

printf "#${globsum}\n" > RUres.dat

for let in А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я; do

big=$(grep -o "${let}" RU.txt | wc -l);

lets=$(printf ${let} | sed 's/[[:upper:]]*/\L&/');

small=$(grep -o "${lets}" RU.txt | wc -l);

sum=$(echo "${big}+${small}" | bc -l);

prob=$(echo "${sum}/$globsum" | bc -l);

printf "$let $lets $prob \n" >> RUres.dat;

done

exit