pwn2dict 2.5

Od ostatniej aktualizacji skryptu wiele wody w Wiśle upłynęło. Przez ten czas (ponad dwa lata!) uzbierało się parę stosunkowo drobnych, ale cennych zmian. Były one wprawdzie dostępne dla wszystkich w repozytorium na Gitoriousie, ale uznałem, że najwyższy czas wydać je oficjalnie, podbijając jednocześnie wersję skryptu.

Oto zmiany, które znajdziecie w pwn2dict 2.5:
- Poprawiona kompatybilność z Pythonem 3.2+
- Wsparcie dla słownika Portal PWN v1.2 2003
- Przyśpieszenie działania skryptu nawet o 30%

Linki:
pwn2dict, Instrukcja obsługi

28 komentarzy

  1. A ja mam taki błąd:
    $ python pwn2dict.py -d slo.win slo-nc.dict
    Detected Oxford PWN 2003/2004 format…
    Reading alphabetical index…
    Reading words…
    Writing converted data…
    Traceback (most recent call last):
    File “pwn2dict.py”, line 731, in
    src_dict.write_dictd(dest_name)
    File “pwn2dict.py”, line 569, in write_dictd
    with nested(codecs.open(fname, “w”, “UTF-8”),
    NameError: global name ‘nested’ is not defined

    Python 2.7.8 pod Cygwin. Słownik 3 tomy z GW

      • Na nowej wersji skryptu i z ustawieniami jak przedtem tworzy teraz plik dict bez problemu, ale nie tworzy ifo, sam idx ma natomiast rozszerzenie index. Zapewne można spokojnie zmienić jego rozszerzenie na idx?
        Ciekawe jest to, że ten poprzedni błąd z nested nie objawiał się na słowniku Oxford 2007

        • dictd to całkiem inny format, niekompatybilny ze StarDictem. Jeśli słownik ma być konwertowany do StarDicta, NIE należy podawać parametru -d. Program robi dokładnie to, o co został poproszony :)

  2. a jednak musiałem użyć innego programu na androidzie, bo w colordict, z jakiegoś powodu, nie odnajdywał niektórych słów zaczynających się na polskie znaki, np. “ściernisko” lub “łabędź”. zainstalowałem bardzo podobny, też darmowy program “goldendict” i wszystko póki co śmiga. tak czy inaczej programów stardict na android jest multum, więc jest z czego wybierać

  3. wygenerowane pliki słowników działają wyśmienicie na android 5.0 lollipop w programie colordict. miałem problemy z ich przerobieniem w pythonie na windows (pewnie dlatego, że jestem w tym temacie zielony), ale uruchomiłem ubuntu z płyty bez zmian w systemie, i tam, po odnalezieniu ścieżki w terminalu, poszło o wiele łatwiej komendą: “python pwn2dict.py angpol.win” oraz analogicznie “python pwn2dict.py polang.win”

    chciałbym serdecznie podziękować autorowi za skrypt, podczas gdy wszyscy czekamy na oficjalny release słowników na systemy inne niż windows heh. (ciekawe czy się doczekamy)

  4. Przykro mi, że muszę rozczarować, ale nie mam w planach rozgryzania innych słowników. W przypadku słownika PWN okoliczności były sprzyjające (format starszej wersji słownika był rozpracowany przez inną osobę) i była potrzeba, więc powstał konwerter, który potem rozbudowałem o obsługę różnych mutacji formatu, w wyniku czego nieco się rozrósł. Była to raczej jednorazowa sprawa. Obecnie zresztą mam mniej czasu niż wtedy.

  5. Jeśli chodzi o tytuł słownika, można go ręcznie zmienić w towarzyszącym pliku .ifo, który należy otworzyć dowolnym edytorem tekstu i zmienić to, co występuje po bookname=. Domyślnie tytuł to po prostu nazwa pliku źródłowego bez rozszerzani. Python nie magazynuje plików po konwersji, skrypt zapisuje te trzy pliki domyślnie w tym samym katalogu, co źródłowy słownik.

  6. Dla wygody skrypt usuwa te cyfry z końca. Pod StarDictem powoduje to wyświetlanie wszystkich definicji pod jednym hasłem. Nie czytniki jak widać wyświetlają wtedy tylko pierwszą.

    Wyłączenie tego zachowania będzie wymagało drobnej zmiany w skrypcie:
    Po otworzeniu go w edytorze IDLE, który instaluje się z Pythonem (prawy przycisk myszki i Edit with IDLE) należy odszukać linię:
    word = re.sub(" d+$", "" , word) # remove word-final numbers
    i zamienić ją na:
    #word = re.sub(" d+$", "" , word) # remove word-final numbers

    Krótko mówiąc, dopisujemy # na początki linii. Ewentualnie można też rzeczoną linię po prostu usunąć.

  7. Rafał writes:

    No więc tak. Wykorzystałem Pythona 2.7.5. Oryginalny plik .win ma ok. 59 mega. Konwersja faktycznie bajecznie prosta. Wykonuje się skrypt i nie pokazuje błędów. Powstają trzy pliki z czego ten największy (rozszerzenie dict) ma po konwersji 15,5 mega. A teraz schody mój czytnik Onyx boox i62espresso, widział słownik ale go nie czytał. Wzorując się na plikach innych słowników zmieniłem w tym pliku rozszerzenie tak, że plik nazywa się teraz angpol.dict.dz i słownik działa.
    Pozostał jeden istotny problem tj. nie ma wszystkich definicji jeżeli wyraz ma kilka indeksów np. słówko "go" w wersji płytowej ma kilka indeksów tj. "go" z małą jedyneczką, "go: z dwójeczką. skonwertowany słownik ma wyłącznie jedną z definicji w tym przypadku "go" to gra logiczna o nazwie GO. To samo z innymi słówkami "do" ma w oryginale kilka indeksików a skonwertowany słownik pomija szereg definicji "robić" i daje tą z indeksikiem 2 jako doh.
    Zaznaczam, nie chodzi o ilość definicji w ramach konkretnego wyrazu o "ilość grup definicji" dla danego wyrazu.
    I teraz pytanie: coś nie tak z moim czytnikiem, wersją pythona, skryptem lub ze mną?

  8. Sprawa sprowadza się do pobrania i zainstalowania Pythona (http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi), a potem przeciągnięcia pliku słownika (z rozszerzeniem .win) na ikonę mojego skryptu, żeby wykonać konwersję. Starałem się to maksymalnie ułatwić ze względu na to, że nie każdy musi znać się na wierszu poleceń. Uważam, że powyższe instrukcje można wykonać bez posiadania rozległej wiedzy informatycznej.

    Inna sprawa jest taka, że w zależności od czytnika mogą być potrzebne pewne drobne zmiany w przekonwertowanych plikach. Sugerowałbym otworzyć plik .ifo z przekonwertowanego słownika zwykłym Notatnikiem i zmienić w nim version=3.0.0 na version=2.4.2. Wielu czytnikom tyle wystarcza, żeby "zobaczyć" słownik.

  9. Rafał writes:

    Jasne. Problem w tym, że nazwy takie jak np. Python są dla mnie bardziej odległe niż "teoria strun". Znajomy, który jest w tym wszystkim mistrzem konwertował kiedyś mój słownik jedną z poprzednich wersji skryptu, ale pomimo tego, że otrzymał pliki o właściwych rozszerzeniach, nie zadziałały w czytniku książek. Może jest to kwestia samego słownika (mam Wielki Słownik multimedialny PWN OXFORD wersja 2.0 CD z roku 2006).

  10. Rafał writes:

    Posiadam oryginalny słownik PWN ang-pol i odwortnie. Ostatnio kupiłem czytnik e-booków, który obsługuje format stardict. Poniważ sam nie potrafię robić konwersji posiłkuję się słownikiem już skonwertowanym (nie uważam tego za nadużycie skoro wydałem pieniądze na oryginał a zmieniam tylko formę użytkowania). Proszę o inforamcję, czy po użuciu Pańskich skryptów PWN zawiera transkrypcję fonetyczną – bardzo mi jej brakuje. A może ktoś już gdzieś powiesił takie cudo w necie. Z góry Bardzo dziękuję za odpowiedź.
    Rafał

  11. Obawiam się, że ten słownik jest nieobsługiwany ze względu na istotne różnice w formacie, których nie mogłem rozgryźć. Do czasu aż ktoś rozgryzie i udokumentuje tę wersję formatu nie ma raczej szans, że cokolwiek ruszy się w tej sprawie.

  12. WhizzKid writes:

    Dzień dobry!

    Używam Pańskiego skryptu (pwn2dict.py) do konwersji słowników na wygodniejsze formaty. Niestety jeden ze słowników ("Uniwersalny słownik języka polskiego" – slo.win, md5: 02570fe9572fe1976faebeb8726177ee, sha1: a2ddd78762ca82ada7d264c98c7a2fb9d9d81e56) nie bardzo chce z tym skryptem współpracować. Następującej komendy próbowałem w następujących konfiguracjach (kaƶda miała identyczny output):
    linux, python 2.7
    linux, python 3.2
    cygwin, python 2.7
    windows, python 3.2

    % python pwn2dict.py slo.win
    Detected Oxford PWN 2006/2007 format…
    Reading alphabetical index…
    Reading words…
    Traceback (most recent call last):
    File "pwn2dict.py", line 721, in
    src_dict = PwnDict(args[0], use_colors=options.colors)
    File "pwn2dict.py", line 671, in __init__
    length = word_buffer.index(b"x00")
    ValueError: substring not found

    Po zwiększeniu wczytywanego bufora w linii 665, parsowanie słów dobiegło do końca, natomiast pojawił się kolejny problem:
    % python pwn2dict.py slo.win
    Detected Oxford PWN 2006/2007 format…
    Reading alphabetical index…
    Reading words…
    Writing converted data…
    Traceback (most recent call last):
    File "pwn2dict.py", line 732, in
    src_dict.write_stardict(dest_name)
    File "pwn2dict.py", line 532, in write_stardict
    definition = self.read_definition(addr)
    File "pwn2dict.py", line 602, in read_definition
    temp = zlib.decompress(word_buffer[first_byte + 1:])
    zlib.error: Error -3 while decompressing data: incorrect header check

    Z tym niestety juƶ nie byłem w stanie sobie poradzić. Chciałbym Pana prosić o zerknięcie co tam może być nie tak.

    Pozdrawiam,
    WhizzKid

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *