diff --git a/translator.ipynb b/translator.ipynb new file mode 100644 index 0000000..620a242 --- /dev/null +++ b/translator.ipynb @@ -0,0 +1,730 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "hhT4RiSVg-ah" + }, + "outputs": [], + "source": [ + "import gensim\n", + "import numpy as np\n", + "from gensim.models import KeyedVectors" + ] + }, + { + "cell_type": "code", + "source": [ + "import zipfile\n", + "\n", + "zip_file_uk = \"/content/drive/MyDrive/для кодов/ translation/cc.uk.300.vec.zip\"\n", + "zip_file_ru = \"/content/drive/MyDrive/для кодов/ translation/cc.ru.300.vec.zip\"\n", + "\n", + "extract_dir_uk = \"uk_embeddings\"\n", + "extract_dir_ru = \"ru_embeddings\"\n", + "\n", + "with zipfile.ZipFile(zip_file_uk, 'r') as zip_ref:\n", + " zip_ref.extractall(extract_dir_uk)\n", + "\n", + "with zipfile.ZipFile(zip_file_ru, 'r') as zip_ref:\n", + " zip_ref.extractall(extract_dir_ru)\n" + ], + "metadata": { + "id": "QQq4G1rshEcm" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Du04MpFwZ8Fw", + "outputId": "729028ec-8709-4735-f1d3-b6a76e62dae8" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "uk_emb = KeyedVectors.load_word2vec_format(\"uk_embeddings/cc.uk.300.vec\")\n", + "ru_emb = KeyedVectors.load_word2vec_format(\"ru_embeddings/cc.ru.300.vec\")" + ], + "metadata": { + "id": "g56dFFMihH-P" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "ru_emb.most_similar([ru_emb[\"август\"]], topn=10)\n", + "uk_emb.most_similar([uk_emb[\"серпень\"]])\n", + "ru_emb.most_similar([uk_emb[\"серпень\"]])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3sf7eJozh4dS", + "outputId": "c3f84952-7965-40ff-e754-56e208305dc4" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[('Недопустимость', 0.24435284733772278),\n", + " ('конструктивность', 0.23293082416057587),\n", + " ('офор', 0.23256804049015045),\n", + " ('deteydlya', 0.230317160487175),\n", + " ('пресечении', 0.22632381319999695),\n", + " ('одностороннего', 0.22608886659145355),\n", + " ('подход', 0.2230587750673294),\n", + " ('иболее', 0.22003726661205292),\n", + " ('2015Александр', 0.21872766315937042),\n", + " ('конструктивен', 0.21796567738056183)]" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "source": [ + "def load_word_pairs(filename):\n", + " uk_ru_pairs = []\n", + " uk_vectors = []\n", + " ru_vectors = []\n", + " with open(filename, \"r\") as inpf:\n", + " for line in inpf:\n", + " uk, ru = line.rstrip().split(\"\\t\")\n", + " if uk not in uk_emb or ru not in ru_emb:\n", + " continue\n", + " uk_ru_pairs.append((uk, ru))\n", + " uk_vectors.append(uk_emb[uk])\n", + " ru_vectors.append(ru_emb[ru])\n", + " return uk_ru_pairs, np.array(uk_vectors), np.array(ru_vectors)" + ], + "metadata": { + "id": "gC88Z0Olh-nU" + }, + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "uk_ru_train, X_train, Y_train = load_word_pairs(\"/content/drive/MyDrive/для кодов/ translation/ukr_rus.train.txt\")" + ], + "metadata": { + "id": "EuwXSlp3j3F0" + }, + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "uk_ru_test, X_test, Y_test = load_word_pairs(\"/content/drive/MyDrive/для кодов/ translation/ukr_rus.test.txt\")" + ], + "metadata": { + "id": "cTTYOBnnkWT_" + }, + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "mapping = LinearRegression(fit_intercept=False)\n", + "mapping.fit(X_train, Y_train)\n", + "\n", + "\n", + "august = mapping.predict(uk_emb[\"серпень\"].reshape(1, -1))\n", + "\n", + "\n", + "ru_emb.most_similar(august)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DXqQ9x_Ui-ck", + "outputId": "4adf6d27-ee8a-4af4-b386-6bd424fd9702" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[('апрель', 0.8541286587715149),\n", + " ('июнь', 0.8411202430725098),\n", + " ('март', 0.839699387550354),\n", + " ('сентябрь', 0.8359869718551636),\n", + " ('февраль', 0.832929790019989),\n", + " ('октябрь', 0.8311845660209656),\n", + " ('ноябрь', 0.8278924226760864),\n", + " ('июль', 0.823452889919281),\n", + " ('август', 0.8120501637458801),\n", + " ('декабрь', 0.803900420665741)]" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "def precision(pairs, mapped_vectors, topn=1):\n", + " \"\"\"\n", + " :args:\n", + " pairs = list of right word pairs [(uk_word_0, ru_word_0), ...]\n", + " mapped_vectors = list of embeddings after mapping from source embedding space to destination embedding space\n", + " topn = the number of nearest neighbours in destination embedding space to choose from\n", + " :returns:\n", + " precision_val, float number, total number of words for those we can find the right translation at top K.\n", + " \"\"\"\n", + " assert len(pairs) == len(mapped_vectors)\n", + " num_matches = 0\n", + " for i, (_, ru) in enumerate(pairs):\n", + " similarities = cosine_similarity([mapped_vectors[i]], ru_emb.vectors)\n", + " top_similar_indices = np.argsort(similarities, axis=1)[0][-topn:]\n", + " top_similar_words = [ru_emb.index_to_key[idx] for idx in top_similar_indices]\n", + " if ru in top_similar_words:\n", + " num_matches += 1\n", + " precision_val = num_matches / len(pairs)\n", + " return precision_val" + ], + "metadata": { + "id": "GL2ejcdjjDnn" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "assert precision([(\"серпень\", \"август\")], august, topn=10) == 1.0\n" + ], + "metadata": { + "id": "LL0Qv_oupx3X" + }, + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "assert precision([(\"серпень\", \"август\")], august, topn=5) == 0.0\n", + "assert precision([(\"серпень\", \"август\")], august, topn=9) == 1.0\n", + "assert precision([(\"серпень\", \"август\")], august, topn=10) == 1.0" + ], + "metadata": { + "id": "xWHz0Y_ToU83" + }, + "execution_count": 14, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "assert precision(uk_ru_test, X_test) == 0.0\n", + "assert precision(uk_ru_test, Y_test) == 1.0" + ], + "metadata": { + "id": "ht0UnVckTvvN" + }, + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "precision_top1 = precision(uk_ru_test, mapping.predict(X_test), 1)\n", + "precision_top5 = precision(uk_ru_test, mapping.predict(X_test), 5)\n", + "\n", + "assert precision_top1 >= 0.635\n", + "assert precision_top5 >= 0.813" + ], + "metadata": { + "id": "Vela3BG5T0-I" + }, + "execution_count": 16, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def learn_transform(X_train, Y_train):\n", + " \"\"\"\n", + " :param X_train: Source embeddings (uk_emb)\n", + " :param Y_train: Target embeddings (ru_emb)\n", + " :returns: Orthogonal transformation matrix W\n", + " \"\"\"\n", + " covariance_matrix = np.dot(X_train.T, Y_train)\n", + " U, _, Vt = np.linalg.svd(covariance_matrix)\n", + " W = np.dot(U, Vt)\n", + "\n", + " return W\n" + ], + "metadata": { + "id": "TouGbBhmWwap" + }, + "execution_count": 17, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "W = learn_transform(X_train, Y_train)" + ], + "metadata": { + "id": "CQ9UFlOgLdPP" + }, + "execution_count": 18, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "ru_emb.most_similar([np.matmul(uk_emb[\"серпень\"], W)])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3IqdfGduLfYe", + "outputId": "54cc31f1-aa57-4da0-e940-62093bfc28a5" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[('апрель', 0.8237906694412231),\n", + " ('сентябрь', 0.8049713373184204),\n", + " ('март', 0.8025653958320618),\n", + " ('июнь', 0.8021842241287231),\n", + " ('октябрь', 0.8001735806465149),\n", + " ('ноябрь', 0.7934483289718628),\n", + " ('февраль', 0.7914120554924011),\n", + " ('июль', 0.7908109426498413),\n", + " ('август', 0.7891016602516174),\n", + " ('декабрь', 0.7686373591423035)]" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "source": [ + "assert precision(uk_ru_test, np.matmul(X_test, W)) >= 0.653\n", + "assert precision(uk_ru_test, np.matmul(X_test, W), 5) >= 0.824" + ], + "metadata": { + "id": "4xZVDARtLiFe" + }, + "execution_count": 20, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "with open(\"/content/drive/MyDrive/для кодов/ translation/fairy_tale.txt\", \"r\") as inpf:\n", + " uk_sentences = [line.rstrip().lower() for line in inpf]" + ], + "metadata": { + "id": "Uw217zTiT29B" + }, + "execution_count": 22, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def translate(sentence):\n", + " \"\"\"\n", + " :args:\n", + " sentence - sentence in Ukrainian (str)\n", + " :returns:\n", + " translation - sentence in Russian (str)\n", + " \"\"\"\n", + " words = sentence.split()\n", + "\n", + " translated_words = []\n", + " for word in words:\n", + " if word in uk_emb:\n", + " uk_embedding = uk_emb[word]\n", + " transformed_embedding = np.dot(uk_embedding, W)\n", + " nearest_russian_word = ru_emb.similar_by_vector(transformed_embedding, topn=1)[0][0]\n", + " translated_words.append(nearest_russian_word)\n", + " else:\n", + " translated_words.append(word)\n", + " translation = ' '.join(translated_words)\n", + "\n", + " return translation" + ], + "metadata": { + "id": "BRSV9UNYTZcZ" + }, + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "assert translate(\".\") == \".\"\n", + "assert translate(\"1 , 3\") == \"1 , 3\"\n", + "assert translate(\"кіт зловив мишу\") == \"кот поймал мышку\"" + ], + "metadata": { + "id": "NliuQwHzTZVi" + }, + "execution_count": 24, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "for sentence in uk_sentences:\n", + " print(\"src: {}\\ndst: {}\\n\".format(sentence, translate(sentence)))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hsV0nrL_TZJB", + "outputId": "ff8e1d56-fadb-4067-bfcc-6a0969eca242" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "src: лисичка - сестричка і вовк - панібрат\n", + "dst: лисичка – сестричка и волк – панібрат\n", + "\n", + "src: як була собі лисичка та зробила хатку, та й живе. а це приходять холоди. от лисичка замерзла та й побігла в село вогню добувать, щоб витопити. прибігає до одної баби та й каже:\n", + "dst: как была себе лисичка и сделала хатку, и и живе. а оно приходят холоди. из лисичка замерзла и и побежала во село огня добувать, чтобы витопити. прибегает к одной бабы и и каже:\n", + "\n", + "src: — здорові були, бабусю! з неділею... позичте мені огню, я вам одслужу.\n", + "dst: — здоровые були, бабусю! со неділею... позичте мне огню, мной тебе одслужу.\n", + "\n", + "src: — добре, — каже, — лисичко - сестричко. сідай погрійся трохи, поки я пиріжечки повибираю з печі!\n", + "dst: — добре, — каже, — лисичко – сестричко. садись погрійся трохи, пока мной пирожки повибираю со печі!\n", + "\n", + "src: а баба макові пиріжки пекла. от баба вибирає пиріжки та на столі кладе, щоб прохололи; а лисичка підгляділа та за пиріг, та з хати... виїла мачок із середини, а туди напхала сміттячка, стулила та й біжить.\n", + "dst: а бабка маковые пирожки пекла. из бабка выбирает пирожки и по столе кладе, чтобы прохололи; а лисичка підгляділа и за пиріг, и со хати... виїла мачок со середини, а туда напхала сміттячка, стулила и и біжить.\n", + "\n", + "src: от біжить, а хлопці товар женуть до води.\n", + "dst: из біжить, а парни товар гонят к воды\n", + "\n", + "src: — здорові були, хлопці!\n", + "dst: — здоровые були, хлопці!\n", + "\n", + "src: — здорова, лисичко - сестричко!\n", + "dst: — здорова, лисичко – сестричко!\n", + "\n", + "src: — проміняйте мені бичка - третячка на маковий пиріжок!\n", + "dst: — проміняйте мне бычка – третячка по маковый пиріжок!\n", + "\n", + "src: — добре, — кажуть.\n", + "dst: — добре, — кажуть.\n", + "\n", + "src: — тільки, — каже, — тепер не їжте, а як я вибіжу з села, то тоді.\n", + "dst: — тільки, — каже, — теперь не їжте, а как мной вибіжу со села, то тоді.\n", + "\n", + "src: от помінялись. лисичка за бичка — та в ліс. а хлопці до пиріжка — а там сміттянко.\n", + "dst: из помінялись. лисичка за бычка — и во сельско а парни к пирожка — а там сміттянко.\n", + "\n", + "src: от прибігла лисичка до своєї хатки, вирубала дерево, зробила санки, запрягла бичка — іде. аж біжить вовк:\n", + "dst: из прибежала лисичка к своего хатки, вирубала дерево, сделала санки, запрягла бычка — іде. аж бежит вовк:\n", + "\n", + "src: — здорова, лисичко - сестричко!\n", + "dst: — здорова, лисичко – сестричко!\n", + "\n", + "src: — здоров, вовчику - братику!\n", + "dst: — здоров, вовчику – братику!\n", + "\n", + "src: — де ти взяла бичка - третячка і санки?\n", + "dst: — куда ты взяла бычка – третячка и санки?\n", + "\n", + "src: — зробила собі!\n", + "dst: — сделала собі!\n", + "\n", + "src: — підвези ж, — каже, — мене, лисичко - сестричко!\n", + "dst: — підвези ж, — каже, — мене, лисичко – сестричко!\n", + "\n", + "src: — е, куди я тебе візьму? ти мені й санки поламаєш!\n", + "dst: — е, куда мной тебя візьму? ты мне и санки поламаєш!\n", + "\n", + "src: — ні, — каже, — я тільки одну ніжку положу.\n", + "dst: — ні, — каже, — мной только одну ножку положу.\n", + "\n", + "src: — ну, клади!\n", + "dst: — ну, клади!\n", + "\n", + "src: от од’їхали трохи, вовк і каже:\n", + "dst: из од’їхали трохи, волк и каже:\n", + "\n", + "src: — положу я, лисичко - сестричко, й другу ніжку!\n", + "dst: — положу я, лисичко – сестричко, и вторую ніжку!\n", + "\n", + "src: — е, вовчику - братику, ти мені й санки поламаєш!\n", + "dst: — е, вовчику – братику, ты мне и санки поламаєш!\n", + "\n", + "src: — ні, — каже, — не поламаю!\n", + "dst: — ні, — каже, — не поламаю!\n", + "\n", + "src: — ну, клади!\n", + "dst: — ну, клади!\n", + "\n", + "src: вовк і положив. ідуть, їдуть, коли це щось — трісь.\n", + "dst: волк и положив. ідуть, їдуть, когда оно что-то — трісь.\n", + "\n", + "src: — е, вовчику - братику, ти мені вже й санки ламаєш!\n", + "dst: — е, вовчику – братику, ты мне уже и санки ламаєш!\n", + "\n", + "src: — ні лисичко - сестричко, то я орішок розкусив.\n", + "dst: — ни лисичко – сестричко, то мной орішок розкусив.\n", + "\n", + "src: — ну, гляди!\n", + "dst: — ну, гляди!\n", + "\n", + "src: от їдуть...\n", + "dst: из їдуть...\n", + "\n", + "src: — положу я, лисичко - сестричко, й третю ніжку! — каже вовк.\n", + "dst: — положу я, лисичко – сестричко, и третью ніжку! — говорит вовк.\n", + "\n", + "src: — куди ти положиш? ти мені санки поламаєш! чим я тоді дровець привезу?\n", + "dst: — куда ты положиш? ты мне санки поламаєш! Чем мной тогда дровець привезу?\n", + "\n", + "src: — ні, — каже, — не поламаю.\n", + "dst: — ні, — каже, — не поламаю.\n", + "\n", + "src: — ну, клади.\n", + "dst: — ну, клади.\n", + "\n", + "src: вовк положив і третю ногу. коли це — трісь!\n", + "dst: волк положил и третью ногу. когда оно — трісь!\n", + "\n", + "src: — ой лихо! — каже лисичка. — йди собі геть, вовчику, — ти мені зовсім санки поламаєш.\n", + "dst: — ой лихо! — говорит лисичка. — иди себе геть, вовчику, — ты мне совсем санки поламаєш.\n", + "\n", + "src: — ні, то я орішок розкусив!\n", + "dst: — ні, то мной орішок розкусив!\n", + "\n", + "src: — дай же й мені!\n", + "dst: — дай то и мені!\n", + "\n", + "src: — нема, — каже, — останній!\n", + "dst: — нема, — каже, — останній!\n", + "\n", + "src: їдуть собі та й їдуть; вовчик і каже:\n", + "dst: едут себе и и їдуть; вовчик и каже:\n", + "\n", + "src: — сяду я зовсім, лисичко!\n", + "dst: — сяду мной зовсім, лисичко!\n", + "\n", + "src: — куди ти сядеш, вовчику - братику? і санки розламаєш!\n", + "dst: — куда ты сядеш, вовчику – братику? и санки розламаєш!\n", + "\n", + "src: — я помаленьку, — каже.\n", + "dst: — мной помаленьку, — каже.\n", + "\n", + "src: — ну, гляди!\n", + "dst: — ну, гляди!\n", + "\n", + "src: от вовчик тільки що сів, а санки так і розпались... лисичка тоді давай його лаять! лаяла - лаяла та й каже:\n", + "dst: из вовчик только что сів, а санки так и розпались... лисичка тогда давай его лаять! ругала – ругала и и каже:\n", + "\n", + "src: — піди ж, сякий - такий сину, дровець нарубай і на санки вирубай, і приволочи!\n", + "dst: — пойди ж, сякий – такой сину, дровець нарубай и по санки вирубай, и приволочи!\n", + "\n", + "src: — як же я, — каже вовчик, — вирубаю, коли я не знаю, якого дерева?\n", + "dst: — как то я, — говорит вовчик, — вирубаю, когда мной не знаю, которого дерева?\n", + "\n", + "src: — е, — сякий - такий сину! як санчата ламать, так і знав, а дровець вирубать, то й ні!\n", + "dst: — е, — сякий – такой сину! как санки ламать, так и знав, а дровець вирубать, то и ні!\n", + "\n", + "src: коришувала його, коришувала...\n", + "dst: коришувала його, коришувала...\n", + "\n", + "src: — як увійдеш, — каже, — в ліс, то кажи: « рубайся, дерево, й пряме, й криве! рубайся, дерево, й пряме, й криве! »\n", + "dst: — как увійдеш, — каже, — во ліс, то кажи: « рубайся, дерево, и пряме, и криве! рубайся, дерево, и пряме, и криве! »\n", + "\n", + "src: вовк і пішов.\n", + "dst: волк и пішов.\n", + "\n", + "src: от приходить в ліс та й каже:\n", + "dst: из приходит во лес и и каже:\n", + "\n", + "src: — рубайся, дерево, криве й криве!\n", + "dst: — рубайся, дерево, кривое и криве!\n", + "\n", + "src: дерево й нарубалось. таке корячкувате, що й на палицю не вибереш — не то на полозок! приносить вовчик до лисички те дерево. вона як подивилась, давай його знов батькувати.\n", + "dst: дерево и нарубалось. такое корячкувате, что и по палку не выберешь — не то по полозок! приносит вовчик к лисички что дерево. она как подивилась, давай его снова батькувати.\n", + "\n", + "src: — ти, — каже, — сякий - такий сину, не так казав, як я тобі веліла!\n", + "dst: — ти, — каже, — сякий – такой сину, не так казав, как мной тебе веліла!\n", + "\n", + "src: — ні, лисичко - сестричко, я, — каже, — стояв та все казав: « рубайся, дерево, криве й криве! »\n", + "dst: — ні, лисичко – сестричко, я, — каже, — стоял и всё казав: « рубайся, дерево, кривое и криве! »\n", + "\n", + "src: — е, бісів сину, й того недотепний! ну, сиди ж ти тут, — я сама піду нарубаю.\n", + "dst: — е, бесов сину, и того недотепний! ну, сиди же ты тут, — мной сама пойду нарубаю.\n", + "\n", + "src: та й пішла.\n", + "dst: и и пішла.\n", + "\n", + "src: от сидить вовк сам собі — так їсти хочеться! він думав - думав: « давай, — каже, — з’їм бичка та й утечу! » от взяв проїв дірку у бичка, із середини все виїв, а туди горобців напустив і соломою заткнув, а сам — драла... приходить лисичка, зробила санчата, сіла...\n", + "dst: из сидит волк сам себе — так кушать хочеться! он думал – думав: « давай, — каже, — з’їм бычка и и утечу! » из взял проїв дыру во бичка, со середины всё виїв, а туда воробьёв напустил и соломой заткнув, а сам — драла... приходит лисичка, сделала санчата, сіла...\n", + "\n", + "src: — гей, бичок - третячок!\n", + "dst: — гей, бычок – третячок!\n", + "\n", + "src: аж бичок не везе. вона його батогом. як ударила, а віхоть соломи й випав; а горобці — хррр!\n", + "dst: аж бычок не везе. она его батогом. как ударила, а віхоть соломы и випав; а воробьи — хррр!\n", + "\n", + "src: — а, сякий - такий вовчик! постій же, — каже, — я тобі згадаю!\n", + "dst: — а, сякий – такой вовчик! постой же, — каже, — мной тебе згадаю!\n", + "\n", + "src: та й пішла...\n", + "dst: и и пішла...\n", + "\n", + "src: лягла на шляху та й лежить. ідуть чумаки з рибою; вона притаїлась, мов нежива. чумаки дивляться — аж лисиця:\n", + "dst: легла по пути и и лежить. идут казаки со рибою; она притаїлась, языки нежива. казаки смотрят — аж лисиця:\n", + "\n", + "src: — візьмім, — кажуть, — бра, та продамо — буде за що хоч погрітися!\n", + "dst: — візьмім, — кажуть, — бра, и продадим — будет за что хоть погрітися!\n", + "\n", + "src: скинули її на останній віз та й поїхали. ідуть та й їдуть. а лисичка - сестричка бачить, що вони не дивляться, та все кида по рибці на дорогу, все кида... от як накидала вже багато, тоді нишком і сама злізла. чумаки ж поїхали собі далі, а вона позбирала рибку, сіла та й їсть.\n", + "dst: сбросили ей по последний визы и и поїхали. идут и и їдуть. а лисичка – сестричка бачить, что они не дивляться, и всё кида по рыбки по дорогу, всё кида... из как навязала уже багато, тогда втихаря и сама злізла. казаки же поехали себе далі, а она позбирала рибку, присела и и їсть.\n", + "\n", + "src: коли це біжить вовчик:\n", + "dst: когда оно бежит вовчик:\n", + "\n", + "src: — здорова була, лисичко - сестричко!\n", + "dst: — здоровая була, лисичко – сестричко!\n", + "\n", + "src: — здоров, вовчику - братику!\n", + "dst: — здоров, вовчику – братику!\n", + "\n", + "src: — що ти робиш, лисичко - сестричко?\n", + "dst: — что ты робиш, лисичко – сестричко?\n", + "\n", + "src: — рибу, — каже, — їм.\n", + "dst: — рибу, — каже, — їм.\n", + "\n", + "src: — дай же й мені!\n", + "dst: — дай то и мені!\n", + "\n", + "src: — піди собі налови.\n", + "dst: — пойди себе налови.\n", + "\n", + "src: — так як же я наловлю, коли я не вмію?\n", + "dst: — так как то мной наловлю, когда мной не вмію?\n", + "\n", + "src: — ну, як знаєш, а я не дам і кісточки!\n", + "dst: — ну, как знаєш, а мной не дам и кісточки!\n", + "\n", + "src: — так хоч навчи мене, як наловить.\n", + "dst: — так хоть научить мене, как наловить.\n", + "\n", + "src: а лисичка й дума: « постій же! ти мого бичка - третячка з’їв — я тепер тобі оддячу! »\n", + "dst: а лисичка и дума: « постой же! ты моего бычка – третячка з’їв — мной теперь тебе оддячу! »\n", + "\n", + "src: — а так, — каже, — піди до ополонки, устроми в ополонку хвіст та потихеньку води ним і приказуй: « ловись, рибко, мала й велика! ловись, рибко, мала й велика! » то вона й наловиться.\n", + "dst: — а так, — каже, — пойди к ополонки, устроми во прорубь хвост и потихоньку воды ним и приказуй: « ловись, рибко, имела и велика! ловись, рибко, имела и велика! » то она и наловиться.\n", + "\n", + "src: — ну, спасибі за науку! — каже вовчик.\n", + "dst: — ну, спасибо за науку! — говорит вовчик.\n", + "\n", + "src: от прибігає вовчик до ополонки, устромив в ополонку хвіст:\n", + "dst: из прибегает вовчик к ополонки, устромив во прорубь хвіст:\n", + "\n", + "src: — ловись, — каже, — рибко, мала й велика!\n", + "dst: — ловись, — каже, — рибко, имела и велика!\n", + "\n", + "src: а лисичка з очерету:\n", + "dst: а лисичка со очерету:\n", + "\n", + "src: — мерзни, мерзни, вовчий хвіст!\n", + "dst: — мерзни, мерзни, волчий хвіст!\n", + "\n", + "src: а мороз надворі такий, що аж шкварчить! вовчик хвостиком усе водить та:\n", + "dst: а мороз дворе такий, что аж шкварчить! вовчик хвостиком всё водит та:\n", + "\n", + "src: — ловись, рибко, мала й велика!\n", + "dst: — ловись, рибко, имела и велика!\n", + "\n", + "src: а лисичка:\n", + "dst: а лисичка:\n", + "\n", + "src: — мерзни, мерзни, вовчий хвіст!\n", + "dst: — мерзни, мерзни, волчий хвіст!\n", + "\n", + "src: поки ловив вовчик рибу, поки хвіст так і прикипів в ополонці! тоді лисичка в село:\n", + "dst: пока ловил вовчик рибу, пока хвост так и пугаясь во ополонці! тогда лисичка во село:\n", + "\n", + "src: — ідіть, люди, вовка бить!\n", + "dst: — ідіть, люди, волка бить!\n", + "\n", + "src: люди як вискочать — з кочергами, з рогачами, із сокирами: вбили того вовка і пропав бідний! а лисичка й досі живе у своїй хатці.\n", + "dst: люди как вискочать — со кочергами, со рогачами, со сокирами: убили того волка и пропал бідний! а лисичка и сих живет во своей хатці.\n", + "\n" + ] + } + ] + } + ] +} \ No newline at end of file