Słownik Języka Polskiego

UWAGA!

Strona nieaktualna. Nowa wersja słownika i nowe informacje

TUTAJ

 

Czemu tutaj?

Niniejsza podstrona nie do końca wpasowuje się w koncepcję gier paragrafowych (gier książkowych), ale ponieważ sam jestem posiadaczem urządzenia od Amazona, poświęciłem dużo czasu na eleganckie przygotowanie tychże gier na Kindla. W trakcie pracy przygotowałem różnego rodzaju skrypty, które same w taki czy inny sposób automagicznie wspierają prace.

Skąd pomysł?

Zainspirowany artykułem Jak przygotować słownik języka polskiego dla Kindle? ze strony SwiatCzytnikow.pl postanowiłem zaopatrzyć się w słownik PWN i samodzielnie przerobić go na słownik na czytnik. Po jego zakupie zreflektowałem się jednak, że jest on co najmniej przestarzały, zacząłem więc rozglądać się za innym źródłem.

Jako pierwsza, przyszła mi do głowy Wikipedia. Pomysł ten ma swoje wady i zalety, ale powodem, który powstrzymał mnie od wybrania tej ścieżki był prosty – ogromna ilość danych i problem z doborem długości artykułu (stosować wstęp, wstęp i treść, jak formatować itd.). Szczęśliwie trafiłem albo przypomniałem sobie o serwisie sjp.pl.

SJP.pl (Słownik Języka Polskiego) to serwis działający na podobnej zasadzie co Wikipedia – jest tworzony przez internautów i udostępniany na wolnych licencjach.

Bierzmy się do roboty!

Znając już, mniej więcej, ścieżkę produkcji słownika:

1. Utworzyć plik tab, tj. hasło oddzielone od definicji tabulaturą w jednej linijce.
2. Pobrać plik odmian z SJP.pl.
3. Przekonwertować wszystko najpierw za pomocą skryptu tab2opf.
4. Uzupełnić dane w pliku opf.
5. Ponownie przekonwertować za pomocą kindlegen od Amazona.

W efekcie otrzymujemy słownik gotowy do wysłania na Kindla.

O-o…

Koncepcja wydaje się prosta, poza punktem pierwszym. Początkowo uznałem, że tak szczytny cel jak utworzenie wolnego słownika dla użytkowników czytników zainteresuje Twórców SJP.pl, niestety, zawiodłem się w tej kwestii i podjąłem się pobrania całego SJP.pl i przerobienia go na plik tab.

Pliki pobierałem 29.07.15 i mogę nie przytoczyć tutaj dokładnie co i jak robiłem, bo zwyczajnie sobie tego nie zapisałem… Ogólnie wygląda to tak:

1. Na stronie SJP.pl wybieram jakie słowa mnie interesują, a są to słowa, które mają definicję jako taką – nie interesuje mnie możliwość ich stosowania w grach ;)

2. Sprawdzam w ten sposób utworzone linki do kolejnych stron, skąd wnioskuję jak po winny wyglądać skrypty pobierające wszystkie strony ze spisem wyrazów:

wget -nc „http://sjp.pl/slownik/lp.phtml?f_mn=2&page=”{1..2669}

Wget, to sympatyczny program ze środowiska linuks (no, przepraszam ambitnych użytkowników Windowsa…), który sam ściągnie dla nas wszystkie strony od 1 do ostatniej, czyli – gdy pisałem ten artykuł – do 2669. Opcja -nc oznacza, że jeśli wget nie będzie próbował ponownie pobrać plików, które już ściągnięte są.

3. Teraz trzeba wyciągnąć wszystkie linki do słów:

cat * | grep ‚<tr><td><a’ | sed ‚s/<tr><td><a href=”//g’ | sed ‚s/<\/a>.*$//g’ | sed ‚s/”>/\t/g’ > ../linki2.txt

Ponownie: nie jestem stuprocentowo pewny komend jakich użyłem, ale chcę przedstawić koncepcję. Ponadto komendy te i następujące są napisane dość nieudolnie, ale uznaję, że optymalizacja nie jest tutaj potrzebna.

