Portál AbcLinuxu, 13. prosinec 2017 02:46

Filtrujme čtivé texty z Projektu Gutenberg 1

23. 3. 2016 | Karel Kulhavý
Články - Filtrujme čtivé texty z Projektu Gutenberg 1  

Projekt Gutenberg nabízí přes 20 gigabajtů většinou anglické literatury s prošlým copyrightem. Chceme-li si ale pěkně počíst, narážíme na spoustu děl psaných archaickou angličtinou. Jak vyfiltrovat čtivá díla jednoduše pomocí unixových nástrojů?

Projekt Gutenberg nenabízí žádné pokročilé rozhraní, které by umožnilo jednotlivá díla vyhledávat pomocí komplexních statistických kritérií. K dispozici jsou offline katalogy, top 100 knih. Top 100 vévodí anglický román rodinného života Pýcha a Předsudek od Jane Austenové z roku 1813 a na druhém místě je Alenka v říši divů. Na čtvrtém místě je Kafka se svou povídkou Proměna.

Online není možné soubory filtrovat či řadit podle kritérií jako např. četnost výskytu archaismů z dané množiny slov, výskyt přímé řeči a pod. Proto si budeme muset data z Projektu Gutenberg stáhnout nejdříve na náš disk, abychom s nimi mohli pracovat.

Co je projekt Gutenberg? Projekt Gutenberg je nejstarší existující digitální knihovnou. Založen byl již v roce 1971 Michaelem S. Hartem, americkým veteránem korejské války, který zemřel roku 2011 ve věku 64 let. Centrální idea projektu je publikovat texty, které jsou public domain, protože jim prošel copyright. V každém případě zde tedy najdeme díla řeckých filozofických velikánů. Co když ale intelektuálně sofistikované údery z nejzazších hlubin minulosti nejsou zrovna tím, co bychom chtěli číst, a raději bychom preferovali třeba nějaký román s napínavým příběhem?


Michael S. Hart (vlevo) a Gregory Newby z Projektu Gutenberg v r. 2006.
Zdroj: "Marcello" z Wikimedia Commons pod licencí GFDL 1.2

Od roku 1971, kdy počítače ještě vypadaly jako automatické pračky, projekt Gutenberg nasbíral přes 50 tisíc literárních děl, které jsou uspořádány v souborové hierarchii textových souborů, kde se často vyskytují vícenásobné kopie toho samého souboru, které se liší třeba jen korekturami nebo formátováním mezer. Soubory jsou obsahují prostý text v kódování ASCII nebo UTF-8.

50 tisíc souborů? To je tedy slušné cvičení na souborový systém. Posuďte sami. Pustíme tento příkaz pouze na zjištění, kolik ten adresář včetně podadresářů zabírá místa. Kontrolka disku se rozsvítí jako baterka a z disku je čteno průměrnou rychlostí cca 1,3 MB/s, ač se jedná jen o souborová metadata. Po 6 minutách kontrolka disku konečně zhasne a dostaví se kýžený výsledek 22 gigabajtů. Toto je doslova příkaz, který pustíte a můžete si jít udělat kafe:

$ time du -sm pg
21773	pg

real	5m54.408s
user	0m3.518s
sys	0m18.034s

Nejdříve si toto velké sousto tedy budeme muset zkopírovat z Projektu Gutenberg na náš disk. Použijeme k tomu Rsync:

 rsync --progress -z -urv -v --exclude='GUTINDEX*' --exclude='*-8.txt' --include='*.txt' \
 --include='*/' --exclude='*' --delete --min-size=1 --max-size=10000000 \
ftp@ftp.ibiblio.org::gutenberg pg

--progress zapíná indikaci probíhajícího stahování. -z zapíná kompresi, -u přenáší pouze soubory, které byly obnoveny (podle časového razítka) od doby, kdy jsme je stáhli. -r je zcela nezbytná rekurze, pokud chceme stáhnout víc než jednotlivý soubor. -v zvyšuje množství informativních hlášek. Že --exclude a --include vyřazují a zařazují určité druhy souborů je asi jasné, co už ale asi jasné být nemusí je, že --exclude a --include mezi sebou interagují nějakým komplexním způsobem, který je popsán v sekci FILTER RULES manuálové stránky rsyncu, která má 2500 řádků a jak bývá u manuálových stránek zvykem, u popisu --exclude na to čtenář není upozorněn. Takže se to dozví pouze tehdy, když si manuálovou stránku přečte celou jako román. Proto má uživatel v zásadě na výběr dvě možnosti: buď zemře sešlostí věkem dřív, než ten rsync vůbec pustí, a nebo se rsync bude chovat jinak, než uživatel bude věřit, že by se měl chovat, a uživatel nebude chápat proč.

