{ "cells": [ { "cell_type": "markdown", "id": "expanded-entrance", "metadata": {}, "source": [ "# Komputerowe wspomaganie tłumaczenia" ] }, { "cell_type": "markdown", "id": "atlantic-greenhouse", "metadata": {}, "source": [ "# Zajęcia 11 - urównoleglanie" ] }, { "cell_type": "markdown", "id": "hungarian-davis", "metadata": {}, "source": [ "Na poprzednich zajęciach poznaliśmy techniki pozyskiwania tekstu z Internetu. Jeśli uda nam się w ten sposób pozyskać tekst w jednym języku oraz jego tłumaczenie na inny język, jesteśmy tylko o krok od uzyskania najbardziej przydatnego zasobu z punktu widzenia wspomagania tłumaczenia - pamięci tłumaczeń. Krokiem tym jest automatyczne urównoleglanie tekstu." ] }, { "cell_type": "markdown", "id": "bronze-removal", "metadata": {}, "source": [ "Automatyczne urównoleglanie tekstu składa się z dwóch kroków:\n", "1. Podziału tekstu źródłowego oraz docelowego na zdania.\n", "2. Dopasowaniu zdań źródłowych do docelowych." ] }, { "cell_type": "markdown", "id": "junior-works", "metadata": {}, "source": [ "Zdania, o których mowa w punkcie 1., powinniśmy rozumieć jako segmenty, tj. niekoniecznie kompletne zdania w sensie gramatycznym. Standardowym sposobem podziału tekstu na segmenty jest dzielenie po znaku nowej linii lub zaraz po kropce, o ile jest ona częścią sekwencji: \".[spacja][Wielka litera]\"" ] }, { "cell_type": "markdown", "id": "legitimate-corrections", "metadata": {}, "source": [ "### Ćwiczenie 1: Zaimplementuj podstawowy algorytm segmentacji tekstu. Użyj odpowiedniego wyrażenia regularnego, łapiącego wielkie litery w dowolnym języku, np. \"Ż\" (użyj klasy unikodowej). Zwróć listę segmentów." ] }, { "cell_type": "code", "execution_count": 1, "id": "german-dispute", "metadata": {}, "outputs": [], "source": [ "def sentence_split(text):\n", " return []" ] }, { "cell_type": "markdown", "id": "continued-assessment", "metadata": {}, "source": [ "### Ćwiczenie 2: Uruchom powyższy algorytm na treści wybranej przez siebie strony internetowej (do ściągnięcia treści strony wykorzystaj kod z laboratoriów nr 7). Zidentyfikuj co najmniej dwa wyjątki od ogólnej reguły podziału na segmenty i ulepsz algorytm." ] }, { "cell_type": "code", "execution_count": 3, "id": "guilty-morocco", "metadata": {}, "outputs": [], "source": [ "def sentence_split_enhanced(text):\n", " return []" ] }, { "cell_type": "markdown", "id": "experimental-recipient", "metadata": {}, "source": [ "Po podziale tekstu na segmenty po stronie źródłowej oraz docelowej, możemy przystąpić do kroku drugiego - dopasowania segmentów. Głównym wyzwaniem tego kroku jest fakt, iż po stronie źródłowej może być inna liczba segmentów, niż po stronie docelowej. Takie rozbieżności są bardzo częste, a wynikają między innymi z:\n", "* tłumaczenia jednego zdania źródłowego przy użyciu więcej niż jednego zdania\n", "* tłumaczenia więcej niż jednego zdania źródłowego przy użyciu jednego zdania\n", "* pominięcia zdania podczas tłumaczenia\n", "* rozbieżności pomiędzy wersjami tekstu źródłowego i docelowego (np. tekst źródłowy mógł być modyfikowany po przetłumaczeniu i tłumaczenie nie zostało zaktualizowane)\n", "* przetłumaczenia tekstu źródłowego tylko częściowo" ] }, { "cell_type": "markdown", "id": "australian-hundred", "metadata": {}, "source": [ "Problemy te rozwiązwyane są na różne sposoby. Najpopularniejszym programem do przeprowadzania urównoleglania jest [Hunalign](https://github.com/danielvarga/hunalign). Wejściem do programu są dwa pliki, zawierające po jednym segmencie w linii. Wyjściem - plik urównoleglony w wewnętrznym formacie hunaligna." ] }, { "cell_type": "markdown", "id": "russian-chambers", "metadata": {}, "source": [ "### Ćwiczenie 3: Odnajdź dowolną stronę, która jest dostępna w wielu językach. Pobierz z tej strony tekst oryginalny (tylko ze strony głównej) oraz przetłumaczony na dowolny inny język. Przy użyciu Pythona przygotuj pliki dla Hunaligna i uruchom go." ] }, { "cell_type": "markdown", "id": "controlled-pacific", "metadata": {}, "source": [ "Wyjściem z Hunaligna jest plik w specjalnym formacie Hunaligna. Problem jednak w tym, że niestety nie można go w prosty sposób zaimportować do jakiegokolwiek narzędzia typu CAT. Potrzebna jest konwersja do któregoś z bardziej popularnych formatów, np. XLIFF." ] }, { "cell_type": "markdown", "id": "divided-chain", "metadata": {}, "source": [ "XLIFF jest formatem do przechowywania pamięci tłumaczeń, który opiera się na XML-u. Przykładowy plik XLIFF wygląda następująco:" ] }, { "cell_type": "raw", "id": "appropriate-timber", "metadata": {}, "source": [ "\n", "\n", " \n", "
\n", " \n", " sample\n", " KWT\n", " KWT\n", " 123\n", " sample XLIFF file\n", " \n", "
\n", " \n", " \n", " Hello world!\n", " Hola mundo!\n", " \n", " \n", " File\n", " Archivo\n", " \n", " \n", " New\n", " Nuevo\n", " \n", " \n", " Exit\n", " Salir\n", " \n", " \n", "
\n", "
" ] }, { "cell_type": "markdown", "id": "falling-greenhouse", "metadata": {}, "source": [ "### Ćwiczenie 4: Napisz konwerter formatu hunaligna na XLIFF." ] }, { "cell_type": "code", "execution_count": null, "id": "remarkable-pillow", "metadata": {}, "outputs": [], "source": [ "def convert2xliff(hunalign_file_name):\n", " return 0" ] } ], "metadata": { "author": "Rafał Jaworski", "email": "rjawor@amu.edu.pl", "lang": "pl", "subtitle": "11. Urównoleglanie", "title": "Komputerowe wspomaganie tłumaczenia", "year": "2021", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }