niedziela, listopada 23, 2008

Pierwsza wersja wikiTranslate - 0.0

Posiedziałem dzisiaj nieco nad wikiTranslate i stworzyłem jego pierwszą, testową wersję. Nie ma tego dużo - "wc -l *.hs" mówi o 44 linijkach. A tak na prawdę istotnych jest 16 z nich. Reszta to importy oraz moduł pomocniczy - pakiet "download-curl" nie chce się instalować na Windowsach więc napisałem mikro moduł który może go do pewnego stopnia zastąpić.

Wymagane pakiety: utf8-string, xml-light, tagsoup.
Zalecane: download-curl.

Ściągnąć z tej strony.

Krótka instrukcja.

1. Ściągamy i rozpakowujemy (wt.7z zawiera archiwa dla Linuxa i Windowsa)
2. Uruchamiamy program w konsoli podając jako parametry słowa do przetłumaczenia
3. Program wypisuje nam tłumaczenie na ekran

Wszystko działa fajnie tylko... pewne rzeczy są na stałe zaszyte w programie:
- język źródłowy: domyślnie polski ("pl"). Patrz "baseLanguge" w pliku wt.hs
- języki docelowe: ustawione na sztywno są nastepujące języki:
> filterLang = ["en","it","pt","de"]

Aby zmienić te stałe należy wyedytować plik wt.hs i zrekompilować program. Zakładam znajomość ghc - to jest wersja alpha więc nie osoby do których ma trafić ten post powinny potrafić sobie z tym poradzić :-)

TODO w kolejności priorytetów:
- wczytywanie języka źródłowego i języków docelowych z linii poleceń
- lepsze radzenie sobie z UTF8 - rosyjski wychodzi beznadziejnie
- WebUI
- radzenie sobie ze stronami "disambiguation"

Na deser wynik przykładowego zapytania
--- cut ---
[tener@tenserwer wikiTranslate]$ ./wt "Algorytm A*" dąb wikipedia polska wrocław "piłka nożna" "macierz odwracalna" "rachunek lambda"
Translations for term "Algorytm A*" in language "pl"
de A*-Algorithmus
en A* search algorithm
it A*
pt Algoritmo A*
------------------------------
Translations for term "dÂąb" in language "pl"
de Eichen
en Oak
it Quercus
pt Carvalho
------------------------------
Translations for term "wikipedia" in language "pl"
de Wikipedia
en Wikipedia
it Wikipedia
pt WikipĂŠdia
------------------------------
Translations for term "polska" in language "pl"
de Polen
en Poland
it Polonia
pt PolĂÂłnia
------------------------------
Translations for term "wrocÂław" in language "pl"
de Breslau
en WrocĂ
Âaw
it Breslavia
pt WrocĂ
Âaw
------------------------------
Translations for term "piÂłka noÂżna" in language "pl"
de FuĂÂball
en Association football
it Calcio (sport)
pt Futebol
------------------------------
Translations for term "macierz odwracalna" in language "pl"
de Reguläre Matrix
en Invertible matrix
it Matrice invertibile
pt Matriz inversa
------------------------------
Translations for term "rachunek lambda" in language "pl"
de Lambda-KalkĂÂźl
en Lambda calculus
it Lambda calcolo
pt CĂÂĄlculo lambda
------------------------------

--- cut ---

1 komentarz:

  1. Z brakiem możwliwości zdefiniowania języka to trochę przesadziłeś - przecież to zajęłoby mniej niż 5min.
    Z drugiej strony nie przeszkadza to jakoś bardzo

    Ogólnie fajnie to działa, ale jest kilka uwag:

    Jak tłumaczy na niemiecki to brakuje rodzajników

    Jak tłumaczysz "strona główna" to wynikiem jest
    de
    en
    it
    pt

    "Dni czerwcowe" jest nie do końca dobrze tłumaczone ("june days aprising"). Program nie podkreśla, że chodzi o nazwę powstania

    Tłumacząc "Suwerenny Rycerski Zakon Szpitalników św. Jana z Jerozolimy z Rodos i z Malty" dostajemy "Knights Hospitaller". Niby to jest synonim, ale tłumaczenie nie jest do końca trafne.

    Oczywiście to wszystko wynika z samej metody. Dla zakonu na wiki można znaleźć:

    "The Knights Hospitaller (also known as the Sovereign Military Hospitaller Order of St. John of Jerusalem of Rhodes and of Malta(...)"

    Sama metoda ma też problem ze słowami o wielu znaczeniach. W przypadku słowa "korek" dostajemy tłumaczenie "stopper (plug)". Raczej bym się spodziewał "traffic jam". Dla "korek drogowy" dostaję "traffic congestion" co jest synonimem, ale...

    Kilka problemów można rozwiązać dając jakiś kawałek tekstu więcej z wikipedii, a nie sam tytuł. Z innymi nie mam pomysłu, bo program musiałby w jakiś sposób rozumieć język.

    OdpowiedzUsuń