Další přepínače si vysvětlíme v příštím dílu seriálu.

Další články z této rubriky

Syncthing
Twibright Registrator: Instalace, odinstalace, test, základní použití
Twibright Registrator: fotografie v šeru bez stativu 2
Twibright Registrator: fotografie v šeru bez stativu 1
Filtrujeme čtivé texty z Projektu Gutenberg 9

Diskuse k tomuto článku

Nikola Ciprich avatar 23.3.2016 10:15 Nikola Ciprich | skóre: 23 | blog: NiX_blog | Bohumín
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Odpovědět | Sbalit | Link | Blokovat | Admin
mno na seriál se těším, i když rozsah prvního dílu mě kapánek zklamal.. :(
Did you ever touch the starlight ? Dream for a thousand years? Have you ever seen the beauty Of a newborn century?
Marián Kyral avatar 23.3.2016 13:05 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Tak v příštím díle si probereme další dvě volby a uvaříme si další kafe :-D
23.3.2016 19:41 n
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
+1
24.3.2016 06:28 dutá palice
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Takže raději delší články včetně omáčky a velké přílohy i když už se tam nebude vejít to hlavní?
Fluttershy, yay! avatar 24.3.2016 09:43 Fluttershy, yay! | skóre: 81 | blog:
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Nebo delší články bez omáčky…?
23.3.2016 14:33 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Odpovědět | Sbalit | Link | Blokovat | Admin
50 tisíc souborů? To je tedy slušné cvičení na souborový systém. Posuďte sami.

Hm…

mike@unicorn:~/work/git/kernel-upstream> time du -sm .
1862    .

real    0m1.698s
user    0m0.132s
sys     0m0.944s
mike@unicorn:~/work/git/kernel-upstream> find . -type f | wc -l
54299
23.3.2016 17:13 Georgius
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Tak nevím, co používá autor blogu, ze srandy jsem to zkusil na disku připojeném z NASky gigovou sítí přes NFS (ten find trvá docela dlouho ...) nad adresářem s 10 podadresáři, z nichž v každém bylo 26728 souborů:
$ time du -sm .
88245	.

real	3m0.174s
user	0m0.636s
sys	0m8.708s

$ find . -type f | wc -l
257280

Ale fakt je, že ten find trval věky ...



23.3.2016 18:13 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
autor blogu

Kéž by… on je to ale článek.

24.3.2016 06:32 dutá palice
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Nepoužíváš slavné BTRFS?
24.3.2016 07:22 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Ne, tohle bylo na ext4 (a pro pořádek, předtím jsem flushnul cache).
24.3.2016 01:09 František Koudelka
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Odpovědět | Sbalit | Link | Blokovat | Admin
Trochu se mi nezdá, že by stihl Korejskou válku, cituji "Založen byl již v roce 1971 Michaelem S. Hartem, americkým veteránem korejské války, který zemřel roku 2011 ve věku 64 let."
24.3.2016 10:12 miky
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Njn, co dodat k autorovi zmineneho clanku, ona veta na strankach Gutenberga zni totiz jinak "and served in the Army in Korea during the Vietnam era" ...
Petr Tomášek avatar 24.3.2016 10:31 Petr Tomášek | skóre: 37 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
Odpovědět | Sbalit | Link | Blokovat | Admin
Probůh, vybírat literaturu podle počtu archaismů... *FACEPALM*
složme se na Mrdouše Zmrdanahttp://jetencurakjesteprezidentem.cz/?
Václav 24.3.2016 15:37 Václav "Darm" Novák | skóre: 26 | blog: Darmovy_kecy | Bechyně / Praha
Rozbalit Rozbalit vše Re: Filtrujme čtivé texty z Projektu Gutenberg 1
No jestli má problém přeložit i výše zmíněnou větu o minulosti jednoho z autorů, ani se tomu strachu z archaismů nedivím :)
Cross my heart and hope to fly, stick a cupcake in my eye!

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.