4. Teraz pobrać trzeba wszystkie słowa. W tym celu utworzyłem sobie taki skrypcik:

#!/bin/bash
while read p; do

str=$p
url=${str% *}
slowo=${str#* }

echo $slowo

wget -nc sjp.pl$url -o /dev/null -O „sjp.pl/$slowo.html”

done < linki2.txt

Wcześniej wypadałoby utworzyć katalog sjp.pl w okolicy plików linki2.txt i niniejszego skryptu, a następnie go uruchomić (bash ./skrypt.sh).

W katalogu zacznie powstawać (dużo) plików html. Skrypt wyświetlał będzie na którym słowie aktualnie jest (a zajmie mu to kilka godzin, choć mogłoby mniej). W wypadku przerwania skryptu można go uruchomić ponownie, a wget zajmie się już tym, by nie pobierać czegoś co pobrane już jest.

5. Mamy już dużo plików html, teraz przerobić je trzeba na plik tab. Skrypt, który do tego wykorzystałem wygląda mniej-więcej tak:

for i in sjp.pl/*; do

filename=$(basename „$i”)
extension=”${filename##*.}”
filename=”${filename%.*}”

def=$(cat „$i” | grep ‚<p style=”margin-top: .5em; font-size: medium; max-width: 32em; „>’ | sed ‚s/<br \/>/\\n/g’ | tr ‚\n’ ‚|’ | sed ‚s/|/\\n/g’ | sed ‚s/<p style=”margin-top: .5em; font-size: medium; max-width: 32em; „>//g’ | sed ‚s/<\/p>//g’)
arr=$(cat „$i” | grep ‚&rarr;’ | sed ‚s/<p style=”margin-top: .5em; „><span class=”lc”>//g’ | sed ‚s/<\/span> <a href=[^>]*>/\\t/g’ | sed ‚s/<\/a><\/p>//g’)

echo -ne $filename\\t
echo $def’ \n’$arr

done

Tu nie ma już sprawdzania czy pliki już są przerobione, zaś skrypt należy wykonać komendą:

bash sjp-extr.sh > slo.tab

…co powinno skutkować utworzeniem pliku slo.tab.

 

Już bliżej niż dalej końca!

6. Mając tak przygotowany plik slo.tab (na prośbę jednego z użytkowników udostępniam gotowy plik tab), możemy wrócić do tradycyjnej koncepcji tworzenia słownika:

a. pobieramy plik z odmianami, skrypt w tab2opf, który uruchamiamy (wszystko w jednym katalogu!),
b. przerabiamy plik opf wedle uznania, np. tak (przedstawiona wyłącznie sekcja manifest):

<metadata>
<dc-metadata>
<dc:Identifier id=”uid”>Słownik Języka Polskiego, sjp.pl</dc:Identifier>
<!– Title of the document –>
<dc:Title><h2>sjp.pl</h2></dc:Title>
<dc:Language>PL</dc:Language>
</dc-metadata>
<x-metadata>

<DictionaryInLanguage>pl</DictionaryInLanguage>
<DictionaryOutLanguage>pl</DictionaryOutLanguage>
</x-metadata>
</metadata>

 

Prawda, że było łatwo?

I przerobiony plik opf przerabiamy za pomocą kindlegen.

Otrzymany tak przeze mnie słownik zajmuje lekko ponad 20MB. Pozostawia sobie trochę do życzenia, ale jest bardzo zasobny w słowa, a przede wszystkim darmowy i legalny.

Wszelkie prośby, uwagi proszę zgłaszać na naszym forumfb lub bezpośrednio na adres:mail

 

Poniżej link do pobrania pliku mobi. Proszę o nie umieszczanie słownika w innych serwisach niż ten, a podawanie linku do tej strony – tutaj będzie wersja zawsze najaktualniejsza!

1434388314_719391-mobi

 

Na pożegnanie… reklamy.