Spelling

From MukeWiki

Spell checkers

Ispell najstarsi spell checker. Uz sa dlhsiu dobu nevyvija, posledna verzia programu ispell-3.4.00, velky pocet dictionaries, ktore boli dlhodobo udrziavane, aktualizovane. Ispell program a prislusne slovniky sa v Fedore uz dlho nenachadza. V podstate jediny zmysel pouzivania Ispell bola podpora ruskeho (Lebedev) slovnika, ktory sa vyvijal prave pre tento spell checker. Subory so samotnymi slovnikmi slovak.aff a slovak.hash sa v Fedora default nachadzali v /usr/local/lib/ (zavisi od nastavenych ciest v ispell programe).

Aspell nahradza Ispell ako program alebo ako kniznica, najprv bol vyvijany ako Pspell. Od verzie 0.6 ma podporu unicode + affix compression. Pouziva "Ispell compatibility script for Aspell", ten sa vztahuje na samotny program, nie vsak na dictionaries, ktore sa znacne lisia od Ispell-ovskych, a ktore sa v Aspell nedaju pouzit. Transformacia Ispell na Aspell (ako aj na Hunspell) dictionaries znacne komplikovana, problem s affix suborom atd. V repozitaroch Fedory sa nachadza program aspell a jazykove slovniky, bohuzial jednotlive dictionaries nepatria prave k najaktualnejsim. V pripade potreby preto instalujeme len samotny program aspell bez konkretnych slovnikov. Dictionaries subory sk.rws a sk_affix.dat sa nachadzaju v /usr/{lib,lib64}/aspell-0.60/.

MySpell kombinuje svojich dvoch predchodcov. Bol vyvinuty pre OpenOffice.org, pouzivala ho aj Mozilla. Od verzie OpenOffice.org 2.0.2 (rok 2006), resp. aj Firefox 3 sa uz nepouziva a bol nahradeny Hunspell-om.

Hunspell najnovsi (dufajme, ze aj posledny) spell checker. Pouziva sa aktualne v LibreOffice, Mozilla, Chromium (upravene slovniky) atd. Je zalozeny na MySpell (kompatibilne dictionaries), pridava podporu Unicode a rozne nove vlastnosti. Hunspell dictionaries si v podstate kazdy projekt vytvara vlastne, pricom jazykove variacie vychadzaju z lokalnych, narodnych projektov. Hunspell spell checker je uz v Fedore default nainstalovany (program hunspell vratane anglickeho slovnika). Aktualnost jednotlivych dictionaries v repozitaroch Fedory nie je prilis idealna, preto potrebne slovniky radsej nainstalovat manualne (z ineho zdroja). Subory so slovnikmi sk_SK.aff a sk_SK.dic sa nachadzaju v directory /usr/share/hunspell (pred verziou Fedora 36 (2022-03) sa subory nachadzali v /usr/share/myspell/).

Dictionaries

Fedora uz davnejsie zjednotila (nastastie) pouzivanie dictionaries pre hunspell, resp. pre vsetky programy, ktore pouzivaju Hunspell ako spell checker. To znamena, ze napr. Emacs, Firefox alebo LibreOffice nainstalovane priamo z Fedora repository, budu pouzivat slovniky z /usr/share/hunspell/ directory. Bohuzial samotne slovniky (distribuovane cez Fedora repository) su vacsinou zastarale, tazke ich bude treba nahradit aktualnymi verziami.

Slovak

