Spelling

From AliceWiki
Jump to: navigation, search

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 sk_SK.aff a sk_SK.dic sa nachadzaju v directory /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/myspell/ 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 (2020-06) zatial verzia: 2.04, 2013-03-17, 247005 words.
  • LibreOffice (GitHub) dictionaries obsahuju identicke slovniky ako hunspell-sk (GitHub).

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 использует расширенный исходный словарь Лебедева, содержит более 176 тысячи слов, однако последняя версия словаря 2013-11.
  • LibreOffice (GitHub) dictionaries тоже использует словарь Лебедева (но непонятно какая версия) и содержит порядка 146 тысячи слов. Russian Spellchecker расширение основана на работе группы AOT.ru.

Summarum используем словарь из Firefox extension.

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 2019.10.06. 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 (v skutocnosti je to ASCII), co moze sposobovat problemy, staci zamenit na SET UTF-8.
  • Firefox extension zalozene na predoslej SCOWL verzii 2018.04.16, ktory je doplneny o slova s diakritikou, napr. café (custom SCOWL) a nejakymi dalsimi Mozilla specifickymi vyrazmi.
  • LibreOffice dictionaries pouzivaju aktualnu SCOWL verziu 2019.10.06 bez akychkolvek uprav. Slovniky su udrziavane priamo komunitou LibreOffice (GitHub).

Summarum pouzivat original SCOWL slovnik, pripadne este pouzivat 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). 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

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 z 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