Como facite

Le 31 de decembre 2015 e

Que?

“Como facite” es mi tentativa de traducer le anglese The making of. Que esseva facite? Un dictionario basic interlingua-nederlandese. Con le mesme 2500 parolas que es explicate in le dictionario basic unilingue.

Derivar 2500 parolas ia-nl

Le idea io habeva durante le conferentia de interlingua in Benidorm, in septembre 2015: habente ja un grande dictionario in le forma de un file de texto, e le lista de 2500 parolas equalmente in iste formato, il deberea ser possibile lassar le computer facer le labora, con un resultato complete quasi preste a usar.

Le lista continerea le argumentos de cerca pro grep, pro seliger le lineas pro un parve dictionario, ex le multe lineas del grande dictionario.

Alora io ja comprendeva que isto solmente es le theoria, que alcun tractamento manual serea tamen necesse.

Prime essayo

Preparar le argumentos de cerca

Me mancava tunc le tempore, e il habeva ancora problemas in le derivation del material pro le grande dictionario, que io debeva solver primo.

Le 27 de novembre 2015 io essayava realisar mi idea. In circa un hora e medie io habeva obtenite un resultato que era, ben que imperfecte, tamen usabile in principio. Lo que io faceva esseva le sequente:

Obtener le lista del parolas, sin le explicationes:
fetch https://www.interlingua.com/archivos/Interlingua-dictionario-basic-2500-parolas.txt

Extraher del lista solmente le entratas, in altere parolas, remover le extra information como le categorias (vb., sb., adj., adv., etc.) del parolas.
sed -E 's/([a-zA-Z]+)( .+)/\1/' Interlingua*.txt | tee primeparola.txt
Le commando tee servi pro rapidemente vider le resultatos al schermo ma tamen guardar los in un file. In vice de sed io poterea anque haber usate awk '{print $1}' ben que le resultato non es identic. Le resultato de sed es iste lista basic ancora plus basic.

Alcun modification manual monstrava se necesse. In vice de explicar le detalios que io ja oblidava, io monstra qui le resultato, le file srch.txt. Istos es le differentias, ergo le manipulationes que io apponeva.

Le proxime passo de labor es adder al comencio de cata parola de cerca le symbolo ^ (vide anque iste explication), assi:
sed -E 's/^(.+)/^\1/' srch.txt > cerc.txt

No, illo non es correcte, proque naturalmente un argumento de cerca ‘^a’ anque trova lineas que comencia con ‘ab’, ‘abandonar’ etc. etc. Nos besonia un spatio post le parola clave, assi:
sed -E 's/^(.+)/^\1 /' srch.txt > cerc.txt.
(Le spatio al fin de cata linea on vide solmente quando on selectiona texto con le mus.)

Facer le selection

In iste puncto, ancora al 27 de novembre 2015, io habeva attingite al momento solemne de lassar facer le computator su travalio penose:
time grep -f cerc.txt $PATH_TO_DICTFILE/ianl-8859-1.htm > selection.txt
Le programma time es un typo de chronometro, que reporta:
29.430u 0.329s 0:52.89 56.2% 197+314k 0+3io 1pf+0w

Isto vole dicer que le CPU (central processor unit, entitate central pro processar datos) de mi servitor web que io usa pro isto, ha empleate 0,329 secundas pro activitates del systema (isto es: leger datos del disco e scriber los), e 29,430 secundas pro activitates pro le usator, isto es, le comparationes in le programma grep.

56,2% indica que solmente iste percentage es usate, de un maximo de 60% del potentia de un nucleo, que es virtualmente disponibile pro me, del probabilemente quatro nucleos de processor que es physicamente presente.

Quasi 30 secundas, medie minuta! Contrari a lo que forsan pensa alcuno qui ha mirate MS Windows facer su lanceamento initial, 30 secundas pro un processor moderne es un duration colossal. Iste longe tempore se explica ex le inefficientia del methodo que io ha applicate pro le selection del lineas pro le dictionario basic: pro cata del 150.681 lineas del grande dictionario ia>nl de Piet Cleij, grep debe verificar si un del 2500 parolas basic es in le initio. Proque generalmente le comparationes non ha un resultato positive (le grande dictionario ha multe plus parolas que le lista basic, ergo le majoritate non es seligite), il es necesse quasi 150.681 * 2500 comparitiones de parolas, plus que 375 milliones!

Naturalmente un algorithmo plus efficiente es possibile, comparante claves de duo files alphabeticamente ordinate, ma illo non vale le pena, proque le execution del operation es solmente incidental.

Controlo del resultato

Le file resultante contine 394.514 bytes e 7641 lineas. Sin le exemplos de uso:
echo '--' > dashes;
grep -v -f dashes selection.txt > sinexempl.txt

remane 246.143 bytes e 5080 lineas. Solo considerante le parolas clave e ordinante los unicamente assi:
awk '{print $1}' sinexempl.txt | sort -u | wc
le numeration resulta in 2468 lineas. Ergo circa 2500: mi methodo pare haber essite correcte.

Controlo melior

Le 27 de novembre io non habeva plus tempore. Io continuava le 13 decembre 2015, con un controlo plus accurate:
awk '{print $1}' selection.txt | sort -f -u > presente.txt
diff srch.txt presente.txt

In theoria le duo files deberea ser identic. Ma il non esseva, multe parolas basic mancava. Le causa es, que in le grande dictionario, multe parolas clave es sequite per un comma o per ‘(I)’, ‘(II)’ etc. Dunque in de file pro le selection il non basta haber un spatio al fin del lineas, anque le comma e parenthese debe esser permittite, assi:
sed -E 's/^(.+)/^\1[ ,(]/' srch.txt > cerca.txt

Le dur travalio de novo:
time grep -f cerca.txt $PATH_TO_DICTFILE/ianl-8859-1.htm > selection.txt
Le resultatos ora es:
29.956u 0.129s 0:53.53 56.1% 197+314k 0+13io 0pf+0w
con 37.100 lineas e 1.760.632 bytes.

Ergo multo plus lineas, que es explicabile per le inclusion del exemplos que previemente non esseva seligite, proque le comma mancava in le patronos de cerca. De novo le controlo (ora non con awk, ma per sed, pro eliminar le ‘[ ,(]’), assi:

sed -E 's/^([a-zA-Z-]+)([ ,(])(.+)/\1/' selection.txt |
  sort -fu > presente.txt
diff srch.txt presente.txt

Ancora le resultato non es bon, il manca alcun parolas: al alicun contactar cuje del Deo developpar dextre etc hallo haltar illas illos immediatemente incostose iste las los me molliate nonne nos nostre novo pantalones parentes prohibir quandocunque sparniar sr sra srta te trenta ubicunque un vacantias vespere vos W.C.

Le plus facile me semblava adder istes a mano.

Finalisation

Al 15 de decembre io pensava haber arrivata al finish, ma un die plus tarde io discoperiva plus irregularitates, trovante con le patrono  $ spatios al fin de explicationes (illo non es problematic), ma anque circa 20 entratas sin explicationes, trovate con le patrono : $. (Cercar los ora non los trova, proque intertanto le problemas es solvite.)

Ille 20 casos esseva causate per formatationes inexpectate in le material de Wikia. Al 29 de decembre 2015 io trovava le tempore pro reparar le problemas manualmente. Le spatios final anodin io removeva in MS Word: ‘ ^p’ deveniva ‘^p’. Finalmente, le file pro le ‘compulsator’ era preste.

Ma ancora non un dictionario basic interlingua-nederlandese pro imprimer.