KWT-2024/lab/lab_06-07.ipynb

1 line
17 KiB
Plaintext
Raw Permalink Normal View History

2024-04-23 23:54:26 +02:00
{"cells":[{"cell_type":"markdown","id":"described-terrain","metadata":{"id":"described-terrain"},"source":["![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n","<div class=\"alert alert-block alert-info\">\n","<h1> Komputerowe wspomaganie tłumaczenia </h1>\n","<h2> 6,7. <i>Preprocessing i postprocessing</i> [laboratoria]</h2>\n","<h3>Rafał Jaworski (2021)</h3>\n","</div>\n","\n","![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"]},{"cell_type":"markdown","id":"colored-nothing","metadata":{"id":"colored-nothing"},"source":["Na dzisiejszych zajęciach zajmiemy się niezwykle przydatnymi narzędziami wspomagającymi pracę tłumacza. W odróżnieniu od dotychczas poznanych, nie są one oparte na pamięci tłumaczeń, ani na słownikach. Chodzi o techniki preprocessingu i postprocessingu."]},{"cell_type":"markdown","id":"atomic-rubber","metadata":{"id":"atomic-rubber"},"source":["Proces tłumaczenia przeprowadzony w pełni profesjonalnie składa się z wielu faz, które angażują nie tylko tłumaczy, ale także kierowników projektu, analityków, czy korektorów. Każda z tych osób do swojej pracy może wykorzystywać system informatyczny, do którego na początku całego procesu trafiają pliki do tłumaczenia. Oznacza to, że zanim tekst źródłowy trafi do tłumacza, system ma jeszcze szansę coś w nim zmienić. A kiedy tłumacz wykona już swoją pracę, można uruchomić kolejny mechanizm, który zmodyfikuje tłumaczenie przed oddaniem go do zamawiającego. Jak się domyślamy, modyfikacje tekstu przed przekazaniem go do tłumacza nazywamy **preprocessingiem**, natomiast te dokonywane po wykonaniu tłumaczenia (ale przed zwróceniem go do klienta) nazywamy **postprocessingiem**. Terminy te, będące mało zgrabnymi kalkami z języka angielskiego, mają wersje prawdziwie polskie: przetwarzanie wstępne i końcowe. Wersje te są jednak stosowane na tyle rzadko, że mogą jedynie wprowadzić zamieszanie (co w gruncie rzeczy jest dość smutne)."]},{"cell_type":"markdown","id":"mature-republic","metadata":{"id":"mature-republic"},"source":["Typowe operacje w fazie preprocessingu obejmują:\n","* identyfikację tagów xmlowych (które często są później wyświetlane w interfejsie CAT-a jako jeden niepodzielny znak)\n","* identyfikację segmentów, których nie należy tłumaczyć (na przykład składających się z samych liczb)\n","\n","* identyfikację dat i jednostek miary w tekście źródłowym\n","\n","We wszystkich tych operacjach niezwykle przydatne okazują się wyrażenia regularne."]},{"cell_type":"markdown","id":"southern-applicant","metadata":{"id":"southern-applicant"},"source":["### Ćwiczenie 1: Używając wyrażeń regularnych napisz funkcję do znajdowania wszystkich tagów XML w tekście. Funkcja powinna zwracać pozycje, na których znalazła tagi."]},{"cell_type":"code","execution_count":null,"id":"documented-hacker","metadata":{"id":"documented-hacker"},"outputs":[],"source":["import re\n","\n","def find_tags(text):\n"," pattern = r'</?[\\w:.-]+[^>]*>'\n"," matches = re.finditer(pattern, text)\n"," return [(match.group(), match.start(), match.end()) for match in matches]"]},{"cell_type":"code","source":["xml = \"<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>\"\n","print(find_tags(xml))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"xcmB-6EAQFCR","executionInfo":{"status":"ok","timestamp":1713629228726,"user_tz":-120,"elapsed":4,"user":{"displayName":"Marek Susniak","userId":"08092059492340254190"}},"outputId":"5253656a-6ded-4ba3-c4f2-50852a02da52"},"id":"xcmB-6EAQFCR","execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["[('<note>', 0, 6), ('<to>', 6, 10), ('</to>', 14, 19), ('<from>', 19, 25), ('</from>', 29, 36), ('<heading>', 36, 45), ('</heading>', 53, 63), ('<body>', 63, 69), ('</body>', 98, 105), ('</note>', 105, 112)]\n"]}]},{"cell_type":"markdown","id":"determined-utilization","met