Projekt sk-spell pravidelne aktualizovany, podpora vsetkych spell checker-ov (a nie len slovnikov), najme vsak najnovsi Hunspell. FTP server neobsahuje vsetky subory (vratane najnovsej verzie slovnikov), ktore sa v ramci projektu vytvaraju, aktualizuju. Okrem bezneho sk_SK slovnika je k dispozicii aj ASCII verzia sk_SK-ascii (ta je vsak uz dlhsie bez aktualizacii). Od maja 2020 je tento projekt nakoniec aj na GitHub-e.

  • hunspell-sk (GitHub), resp. hunspell-sk_ascii (GitHub) repositories projektu sk-spell.
  • Fedora uz dlhodobo vychadza zo znacene zastaraleho suboru hunspell-sk-20110228.zip, v ktorom sa nachadza verzia: 2.03-1, 2009-12-19.
  • Firefox, resp. Firefox ASCII (bez diakritiky) extensions su udrziavane priamo autorom zo sk-spell projektu, aktualne (2023-03) verzia: 2.4.7 (2022-12-20, ~ 160.000 words).
  • LibreOffice (GitHub) dictionaries obsahuju identicke slovniky ako hunspell-sk (GitHb), resp. je snaha o aktualizaciu.

Summarum pouzivat slovnik priamo z hunspell-sk (GitHub).

Russian

Словарь русского языка для ispell (автор Александр Лебедев) на основе которого сделанные практически все остальные словари. Включена полноценная поддержка буквы ё (другие словари просто заменяют букву ё на букву е). Самый последний (2008-08) словарь rus-ispell-0.99g5.tar.gz использует ~ 139.000 базовых слов или ~ 1.367.000 полное число образуемых из них словоформ (небольшая розница в числе в зависимости от буквы ё/е), KOI8-R кодировка.

  • Fedora словарь основан на версии 0.99g5 (2008-08) Лебедева.
  • Репозиторий Sisyphus проекта ALT Linux Team (русскоговорящая команда разработчиков).
  • Firefox extension by Александр Клюквин использует расширенный исходный словарь Лебедева, содержит порядка 174 тысячи слов, однако последняя версия самого словаря 2013-11 (homepage). Еxtension by Alexander Slovesnik основан на версии 0.99g5 Лебедева, однако, похоже иногда какой то маленький upgrade.
  • LibreOffice (GitHub) dictionaries тоже использует словарь Лебедева (converted from KOI8-R to UTF-8) и содержит порядка 146 тысячи слов. Russian Spellchecker расширение основана на работе группы AOT.ru.

Summarum Fedora и LibreOffice используют идентичные и устаревшие словари 0.99g5 (2008-08) Лебедева, без каких либо обновлений. Используем либо словарь из Firefox extension by Александр Клюквин, но сам словарь похоже уже вообще не обновляется (2013-11). Либо используем Firefox extension by Alexander Slovesnik идентичный как словари Fedora и LibreOffice, но добавляет немного новых слов (146269 против 146433). Похоже единственный словарь, который хоть иногда обновляется (2018-11).

English

Zakladom pre vsetky anglicke slovniky je databaza SCOWL (and friends), ktora sa pravidelne aktualizuje (see on GitHub). Moznost stiahnut, okrem ineho, dictionaries priamo pre Aspell a Hunspell spell checkers. Tieto slovniky mozu obsahovat aj rozne doplnkove, upravene slovniky, resp. mozu byt vytvorene s roznymi opciami. Dalej budeme pouzivat len slovnik en_US (maintains by Kevin Atkinson).

  • SCOWL aktualna verzia 2020.12.07. Slovnik existuje aj v rozsirenej (large) verzii, ktora vsak vsak nemusi vzdy korektne pracovat. Vacsina programov pracuju prevazne s normalnou (non-large) verziou.
  • Fedora pouziva znacne zastaralu verziu 2014.08.11 s roznymi patch-es. Subor en_US.aff zacina riadkom SET ISO8859-1 (ASCII), co moze sposobovat problemy, staci zamenit na SET UTF-8. Vo Fedore 38 (2023-04) po dlhej dobe upgrade na 2020.12.07.
  • Firefox extension zalozene na predoslej SCOWL verzii 2019.10.06, ktory je doplneny o slova s diakritikou, napr. café (custom SCOWL) a nejakymi dalsimi Mozilla specifickymi vyrazmi.
  • LibreOffice dictionaries pouzivaju aktualnu SCOWL verziu 2020.12.07 bez akychkolvek uprav. Slovniky su udrziavane priamo komunitou LibreOffice (GitHub).

