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
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
Ups, wydawało mi się, że usunąłem wszystkie wystąpienia nested. No cóż, naniosłem już poprawkę. Nową wersję można już pobrać z nowego repozytorium na GitLab.
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 :)
Doh! Dzięki za wyjaśnienie, tak to jest jak sie nie czyta uważnie pomocy :P
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ć
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)
Raczej wątpię, choć jeśli to nadal format .win, jest na to cień szansy. Należałoby raczej zapytać kogoś, kto dysponuje taką encyklopedią i może sprawdzić czy konwersja działa.
Rafał writes:
Trochę Pana pomęczę. Zamierzam kupić sobie Encyklopedię PWN czy skrypt da radę ją zmodyfikować lub inne pytanie jaką najświeższą jest w stanie zmienić do formatu dict.
Z tego, co miałem okazję zobaczyć, dodano trochę haseł i nieco zmieniono formatowanie.
Rafał writes:
Rozumiem. A ten PWN – nie mogę wyjść z podziwu – to prawdziwe cudo. Czy Wiem Pan może czy między Słownikiem Angielskim 2006 a 2007 jest jakaś zasadnicza różnica.
Rafał
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.
znowu Rafał writes:
PWN po Pańskim skrypcie działa super na czytniku. Ale na pokuszenie to mam jeszcze oryginał Longmana może kiedyś jakiś skrypt?
Rafał
Rafał writes:
Jeszcze raz dziękuję i chylę czoła.
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.
Rafał writes:
Jest Pan Wielki – działa. Mam tylko problem z nazwą – gdyż nazwał idiotycznie. Swoją drogą gdzie python magazynuje pliki po konwersji. Dziękuję
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ąć.
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ą?
Rafał writes:
Będę próbował i pytał jeżeli czegoś nie będę potrafił zrobić. Dzięki za to co dotychczas.
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.
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).
Przykro mi, ze względów prawnych gotowego słownika przesłać nie mogę. Coś konkretnego nastręcza trudności podczas konwersji?
Rafał writes:
Szanowny Panie. "Królestwo za …".
Z poważaniem,
Rafał
tak jak napisałem mam oryginalnie zakupiony na płycie. Pozdrawiam szkoer@wp.pl
Tak, przekonwertowany słownik zawiera transkrypcję fonetyczną.
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ł
Anonim writes:
Och, no cóż, to wielka szkoda… W każdym razie dziękuję za skrypt i za odpowiedź. Kłaniam się
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.
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