Ponieważ w departamencie Pchełek SQL panuje ostatnio złowroga cisza, postanowiłem spróbować odświeżyć tę sekcję. Tym razem padło na kombinacje dwuliterowe: czy istnieje taka kombinacja dwóch liter, która w całym słowniku języka polskiego pojawia się dokładnie raz?
Wszystkich możliwych kombinacji dwuliterowych, począwszy od "aa" a skończywszy na "żż", jest 1024 (ładna, okrągła liczba!), ponieważ polski alfabet ma 32 litery, a 32*32=1024.
Ciekawe, ile z nich można znaleźć wśród polskich słówek.
Hm.
Słownik na dzień dzisiejszy zawiera 2963309 słów (to prawie 3 miliony!) - niezorientowanym przypominam, że chodzi tu o słownik ze wszystkimi odmianami wszystkich słów dopuszczonych do gry w Literaki, dostępny na stronie www.sjp.pl.
Korzystając z okazji, postanowiłem też przetestować najnowszą odsłonę SQL Servera (czyli SQL Server 2017).
No i się, kurna, zaczęło.
Najpierw pobrałem paczkę instalacyjną SQL Server, ale próba jej uruchomienia zakończyła się smętnym komunikatem o niekompatybilności systemu. Faktycznie, na komputerze domowym mam Windows 7, a nowy SQL Server wymaga co najmniej 8.1.
Ponieważ mam resztki instynktu samozachowawczego, zamiast zainstalować Windows 8.1 (czy nawet 10), zagadałem do jednego z Czytelników blogu, a prywatnie dobrego znajomego, z którym z niejednego pieca kwerendy uruchamialiśmy, co on by w mojej sytuacji zrobił. Sensownych opcji jest bowiem kilka: można zainstalować nowszego Windowsa na osobnej partycji, można pójść w stronę Linuksa (SQL Server 2017 jest kompatybilny z Linuksem, o czym zresztą już tu kiedyś pisałem), można też postawić to na maszynie wirtualnej.
Kolega poradził, żeby to zwirtualizować. Bo "będzie mniej śmiecenia". W sumie racja, pomyślałem sobie. Tylko teraz na czym to postawić? Virtual Box? Xen? A może VMWare?
Okazało się, że VMWare wypuścił niedawno nową odsłonę swojego Playera, który jest darmowy do prywatnego użytku, a także kompatybilny z Windows Server 2012 R2.
Ściągnąłem więc z netu:
1. VMWare Workstation Player v. 14 (https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html)
2. SQL Server 2017 Developer Edition (https://www.microsoft.com/en-ie/sql-server/sql-server-downloads)
3. Windows Server 2012 R2 (https://www.microsoft.com/en-in/evalcenter/evaluate-windows-server-2012-r2)
Wszystko razem dobrze ponad 6GB, ale że rurę mam grubą, pociągnąłem wszystkie trzy i już niecały kwadrans później dzielnie instalowałem nową Winzgrozę, a zaraz potem SQL Server.
Nie obyło się bez potknięć: próba zainstalowania SSMS zakończyła się niepowodzeniem, ponieważ Windows 2012 Server jest tak opancerzony, że domyślnie nie pozwala pobierać żadnych plików z Sieci (a już na pewno nie wykonywalnych). Chwilę mi zajęło przekonanie Internet Explorera, żeby mi łaskawie pozwolił to ściągnąć.
Po postawieniu SSMS oraz zaimportowaniu wszystkich 2963309 słówek do nowej bazy, do tabeli o wdzięcznej nazwie [slowa], na moim jeszcze chrupiącym, wirtualnym serwerze, zabrałem się za pisanie kodu.
Dużo tego nie ma, bo to w końcu Pchełka jest.
Kod wygląda tak:
;with litery as
(
select 1 as i, N'a' as litera
union all select i + 1, substring(N'ąbcćdeęfghijklłmnńoóprsśtuwyzźż', i, 1) from litery where i < 32
)
, kombinacje_2 as (
select l1.litera + l2.litera as kombinacja
from litery l1, litery l2
)
select kombinacja, count(distinct slowo) ile
from kombinacje_2
join slowa on slowa.slowo like '%'+kombinacja+'%'
group by kombinacja
order by 2;
Ile czasu zajęło wykonanie takiego zapytania?
Pomyślmy: 1024 kombinacje liter do sprawdzenia dla każdego z prawie 3 milionów słów. Czyli razem około trzy miliardy sprawdzeń. Maszynka wirtualna raczej skromna: czterordzeniowe Core i7 plus 4GB pamięci operacyjnej oraz tradycyjny "mechaniczny" dysk twardy.
Siedemnaście minut.
Pewnie dałoby się to jakoś podrasować (może nawet zrobię z tego kiedyś osobną Pchełkę...), ale ponieważ jestem leniwy, zadowoliłem się owymi siedemnastoma minutami.
I co?
Otóż okazało się, że spośród wszystkich 1024 możliwych dwuliterowych kombinacji w naszym polskim słowniku można odnaleźć aż 873.
Jedenaście z nich pojawia się tylko raz:
gś, gź, jy, mń, ńą, ńe, ńę, ńi, nś, pń, wć.
Jako zajadły Literakowiec spróbowałem najpierw wykombinować przynajmniej część tych słówek z pamięci.
Udało mi się dla gź (gźle), pń (wapń), mń (ciemń) i wć (kawć). Na pozostałych sromotnie poległem, zapuściłem więc osobne zapytanie do bazy:
select * from slowa
where slowo like N'%gś%'
or slowo like N'%jy%'
or slowo like N'%ńą%'
or slowo like N'%ńe%'
or slowo like N'%ńę%'
or slowo like N'%ńi%'
or slowo like N'%nś%';
Wynik?
- angście
- dunście
- jadźńą
- jadźńe
- jadźńę
- jadźńi
- riojy
Wiedzony ciekawością sięgnąłem raz jeszcze do zasobów Sieci sprawdzić, cóż to za dziwaki są. No i teraz wiem, że:
- "angst" to słowo pochodzące z języka holenderskiego, oznaczające "stan umysłu wynikający z braku sensu lub celu życia"
- "dunst" z kolei to śrut o średnicy między 1 a 1.75 mm
- "jadźńa" to - podobnie jak śakti, ćakra, aćarja czy śilpaśastra - słowo pochodządze z sanskrytu, oznaczające indyjski "kult oparty na rytuałach nakazanych przez Wedy". Czym są Wedy? To... takie jakby Biblie, tylko trochę inne. Liczba jest mnoga prawopodobnie dlatego, że Hindusi są bardziej mnodzy od całej reszty 😉
- wreszcie "rioja" to pochodząca od Riojy nazwa hiszpańskiego wina (wymawia się: rijoha)
W ten oto sposób pisząc jedną malutką Pchełkę SQL dowiedziałem się całkiem sporej ilości kompletnie nieprzydatnych informacji, którymi się teraz dzielę.
Smacznego!
W sjp to nieraz kwiatki są prawdziwe, pchlice nie “pchełki”. Jest np. ęsi. Polecam pierwsze dwa komentarze: https://sjp.pl/%C4%99si
Akurat “ęsi” znałem jeszcze w czasach kiedy Internet nazywał się Arpanet i nie był dostępny nigdzie poza laboratoriami amerykańskich jajogłowych 😉 Trzytomowy słownik języka polskiego PWN-u był moim przyjacielem od najwcześniejszych lat: https://imgur.com/a/blreI
A jeśli chodzi o pchlice to jednak pozostanę przy pchełkach.
I w papierowym, trzytomowym wydaniu SJP PWN było “ęsi”? Rodzice moi mieli (mają) też ten słownik i też do niego zaglądałem, ale nie przyszło mi nigdy do głowy, żeby sprawdzić czy słowa na niekompletne zwierzęta tam są..
Było! Zrobili osobną stronę dla litery “ę”, z wielkim Ę na górze strony i tylko jednym, jedynym hasłem na tę literę 😉