Summarum pouzivat original SCOWL slovnik, pripadne este rozsirit o rozne dalsie specialized spell check dictionaries.

Sharing personal dictionary

Pre zdielanie personalneho slovnika medzi roznymi programami budem pozivat textovy subor $HOME/.musinsky.dic, ktory obsahuje slova v roznych jazykoch (slovencina, rustina a anglictina) v UTF8 kodovani.

$ wget -nc https://raw.githubusercontent.com/musinsky/config/master/dictionary/musinsky.dic -O $HOME/.musinsky.dic

Emacs uklada (by default) personalne slovniky (v zavislosti od jazyka) do suborov $HOME/.hunspell_sk_SK, $HOME/.hunspell_ru_RU alebo $HOME/.hunspell_en_US. Konfiguracia Emacs umoznuje nastavit konkretny subor ako personalny slovnik (spolocny pre vsetky jazyky). Nove slova sa jednoducho pridavaju na koniec slovnika, suboru.

(setq ispell-personal-dictionary "~/.musinsky.dic")   ; don't use $HOME

LibreOffice ak sa personalny slovnik, subor s nazvom standard.dic, nachadza v $HOME/.config/libreoffice/[majorVersion]/user/wordbook/ LibreOffice ho automaticky aktivuje. Inak je potrebne konkretny slovnik pridat/aktivovat cez Tools - Options → Language Settings - Writing Aids - User-defined dictionaries (moznost pridavat rozne slovniky: tematicke, synonymicke, jazykove). Personal dictionary subor musi mat koncovku .dic a subor musi zacinat hlavickou

OOoUserDict1
lang: <none>
type: positive
---

lang: <none> specifikuje moznost pouzivat spolocny slovnik pre vsetky jazyky. Nove pridane slova v slovniku sa automaticky usporiadavaju podla abecedy (ekvivalent LC_COLLATE=C sort -u standard.dic). Zdielanie personalneho slovnika, resp. suboru $HOME/.musinsky.dic

