{ "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": 4, "id": "german-dispute", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "To jest próba.\n", "Test musi byc wykonany.\n", "Wszystko jest okey.\n", "Źródło wody.\n", "Ósemka\n" ] } ], "source": [ "import regex as re\n", "\n", "def segment_text(text):\n", " regex = re.compile(r'\\p{Lu}')\n", " positions = [match.start() for match in regex.finditer(text)]\n", " positions.insert(0, 0)\n", " positions.append(len(text))\n", " segments = [text[positions[i]:positions[i+1]].strip() for i in range(len(positions)-1)]\n", "\n", " return segments\n", "\n", "text = \"To jest próba. Test musi byc wykonany. Wszystko jest okey. Źródło wody. Ósemka\"\n", "segments = segment_text(text)\n", "for segment in segments:\n", " print(segment)\n" ] }, { "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": 10, "id": "guilty-morocco", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['epoznan.pl - pierwszy portal',\n", " 'Poznania',\n", " 'Wyszukaj',\n", " 'Zaloguj',\n", " 'Login',\n", " 'Hasło',\n", " 'Zapomniałeś hasła?',\n", " 'Zaloguj',\n", " 'Nie masz konta?',\n", " 'Zarejestruj się',\n", " 'Wiadomości kronika policyjna inwestycje nieruchomości biznes polityka komunikacja wywiady kultura historia life style region pogoda',\n", " 'Pogoda',\n", " 'Sport',\n", " 'Kultura i rozrywka',\n", " 'Korki',\n", " 'Forum',\n", " 'Kontakt 7 godzin temu',\n", " 'Club we',\n", " 'Wtórku wydał kolejne oświadczenie w związku ze śmiercią 25-latka.',\n", " 'Mają poprawić bezpieczeństwo 10 8 godzin temu',\n", " 'Zauważyła starszą panią szukającą jedzenia w śmietniku, chciała jej pomóc 27 8 godzin temu',\n", " 'W jednej z poznańskich \"',\n", " 'Biedronek\" zmarnowała się żywność? \"',\n", " 'Padły szafy chłodnicze\" 21 10 godzin temu',\n", " 'Już jutro wielkie otwarcie \"',\n", " 'Klubu na',\n", " 'Fali\". \"',\n", " 'Wygląda po zimie fatalnie\"? 46 1 10 godzin temu',\n", " 'Letnie koncerty poznańskiej orkiestry jazzowej z',\n", " 'Moniką',\n", " 'Borzym i',\n", " 'Pauliną',\n", " 'Przybysz',\n", " 'Reklama 8 10 godzin temu',\n", " 'Poważny wypadek na przejściu dla pieszych z udziałem motocyklisty.',\n", " 'Poszkodowany został zabrany do szpitala 29 6 12 godzin temu',\n", " 'Przestrzegała przed chłopakiem, który chodził z psem na smyczy. \"',\n", " 'Napluł mi na twarz\" 113 12 godzin temu',\n", " 'Rekrutacja do jednej z 200 najlepszych uczelni biznesowych na świecie trwa',\n", " 'Reklama 8 13 godzin temu',\n", " 'Policjanci odzyskali dwa skradzione samochody 22 1 15 godzin temu',\n", " 'Podróż życia #',\n", " 'Prostoz',\n", " 'Poznania',\n", " 'Reklama 6 16 godzin temu',\n", " 'Duża inwestycja w regionie.',\n", " 'Miasto zyska nowy odcinek drogi wojewódzkiej i wiadukt nad torami 29 1 17 godzin temu',\n", " 'Zostawił na moment busa z kluczykami w środku w centrum miasta.',\n", " 'Okazję wykorzystał 36-latek i odjechał 17 2 17 godzin temu',\n", " 'Trwa walka o życie 11-latka.',\n", " 'Chłopiec przewrócił się na hulajnodze elektrycznej, nie miał kasku 78 17 godzin temu',\n", " 'Jest kolejne ostrzeżenie meteo dla regionu.',\n", " 'Tym razem przed upałem! 25 18 godzin temu 4 premiery na 1 festiwalu teatralnym.',\n", " 'W',\n", " 'Poznaniu!',\n", " 'Reklama 8 18 godzin temu',\n", " 'Poważny wypadek z udziałem motocyklisty.',\n", " 'Mężczyzna ruszył nie składając wcześniej nóżki 55 19 godzin temu 15 lokali w',\n", " 'Poznaniu na prestiżowej liście w',\n", " 'Przewodniku',\n", " 'Michelin.',\n", " 'Gwiazdka i wyróżnienia! 31 20 godzin temu',\n", " 'Wiadomo kiedy otwiera się',\n", " 'Klub na',\n", " 'Fali 31 20 godzin temu',\n", " 'Śmierć zaginionej 39-latki: w czwartek sekcja zwłok.',\n", " 'Mąż zostanie doprowadzony do prokuratury',\n", " 'Aktualizacja 19 godzin temu',\n", " 'Mąż kobiety został w południe doprowadzony do prokuratury. 230 21 godzin temu',\n", " 'Miliony dla miasta za to, że wycięto prawie 2000 drzew i w zamian nie nasadzono nowych.',\n", " 'Co z pieniędzmi? 64 21 godzin temu',\n", " 'Budynek przy ul.',\n", " 'Towarowej 45 jest już gotowy',\n", " 'Reklama 3 22 godziny temu',\n", " 'Wysadzono bankomat w centrum miejscowości.',\n", " 'Jest nagranie z tablicą rejestracyjną sprawców 61 22 godziny temu',\n", " 'Co z kamerą \"czerwone światło\" w',\n", " 'Poznaniu?',\n", " 'Miała działać już w styczniu 39 23 godziny temu 5 pomysłów na wyjątkowy prezent dla aktywnego taty - nasze propozycje',\n", " 'Reklama 23 godziny temu',\n", " 'Najwyższy budynek w',\n", " 'Poznaniu z nietypowym rozwiązaniem na dwóch piętrach 39 1 23 godziny temu \"',\n", " 'Patologiczne schadzki\" pod balkonami kamienicy w centrum',\n", " 'Poznania.',\n", " 'Przynieśli kanapę i ławki, \"od rana do nocy libacje\" 173 2 23 godziny temu',\n", " 'Poszukujesz rehabilitacji - przyjęcie w 72 godziny',\n", " 'Reklama 4 środa, 19.06.2024 r., godz. 22.30',\n", " 'Policjanci szukają kobiety ze zdjęć.',\n", " 'Rozpoznajesz? 57 3 środa, 19.06.2024 r., godz. 22.22',\n", " 'Miasto komentuje wypowiedź ministra. \"',\n", " 'Jesteśmy zaskoczeni brakiem pieniędzy na budowę nowego dworca\" 178 środa, 19.06.2024 r., godz. 22.19',\n", " 'Tragedia na drodze.',\n", " 'Nie żyje jedna osoba 6',\n", " 'Więcej wiadomości',\n", " 'Wiadomo, co było przyczyną śmierci 39-letniej',\n", " 'Natalii.',\n", " 'Mąż przyznał się do winy',\n", " 'A',\n", " 'K',\n", " 'T',\n", " 'U',\n", " 'A',\n", " 'L',\n", " 'I',\n", " 'Z',\n", " 'A',\n", " 'C',\n", " 'J',\n", " 'A',\n", " 'Duże centrum handlowe powstanie w regionie.',\n", " 'Kilkadziesiąt sklepów i parking na 1200 aut',\n", " 'Z prywatnej posesji pod',\n", " 'Poznaniem skradziono dwa klasyki warte nawet 200 tysięcy złotych',\n", " 'Kalendarium',\n", " 'W najbliższym czasie:',\n", " 'Zobacz więcej wydarzeń',\n", " 'Spektakl',\n", " 'W',\n", " 'A',\n", " 'K',\n", " 'A',\n", " 'C',\n", " 'J',\n", " 'E',\n", " 'N',\n", " 'A',\n", " 'D',\n", " 'W',\n", " 'O',\n", " 'R',\n", " 'Z',\n", " 'E',\n", " 'F',\n", " 'I',\n", " 'N',\n", " 'A',\n", " 'Ł -',\n", " 'Spektakl +',\n", " 'Potańcówka',\n", " 'Dziedziniec',\n", " 'Zamkowy za 46 dni',\n", " 'Kup bilet',\n", " 'Koncert',\n", " 'André',\n", " 'Rieu.',\n", " 'Potęga miłości',\n", " 'Kino',\n", " 'Rialto za 64 dni',\n", " 'Kup bilet',\n", " 'Spektakl',\n", " 'Ś',\n", " 'W',\n", " 'I',\n", " 'A',\n", " 'T',\n", " 'N',\n", " 'I',\n", " 'E',\n", " 'J',\n", " 'E',\n", " 'S',\n", " 'T',\n", " 'T',\n", " 'A',\n", " 'K',\n", " 'I',\n", " 'Z',\n", " 'Ł',\n", " 'Y',\n", " 'Teatr',\n", " 'Nowy im.',\n", " 'Izabelli',\n", " 'Cywińskiej w',\n", " 'Poznaniu -',\n", " 'Trzecia',\n", " 'Scena za 79 dni',\n", " 'Kup bilet',\n", " 'Elektronika',\n", " 'I',\n", " 'A',\n", " 'M',\n", " 'X |',\n", " 'P',\n", " 'O',\n", " 'Z',\n", " 'N',\n", " 'A',\n", " 'Ń',\n", " 'Tama za 81 dni',\n", " 'Kup bilet',\n", " 'Spektakl',\n", " 'Z',\n", " 'A',\n", " 'M',\n", " 'K',\n", " 'N',\n", " 'I',\n", " 'Ę',\n", " 'T',\n", " 'E',\n", " 'P',\n", " 'O',\n", " 'K',\n", " 'O',\n", " 'J',\n", " 'E',\n", " 'Teatr',\n", " 'Nowy im.',\n", " 'Izabelli',\n", " 'Cywińskiej w',\n", " 'Poznaniu -',\n", " 'Trzecia',\n", " 'Scena za 86 dni',\n", " 'Kup bilet',\n", " 'None',\n", " 'Pop',\n", " 'Opera - od opery do musicalu |',\n", " 'Poznań',\n", " 'Aula',\n", " 'U',\n", " 'A',\n", " 'M za 110 dni',\n", " 'Kup bilet',\n", " 'Spektakl',\n", " 'D',\n", " 'E',\n", " 'A',\n", " 'R',\n", " 'E',\n", " 'V',\n", " 'A',\n", " 'N',\n", " 'H',\n", " 'A',\n", " 'N',\n", " 'S',\n", " 'E',\n", " 'N',\n", " 'Teatr',\n", " 'Muzyczny w',\n", " 'Poznaniu za 152 dni',\n", " 'Kup bilet',\n", " 'Spektakl',\n", " 'R',\n", " 'E',\n", " 'C',\n", " 'E',\n", " 'P',\n", " 'T',\n", " 'A',\n", " 'N',\n", " 'A',\n", " 'S',\n", " 'Z',\n", " 'C',\n", " 'Z',\n", " 'Ę',\n", " 'Ś',\n", " 'C',\n", " 'I',\n", " 'E -',\n", " 'G',\n", " 'O',\n", " 'Ś',\n", " 'C',\n", " 'I',\n", " 'N',\n", " 'N',\n", " 'I',\n", " 'E',\n", " 'Teatr',\n", " 'Muzyczny w',\n", " 'Poznaniu za 179 dni',\n", " 'Kup bilet',\n", " 'W kinie',\n", " 'Pełny repertuar',\n", " 'Czytelnicy poszukują',\n", " 'Zgłoś zaginięcie 18.06.2024',\n", " 'Zgubiono portfelik \"',\n", " 'W poniedziałek (17.06) na parkingu w starym korycie',\n", " 'Warty znaleziono portfelik.',\n", " 'Właściciela zguby proszę o kontakt\"',\n", " 'K',\n", " 'O',\n", " 'N',\n", " 'T',\n", " 'A',\n", " 'K',\n", " 'T 601775589',\n", " 'Dziś w',\n", " 'Poznaniu 27℃ 14℃',\n", " 'Poziom opadów: 15.5 mm',\n", " 'Wiatr do: 19 km',\n", " 'Stan powietrza',\n", " 'P',\n", " 'M2.5 13.80 μg/m3',\n", " 'Dobry',\n", " 'Zobacz pogodę na jutro',\n", " 'Poznań',\n", " 'Poznań',\n", " 'Poznań',\n", " 'Poznań',\n", " 'Waszym zdaniem',\n", " 'Najwyższy budynek w',\n", " 'Poznaniu z nietypowym rozwiązaniem na dwóch piętrach ~',\n", " 'Autor 20 godzin temu pis to w ogóle nie jest autorytet.',\n", " 'Okradli',\n", " 'Polaków i',\n", " 'Polskę, a teraz udają że robili wszystko żeby pomóc obywatelom.',\n", " 'Najgorszy rząd od czasów obalenia ... więcej >> komuny.',\n", " 'Ręce opadają. 132 2',\n", " 'Z prywatnej posesji pod',\n", " 'Poznaniem skradziono dwa klasyki warte nawet 200 tysięcy złotych',\n", " 'Czuqakadra 16 godzin temu',\n", " 'Ale was pisowcy bez mydła z tymi imigrantami.',\n", " 'Naściągali \"ekipy filmowe\" które zakończyły zdjęcia na zachodzie i ich nam zwracają :',\n", " 'D 207 83',\n", " 'Najwyższy budynek w',\n", " 'Poznaniu z nietypowym rozwiązaniem na dwóch piętrach ~',\n", " 'Autor 22 godziny temu',\n", " 'Stanowisko',\n", " 'M',\n", " 'S',\n", " 'Z za czasów',\n", " 'Prawa i',\n", " 'Sprawiedliwości było jasne w końcu cytując rzecznika',\n", " 'Łukasza',\n", " 'Jasinę: \"',\n", " 'Jesteśmy tutaj sługami narodu ukraińskiego i je ... więcej >> go próśb\".',\n", " 'Ponadto przypomnieć warto słowa',\n", " 'Andrzeja',\n", " 'Dudy: \"',\n", " 'Tu jest',\n", " 'Polin\". 97 8',\n", " 'Trwa walka o życie 11-latka.',\n", " 'Chłopiec przewrócił się na hulajnodze elektrycznej, nie miał kasku ~',\n", " 'Autor 17 godzin temu',\n", " 'Takich dramatów bedzie więcej dzicz dosłownie zapie**ala na tym złomie i proszę efekt już jest 70 2',\n", " 'Z prywatnej posesji pod',\n", " 'Poznaniem skradziono dwa klasyki warte nawet 200 tysięcy złotych',\n", " 'Czuqakadra 15 godzin temu',\n", " 'Ci z zachodu jak pi',\n", " 'S',\n", " 'Smani swoją \"migrację\" tłumaczą, że jest legalna bo do pracy 71 4',\n", " 'Miliony dla miasta za to, że wycięto prawie 2000 drzew i w zamian nie nasadzono nowych.',\n", " 'Co stało się z pieniędzmi? ~gama 21 godzin temu bardziej na wypłaty dla prezesa i zarządu zieleni miejskiej... 67 2',\n", " 'Trwa walka o życie 11-latka.',\n", " 'Chłopiec przewrócił się na hulajnodze elektrycznej, nie miał kasku ~',\n", " 'Autor 17 godzin temu',\n", " 'Kask?',\n", " 'Raczej pytanie, kto dał dziecku hulajnogę elektryczną. 67 3',\n", " 'Pojedynek mistrzów',\n", " 'Wyślij zdjęcie vs',\n", " 'Głosuj 79%',\n", " 'Głosuj 21%',\n", " 'Termy',\n", " 'Dziś zagłosowało 107 osób!',\n", " 'Spotted środa, 19.06.2024 r., godz. 18.18',\n", " 'K:',\n", " 'Urocza blondynko o pięknych brązowych oczach....',\n", " 'Widywaliśmy się niemal codziennie w autobusie linii 322 po godz 7..',\n", " 'Uśmiechaliśmy się do siebie kiedy wsiadałem i kiedy',\n", " 'Ty wysiadałaś na',\n", " 'Serbskiej albo na',\n", " 'Alejach....',\n", " 'Ostatnio kiedy się spotkaliśmy miałaś różowe słuchawki...',\n", " 'Nie jechałaś już ze mną od miesiąca , nie zdążyłem choćby poznać',\n", " 'Twojego imienia...........',\n", " 'Kontakt środa, 19.06.2024 r., godz. 10.44',\n", " 'Marcin:',\n", " 'Pozdrawiam sympatyczną kobietę, której wymieniłem żarówkę w jej aucie przed',\n", " 'M1.',\n", " 'Chciałbym',\n", " 'Cię zaprosić na kawę.',\n", " 'Kontakt wtorek, 18.06.2024 r., godz. 19.23',\n", " 'Darek:',\n", " 'Pozdrawiam przemiłą panią z rejestracji(',\n", " 'Termedica)za pomoc!',\n", " 'Różni nas tylko cztery miesiące!',\n", " 'Może kawa?:)',\n", " 'Kontakt wtorek, 18.06.2024 r., godz. 19.21',\n", " 'Max:',\n", " 'Serdecznie pozdrawiam sliczna brunetka,kierowcę',\n", " 'M',\n", " 'P',\n", " 'K ,która dziś na dworcu',\n", " 'Rataje ślicznie się uśmiechnęła',\n", " 'Kontakt wtorek, 18.06.2024 r., godz. 17.30',\n", " 'Maciej:',\n", " 'Widzieliśmy się 16 czerwca na koncercie ... w okolicy wejścia',\n", " 'R3 ( trybuna 1 ) , około 21 mijaliśmy się przy barze , byłaś z koleżanką ( blondynka ).',\n", " 'Zapamiętałem',\n", " 'Twój uśmiech , ubrana byłaś w białą bluzkę z napisem , jeśli to czytasz ... odezwij się , może na następny koncert pójdziemy razem :)',\n", " 'Kontakt wtorek, 18.06.2024 r., godz. 00.54',\n", " 'Maja:',\n", " 'Hej, szukam wysokiego bruneta.',\n", " 'Stałeś dzisiaj na przystanku pętli 611 na',\n", " 'Dębcu i machałeś do mnie.',\n", " 'Kiedy się do',\n", " 'Ciebie zbliżyłam podjechał',\n", " 'Twój autobus, powiedziałeś tylko: \"',\n", " 'Nie pamiętasz mnie?',\n", " 'Odezwij się do mnie. \"',\n", " 'Nie mam pojęcia kim jesteś, jeśli to przeczytasz to',\n", " 'Ty się odezwij.',\n", " 'Powiedz do jakiego autobusu wchodziłeś i z kim byłam dla pewności',\n", " 'Kontakt poniedziałek, 17.06.2024 r., godz. 12.35',\n", " 'Tylko ja:',\n", " 'Pozdrawiam sympatyczną dziewczynę z porannego autobusu 193 )) ładne pazurki ))',\n", " 'Kontakt niedziela, 16.06.2024 r., godz. 22.59',\n", " 'Grzegorz:',\n", " 'Kasia.',\n", " 'Szukam dziewczyny o imieniu',\n", " 'Kasia którą poznałem na koncercie',\n", " 'Dawida',\n", " 'Podsiadło 15 czerwca.',\n", " 'Siedzieliśmy obok siebie w sektorze',\n", " 'A1 na rogu stadionu.',\n", " 'Jestem pod wrażeniem',\n", " 'Twoich oczu i chciałbym zaprosić',\n", " 'Cię na kawę.',\n", " 'Kontakt niedziela, 16.06.2024 r., godz. 20.33',\n", " 'Ania:',\n", " 'Bardzo dziękuję parze przemiłych ludzi którzy pomogli mi z opona koło',\n", " 'Lidla .',\n", " 'Kontakt sobota, 15.06.2024 r., godz. 12.58',\n", " 'Marcin:',\n", " 'Piątek, około godziny 19.00,',\n", " 'Rosmann',\n", " 'Druskiennicka.',\n", " 'Mówiłaś synowi żeby z nikim nie rozmawiał jak wejdziesz do',\n", " 'Rossmana:) nawiazalismy kontakt jednak się spieszyłem.',\n", " 'Odezwij się.',\n", " 'Kontakt piątek, 14.06.2024 r., godz. 22.36',\n", " 'Beza:',\n", " 'Widziałam',\n", " 'Ciebie parę razy w',\n", " 'Bezie.',\n", " 'Ty ubrany cały na czarno, ja z koleżanką na kawie.',\n", " 'Może zjemy razem tort bezowy?',\n", " 'Kontakt piątek, 14.06.2024 r., godz. 14.47',\n", " 'Brunetka.:',\n", " 'Wsiadałaś dziś też na',\n", " 'Al.',\n", " 'Marcinkowskiego tramwaj',\n", " 'Nr9.',\n", " 'Biało czerwona koszulka czerwone buty i te',\n", " 'Twoje tatuaże kolorowe na prawej ręce.',\n", " 'Twoje spojrzenie aż mnie przeszywa.',\n", " 'Odezwij się do mnie na @.',\n", " 'Może pogadamy o tatuażach też mam ale nie widać albo może spacer.',\n", " 'Brunetka.',\n", " 'Kontakt piątek, 14.06.2024 r., godz. 09.21',\n", " 'Maleństwo:',\n", " 'Gdy w środę zobaczyłam',\n", " 'Cię pierwszy, moje serducho zaczęło szybciej bić - jakby strzała amora trafiła ...',\n", " 'Patrzyłam jak wychodziłeś, czekając czy się odwrócisz i odwróciłeś się, a nasz wzrok ponownie nie mógł się od siebie oderwać.',\n", " 'Wiem, że pracujesz w',\n", " 'Lednogorze.',\n", " 'Mam nadzieję, że się spotkamy, chociażby na korytarzu, bo bywasz u mnie w pracy.',\n", " 'Kontakt czwartek, 13.06.2024 r., godz. 15.15',\n", " 'M:',\n", " 'Jechałaś dzisiaj tramwajem na królowej',\n", " 'Jadwigi i pięknie uśmiechała się przez okno.',\n", " 'Nasz wzrok spotkał się kilka razy.',\n", " 'Może kawa?',\n", " 'Ten z',\n", " 'B',\n", " 'M',\n", " 'W.',\n", " 'Kontakt czwartek, 13.06.2024 r., godz. 06.40',\n", " 'Brunetka:',\n", " 'Jeździsz prawie codziennie tramwajem',\n", " 'Nr9 wsiadasz na',\n", " 'Al.',\n", " 'Marcinkowskiego.',\n", " 'Masz bardzo fajną fryzurę i tatuaże na prawej ręce.',\n", " 'Pare razy nasze spojrzenia się spotkały masz coś wyjątkowego w oczach.',\n", " 'Może masz ochotę na spacer?',\n", " 'Kontakt',\n", " 'Dodaj',\n", " 'Wyznaję',\n", " 'Wyślij',\n", " 'J',\n", " 'Dziękuję za te piękne lata mojemu mężowi :)',\n", " 'Życzę nam kolejnych takich :)',\n", " 'Malinka',\n", " 'Wciąż cię kocham i tęsknię',\n", " 'Z ...chcę się z tobą zestarzeć.',\n", " 'Uwielbiam ... karel',\n", " 'Madlaine, kiedy rowerki?',\n", " 'Myszka',\n", " 'Nie żałuję żadnej z naszych chwil.',\n", " 'Warto było kochać każdą z nich...',\n", " 'Iwo',\n", " 'Pozdrowienia dla ślicznych pielęgniarek z oddziału wewnętrznego .',\n", " 'Do dlaczego',\n", " 'Niestety',\n", " 'Ci po zdalnym nie zrozumieją.',\n", " 'Polska mowa być trudna mowa.',\n", " 'Aluśka',\n", " 'Kocham',\n", " 'Cię',\n", " 'Robciu..miłego dnia klientka',\n", " 'Nie wiem',\n", " 'Panowie czy to czytacie, ale takich fachowców to ja dawno nie miałam.',\n", " 'Klientka z',\n", " 'Rosnowa pozdrawia',\n", " 'Martha',\n", " 'Jak cudownie odciąć się od toksycznych narcyzów!',\n", " 'Żegnajcie stresy, niedomówienia, niepewności, żegnaj chaosie!',\n", " 'Koniec życiowego rollercoastera, witaj spokoju.',\n", " 'Życie znowu jest cudowne!',\n", " 'Do dlaczego',\n", " 'Ale masz problemy w tym świecie.',\n", " 'Mi nie przeszkadza',\n", " 'Cię czy',\n", " 'Ciebie, ważne, że kocham',\n", " 'Jego:)',\n", " 'Newsletter',\n", " 'Oszczędź sobie czasu na poszukiwania!',\n", " 'Wybierz jakie informacje',\n", " 'Cię interesują, by być na bieżąco każdego dnia!',\n", " 'Poranna gazeta',\n", " 'Codziennie rano',\n", " 'Informator kulturalny',\n", " 'W każdy czwartek',\n", " 'Dodaj',\n", " 'Potwierdzenie subskrypcji zostało wysłane na',\n", " 'Twój adres e-mail.',\n", " 'Potwierdź i jako pierwszy dowiaduj się, co słychać w',\n", " 'Poznaniu!',\n", " 'Zdjęcie dnia',\n", " 'Wyślij zdjęcie',\n", " \"Efekt 'halo' widziany z poznańskiej\",\n", " 'Śródki',\n", " 'Autor:',\n", " 'Adam',\n", " 'Słociński',\n", " 'Nekrologi',\n", " 'Dodaj nekrolog',\n", " 'Regina',\n", " 'Dajksler lat 72',\n", " 'Mirosława',\n", " 'Maria',\n", " 'Kaczmarek lat 82',\n", " 'Ignacy',\n", " 'Augustyn',\n", " 'Nowak lat 71',\n", " 'Wojciech',\n", " 'Franciszek',\n", " 'Schmidt lat 84',\n", " 'Alodia',\n", " 'Donata',\n", " 'Witaszek-',\n", " 'Napierała lat 86',\n", " 'Katarzyna',\n", " 'Plenzler lat 55',\n", " 'Ewa',\n", " 'Urszula',\n", " 'Czajka-',\n", " 'Bolek lat 78',\n", " 'Piotr',\n", " 'Kurmiel lat 62',\n", " 'Mariusz',\n", " 'Stanisław',\n", " 'Kaźmierczak lat 62',\n", " 'Wanda',\n", " 'Anna',\n", " 'Pałgan lat 77',\n", " 'Andrzej',\n", " 'Kaczmarek lat 41',\n", " 'Urszula',\n", " 'Franciszka',\n", " 'Kubasińska lat 79',\n", " 'Mateusz',\n", " 'Strzelczyk lat 31',\n", " 'Kondolencje',\n", " 'Formularz kontaktowy',\n", " 'Zdjęcie/',\n", " 'Video',\n", " 'Załącz plik',\n", " 'Wysyłając niniejszy formularz niniejszym oświadczam, że jestem autorem przesyłanego zdjęcia/video/tekstu i zgadzam się na nieodpłatne wykorzystanie tego materiału na łamach epoznan.pl, wtkplay.pl i',\n", " 'Telewizji',\n", " 'W',\n", " 'T',\n", " 'K.',\n", " \"Aby wysłać formularz, konieczne jest zaznaczenie opcji '\",\n", " \"Nie jestem robotem'.\",\n", " 'Anuluj',\n", " 'Wyślij',\n", " 'Jeśli zapomniałeś hasła podaj adres e-mail na który zarejestrowałeś swoje konto aby wygenerować nowe hasło.',\n", " 'Anuluj',\n", " 'Wyślij',\n", " 'Zgłoszenie “',\n", " 'Spotted” wysłane.',\n", " 'Po akceptacji redakcji, pojawi się na stronie.',\n", " 'Zgłoszenie “',\n", " 'Wyznaję” wysłane.',\n", " 'Po akceptacji redakcji, pojawi się na stronie.',\n", " 'K',\n", " 'O',\n", " 'N',\n", " 'T',\n", " 'A',\n", " 'K',\n", " 'T:',\n", " 'Zgłoszenie “',\n", " 'Spotted” wysłane.',\n", " 'Po akceptacji redakcji, pojawi się na stronie.',\n", " 'Uzasadnij zgłoszenie komentarza do usunięcia',\n", " 'Anuluj',\n", " 'Wyślij',\n", " 'Odpowiedz na komentarz',\n", " 'Anuluj',\n", " 'Wyślij',\n", " 'Komentarz został dodany.',\n", " 'Co powinniśmy w tym newsie poprawić?',\n", " 'Anuluj',\n", " 'Wyślij',\n", " 'Login',\n", " 'Hasło',\n", " 'Zapomniałeś hasła?',\n", " 'Zaloguj',\n", " 'Nie masz konta?',\n", " 'Zarejestruj się',\n", " 'Materiał zawiera treści przeznaczone tylko dla osób dorosłych.',\n", " 'Jeśli nie ukończyłeś 18 roku życia i tym samym w świetle polskiego prawa nie jesteś osobą pełnoletnią, nie wolno',\n", " 'Ci wchodzić dalej.',\n", " 'Wchodząc dalej oświadczasz, iż jesteś osobą pełnoletnią.',\n", " 'Tak',\n", " 'Nie',\n", " 'Nr 1',\n", " 'W',\n", " 'Poznaniu 2,4 mln',\n", " 'Czytelników',\n", " 'Siła miliona',\n", " 'Czytelników',\n", " 'Oferta reklamowa',\n", " 'Nasz patronat',\n", " 'Polityka prywatności',\n", " 'Regulamin serwisu',\n", " 'R',\n", " 'S',\n", " 'S',\n", " 'Kontakt',\n", " 'Kontakt 24/7: [email protected]',\n", " 'M',\n", " 'M',\n", " 'S/',\n", " 'S',\n", " 'M',\n", " 'S: 537 133 133',\n", " 'Formularz kontaktowy',\n", " 'Redaktor naczelny:',\n", " 'Witold',\n", " 'Kundzewicz',\n", " 'Redaktor prowadząca:',\n", " 'Katarzyna',\n", " 'Żurowska',\n", " 'Redakcja:',\n", " 'Joanna',\n", " 'Wachowska,',\n", " 'Paulina',\n", " 'Zych',\n", " 'I',\n", " 'T:',\n", " 'Tomasz',\n", " 'Płuciennik']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import requests\n", "from bs4 import BeautifulSoup\n", "\n", "\n", "def segment_text(text): \n", "\n", " pattern = r'(\\p{Lu}\\p{Ll}*|\\b\\p{Lu}(?=\\p{Ll}))'\n", " regex = re.compile(pattern, re.UNICODE)\n", "\n", " matches = list(regex.finditer(text))\n", "\n", " segments = []\n", " start = 0\n", " for match in matches:\n", " end = match.start()\n", " if start < end:\n", " segments.append(text[start:end].strip())\n", " start = end\n", "\n", " segments.append(text[start:].strip())\n", "\n", " segments = [segment for segment in segments if segment]\n", "\n", " return segments\n", "\n", "def sentence_split_enhanced(url):\n", " soup = BeautifulSoup(requests.get(url).content, 'html.parser')\n", " text = re.sub(r\"\\s+\", \" \", soup.get_text())\n", " segments = segment_text(text)\n", " return segments\n", "\n", "sentence_split_enhanced(\"https://epoznan.pl\")\n", "\n", "# problem z wyrazami, które sa pisane duza litera \n", "# problem z nazwami ulic" ] }, { "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": "149d1a7e", "metadata": {}, "source": [] }, { "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", "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.11.9" }, "subtitle": "11. Urównoleglanie", "title": "Komputerowe wspomaganie tłumaczenia", "year": "2021" }, "nbformat": 4, "nbformat_minor": 5 }