diff --git a/lab/lab_13-14.ipynb b/lab/lab_13-14.ipynb deleted file mode 100644 index 740d7d9..0000000 --- a/lab/lab_13-14.ipynb +++ /dev/null @@ -1,227 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "ordered-wrestling", - "metadata": {}, - "source": [ - "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", - "
\n", - "

Komputerowe wspomaganie tłumaczenia

\n", - "

13,14. Korekta pisowni [laboratoria]

\n", - "

Rafał Jaworski (2021)

\n", - "
\n", - "\n", - "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" - ] - }, - { - "cell_type": "markdown", - "id": "featured-afghanistan", - "metadata": {}, - "source": [ - "Współczesne programy typu CAT nie mogą obyć się bez korektora pisowni. Na bieżąco kontrolują one pisownię wyrazów po stronie docelowej, czyli tam, gdzie tłumacz wpisuje tłumaczenie. Jest to niezwykle istotne w sytuacji, gdy język docelowy nie jest dla tłumacza językiem ojczystym. Co więcej, badania wykazują, iż korekta pisowni wydatnie zmniejsza liczbę błędów w każdych scenariuszach." - ] - }, - { - "cell_type": "markdown", - "id": "seventh-genre", - "metadata": {}, - "source": [ - "Co poprawia korekta pisowni? Słowa. Tylko lub aż słowa. Program dokonujący korekty pisowni przegląda tekst słowo po słowie i sprawdza, czy należy ono do słownika. Jeśli nie, sygnalizowany jest błąd oraz, jeśli to możliwe, podawane sugestie poprawy. Co istotne, korektor pisowni nie zajmuje się szeregiem błędów, które mieszczą się w dziedzinie korekty gramatycznej, w tym:\n", - "* interpunkcją\n", - "* powtórzeniami wyrazów\n", - "* stylistyką." - ] - }, - { - "cell_type": "markdown", - "id": "sticky-society", - "metadata": {}, - "source": [ - "Aby zaimplementować korektor pisowni bez wątpienia potrzebny jest słownik. Skorzystajmy ze słownika, który znajdziemy w folderze data, pochodzącego z narzędzia Hunspell. Jest on spakowany - użyjmy techniki czytania z archiwum zip bez rozpakowywania. Poniższy kod wypisze fragment ze środka słownika." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "familiar-terrace", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "kalecząc\n", - "kaledonidy\n", - "kaledoński\n", - "kalefaktor\n", - "kalejdofon\n", - "kalejdoskop\n", - "kalejdoskopowość\n", - "kalejdoskopowy\n", - "kaleka\n", - "kaleki\n", - "kalema\n", - "kalendarium\n", - "kalendarz\n", - "kalendarzowy\n", - "kalendarzyk\n", - "kalendy\n", - "kalenica\n", - "kalenicowy\n", - "kalepin\n", - "kalesonki\n", - "kalesony\n" - ] - } - ], - "source": [ - "from zipfile import ZipFile\n", - "\n", - "with ZipFile('data/hunspell_pl.zip') as zipped_dictionary:\n", - " with zipped_dictionary.open('hunspell_pl.txt') as dictionary_file:\n", - " count = 0\n", - " for line_bytes in dictionary_file:\n", - " count += 1\n", - " if count >= 100000 and count <= 100020:\n", - " line = line_bytes.decode('utf-8')\n", - " print(line.rstrip())" - ] - }, - { - "cell_type": "markdown", - "id": "dominant-insurance", - "metadata": {}, - "source": [ - "Miejmy na uwadze, że powyższy słownik zawiera tylko formy podstawowe słowa, np. zawiera słowo \"kalendarz\", ale nie zawiera \"kalendarze\", \"kalendarza\", \"kalendarzy\" itp. " - ] - }, - { - "cell_type": "markdown", - "id": "single-brighton", - "metadata": {}, - "source": [ - "Algorytm korekty pisowni na podstawie słownika powinien działać według następujących kroków:\n", - "1. Wczytanie słownika do zbioru (set)\n", - "2. Podział tekstu do korekty na słowa (podział po spacji)\n", - "3. Dla każdego słowa wypisać, czy jest ono poprawne (znajduje się w słowniku) czy nie." - ] - }, - { - "cell_type": "markdown", - "id": "needed-watson", - "metadata": {}, - "source": [ - "### Ćwiczenie 1: Zaimplementuj podstawowy algorytm korekty pisowni według powyższych wytycznych." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "economic-southeast", - "metadata": {}, - "outputs": [], - "source": [ - "def correct_text(text):\n", - " return []" - ] - }, - { - "cell_type": "markdown", - "id": "endless-slide", - "metadata": {}, - "source": [ - "To jednak oczywiście nie wszystko. Do tej pory mamy funkcjonalność sygnalizowania słów błędnych, ale każdy dobry korektor pisowni potrafi podać sugestie poprawek. W tym celu musimy stawić czoła następującemu problemowi - wygenerowanie listy słów podobnych do danego słowa błędnego, które znajdują się w słowniku." - ] - }, - { - "cell_type": "markdown", - "id": "adult-freight", - "metadata": {}, - "source": [ - "W pierwszej kolejności musimy zdefiniować podobieństwo między wyrazami. Posłuży do tego dobrze nam znana odległość Levenshteina - wyrazy podobne to takie, dla których dystans Levenshteina jest niewielki (np. równy 1 lub 2). Teraz brakuje tylko algorytmu wyszukiwania wyrazów w danym słowniku, które znajdują się niedaleko (w sensie Levenshteina) danego błędnego słowa." - ] - }, - { - "cell_type": "markdown", - "id": "everyday-things", - "metadata": {}, - "source": [ - "Rozważmy następujący algorytm: dla danego słownika $D$ i błędnego słowa $w \\notin D$:\n", - "1. Wygeneruj zbiór $L_1(w)$ wszystkich słów, których odległość Levenshteina od $w$ wynosi 1.\n", - "2. Wyznacz zbiór $S_1(w)=L_1(w) \\cap D$\n", - "3. Wyznacz zbiór $L_2(w)=\\bigcup_{v \\in L_1(w)} L_1(v)$\n", - "4. Wyznacz zbiór $S_2(w)=L_2(w) \\cap D$\n", - "5. Zwróć jako listę sugestii: $S_1 \\cup S_2$" - ] - }, - { - "cell_type": "markdown", - "id": "industrial-convert", - "metadata": {}, - "source": [ - "### Ćwiczenie 2: Napisz funkcję do generowania zbioru $L_1(w)$ - wszystkich słów znajdujących się w odległości Levenshteina 1 od danego słowa w." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "built-sally", - "metadata": {}, - "outputs": [], - "source": [ - "def L1(w):\n", - " return []" - ] - }, - { - "cell_type": "markdown", - "id": "wireless-uncle", - "metadata": {}, - "source": [ - "### Ćwiczenie 3: Napisz funkcję do generowania sugestii poprawek dla danego słowa według opisanego wcześniej algorytmu." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "coordinated-cooperation", - "metadata": {}, - "outputs": [], - "source": [ - "def generate_suggestions(w):\n", - " return []" - ] - } - ], - "metadata": { - "author": "Rafał Jaworski", - "email": "rjawor@amu.edu.pl", - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "lang": "pl", - "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" - }, - "subtitle": "13,14. Korekta pisowni", - "title": "Komputerowe wspomaganie tłumaczenia", - "year": "2021" - }, - "nbformat": 4, - "nbformat_minor": 5 -}