$ ln -s $HOME/.musinsky.dic $(find $HOME/.config/libreoffice/*/user/wordbook -type d)/standard.dic

Firefox pouziva personalny slovnik, subor $HOME/.mozilla/firefox/[uniqueID.default-release]/persdict.dat. Nazov suboru nie je mozne menit a slovnik je spolocny pre vsetky jazyky. Pri pridani noveho slova do slovnika sa meni "nejako" usporiadanie slov. Ak by sa tento slovnik (subor) zdielal s LibreOffice, potom by sa preusporiadali aj prve riadky (hlavicka) z tohoto slovnika, a teda pre LibreOffice by bol tento slovnik uz dalej nepouzitelny. Prijatelne riesenie (jedna z moznosti) je cas od casu vytvorit novy personalny slovnik pre Firefox spojenim jeho povodneho slovnika a spolocneho slovnika pre Emacs a LibreOffice

$ { tail -n +5 $HOME/.musinsky.dic; cat $HOME/.mozilla/firefox/*.default-release/persdict.dat; } | LC_COLLATE=C sort -u > persdict_merge.dat   # sorting is not really necessary
$ cp persdict_merge.dat $HOME/.mozilla/firefox/*.default-release/persdict.dat
$ diff $HOME/.musinsky.dic persdict_merge.dat

Google Chrome

Google Chrome, resp. Chromium sice pouziva Hunspell spell checker avsak samotne slovniky (koncovka .bdic) pouzivaju vlastny optimalizovany format. Subor *.bdic (binarny format) s optimalizovanym formatom je vytvoreny z klasickych hunspell slovnikov *.aff, *.dic (a navyse *.dic_delta, kde mozu byt ulozene dalsie, nove slova) pouzitim vlastneho programu convert_dict, ktory je sucastou Chromium browser project.

Google Chrome si po vybere uzivatelom konkretneho jazyka vzdy sam stiahne konkretny, potrebny slovnik. Google Git hunspell_dictionaries repository obsahuje vsetky dictionaries. Napr. pre slovencinu si aktualne (2020-06) stiahne subor sk-SK-3-0.bdic. Google Git powered by Gitiles neumoznuje priamo stiahnut raw subor, takze manualne stiahnut napr. samotny subor sk-SK-3-0.bdic len nejak takto

$ curl 'https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries.git/+/refs/heads/master/sk-SK-3-0.bdic?format=TEXT' | base64 -d > sk-SK-3-0.bdic

Tento subor (so slovnikom pre slovencinu) sa nachadza $HOME/.config/google-chrome/Dictionaries/sk-SK-3-0.bdic. Slovnik pre slovencinu je znacne historicky, verzia z roku 2005 (sk_SK.dic_delta navyse pridava cca 2000 slov). Je teda max. ziaduce zamenit slovnik (a nie len pre slovencinu) v Google Chrome aktualnou verziou. Jedina moznost je pouzit program convert_dict.

Kompilacia programu convert_dict zo zdrojovych kodov Chromium browser project

[musinsky@strela ~]$ pwd
/home/musinsky
[musinsky@strela ~]$ mkdir $HOME/CHROMIUM && cd $HOME/CHROMIUM
[musinsky@strela CHROMIUM]$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
Cloning into 'depot_tools'...

[musinsky@strela CHROMIUM]$ export PATH=$PATH:$HOME/CHROMIUM/depot_tools/   # do not use ~ on PATH
[musinsky@strela CHROMIUM]$ fetch --no-history --nohooks chromium
Running: gclient root
# about 5-10 minutes

[musinsky@strela CHROMIUM]$ cd src/
[musinsky@strela src]$ # ./build/install-build-deps.sh   # skip (not need, building only "convert_dict")
[musinsky@strela src]$ gclient runhooks
# about 2-3 minutes

[musinsky@strela src]$ gn gen out/Default
Done. Made 13395 targets from 2363 files in 3946ms
[musinsky@strela src]$ gn ls out/Default | grep convert_dict
//chrome/tools/convert_dict:convert_dict
//chrome/tools/convert_dict:lib
[musinsky@strela src]$ autoninja -C out/Default chrome/tools/convert_dict:convert_dict   # problem on F32 with default Python v3 (need Python v2)
ninja: Entering directory `out/Default'
[1305/1305] LINK ./convert_dict
# about 2-3 minutes
[musinsky@strela src]$ cd out/Default/
[musinsky@strela Default]$ ./convert_dict
Usage: convert_dict <dicfile base name>

Example:
  convert_dict en-US
will read en-US.dic, en-US.dic_delta, and en-US.aff from the current directory and generate en-US.bdic

[musinsky@strela Default]$

Programom convert_dict konvertujeme aktualne slovenske slovniky z hunspell-sk (GitHub), t.j. subory sk-SK.aff a sk-SK.dic (pripadne aj sk-SK.dic_delta s vlatnymi slovami) na Google Chrome vlastny optimalizovany format sk-SK.bdic. Google Chrome neumoznuje pridat nejaky vlastny alebo novy slovnik, takze musime zamenit povodny slovensky (ale zastaraly) Google Chrome slovnik sk-SK-3-0.bdic na tento aktualny, novo vytvoreny slovnik.

$ cp -ip sk-SK.bdic $HOME/.config/google-chrome/Dictionaries/sk-SK-3-0.bdic
cp: overwrite '/home/musinsky/.config/google-chrome/Dictionaries/sk-SK-3-0.bdic'? y

Analogicky takto mozeme vytvorit a pridat aj slovensky ASCII (bez diakritiky) slovnik. Kedze Google Chrome neumoznuje pridat vlastny slovnik, musime v samotnom prehliadaci pridat nejaky "iny jazyk" napr. cestinu, a potom, ked si prehliadac stiahne prislusny subor zo slovnikom cs-CZ-3-0.bdic, ho prepiseme nasim novo vytvorenym slovenskym ASCII slovnikom.

$ cp -ip sk-SK-ascii.bdic $HOME/.config/google-chrome/Dictionaries/cs-CZ-3-0.bdic
cp: overwrite '/home/musinsky/.config/google-chrome/Dictionaries/cs-CZ-3-0.bdic'? y

POZOR ak by sa casom original Google Chrome slovnik automaticky obnovil (nejaky update v repository), tak sa nas subor s upravenym slovnikom prepise. Pre sk-SK slovnik len mozeme dufat, ze update bude na aktualnu verziu a teda cela tato procedura so zamenou odpadne. V pripade update cs-CZ slovnika (v skutocnosti nas sk-SK-ascii slovnik) musime potom tento subor manualne znova prepisat. Samozrejme idealna by bola moznost pridavat do Google Chrome vlastne slovniky.

Miscellaneous

aspell-ru

Najaktualnejsi build pre ruske (Lebedev) Aspell (Ispell a Hunspell) dictionaries. Zo suboru aspell-ru-lebedev-xxx.rpm extrahujem vsetky subory z /usr/{lib,lib64}/aspell/* a /usr/share/aspell/* do systemoveho /usr/{lib,lib64}/aspell-0.60/. Linkujem pouzivanie sucasne slovnika aj s "yo" resp. "ye"

$ ln -s ru-lebedev.dat ru.dat
aspell dictionaries from Linux to Windows

export from Linux

$ aspell --lang=ru dump master ru-lebedev-io > ru-lebedev-io_utf8.txt
$ iconv -f UTF8 -t KOI8-R ru-lebedev-io_utf8.txt > ru-lebedev-io_koi8-r.txt

import to Windows: install original (old) russian dictionary and copy (rewrite) ru_phonet.dat file from Linux to Windows

C:\> aspell --lang=ru create master ru_new.rws < ru-lebedev-io_koi8-r.txt

ispell-ru

Na vytvorenie ruskeho (Lebedev) slovnika je potrebna len utilita buildhash, ktora je sucastou ispell balika. Pre jej kompilaciu je potrebny yacc parser generator (dnf install byacc)

$ wget wget https://www.cs.hmc.edu/~geoff/tars/ispell-3.4.00.tar.gz
$ tar -xzvf ispell-3.4.00.tar.gz
$ cd ispell-3.4.00/
$ make buildhash

Vytvorime aktualny rusky (Lebedev) slovnik (zo source files) s podporou ruskeho "yo", pripadne oddelene slovniky s "yo" resp. "ye"

$ wget ftp://scon155.phys.msu.su/pub/russian/ispell/rus-ispell-0.99g5.tar.gz
$ mkdir rus-ispell
$ tar -xzvf rus-ispell-0.99g5.tar.gz -C rus-ispell
$ cd rus-ispell
$ sed -i 's/buildhash/..\/buildhash/g' Makefile   # use compiled ../buildhash (from parrent dir)
$ make YO=1

cstocs

Perl program cstocs sa nachadza v CPAN module Cstools, ale vo Fedore tento modul nie je, takze potrebna kompilacia, resp. instalacia

$ dnf install perl-ExtUtils-MakeMaker
$ wget https://cpan.metacpan.org/authors/id/J/JA/JANPAZ/Cstools-3.42.tar.gz
$ tar -xzvf Cstools-3.42.tar.gz
$ cd Cstools-3.42/
# from debian cstocs package get patch, changes to 3.42-3 are not really necessary
$ wget https://sources.debian.org/data/main/c/cstocs/1:3.42-3/debian/patches/debian-changes-1:3.42-1 -O debian-changes.patch
$ patch -p1 < debian-changes.patch

# install as admin default to /usr/local
$ perl Makefile.PL
$ make; make test
$ make install

# install as user
$ perl Makefile.PL PREFIX=$HOME/Cstools
$ make; make test
$ make install
# execute as user
$ export PATH=$PATH:$HOME/Cstools/bin
$ export PERL5LIB=$HOME/Cstools/share/perl5/   # add to @INC path, check with perl -V

Instalacia lubovolneho Perl modules z CPAN priamo vo Fedora

$ dnf install perl-CPAN
$ cpan Cz::Cstocs