Akiri la plej uzitajn vortojn de teksto kaj kiom da fojoj ili ripetiĝas: per Python kaj Coreutils

En ĉi tiu artikolo mi montras kiel simple akiri la plej uzitajn vortojn de teksto. Ĉi-okaze mi uzos kiel montron la tekston de la oka libro de la novelo Τῶν περὶ Χαιρέαν καὶ Καλλιρρόην, eltirita el https://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A2008.01.0668%3Abook%3D8. Mi forigis la notojn, kiun ĝi havis inter kvadrataj krampoj, per sed:

sed -i 's/\[[^]]*\]//g' oka_libro.txt

La programo, kiu montras al ni ĉiujn vortojn estas jen, mi nomis ĝin listo-de-vortoj.py (mi klarigas sekve kiel ĝi funkcias):

archivo_texto = open('oka_libro.txt', 'r')
texto = archivo_texto.read()
archivo_texto.close()

palabras = texto.split()

for palabra in palabras:
    print(palabra.strip('‘’:;,.').lower())

En la teksta dosiero, kiun mi nomis oka_libro.txt (elŝuti), mi supozas, ke vorto estas apartigita per blanka spaceto, do mi uzas la split-funkcion por akiri la liston de vortoj. Tamen kelkfoje estas komoj, punktoj, citiloj, dupunktoj, punktokomoj antaŭ aŭ post la vortoj, kaj kelkfoje ili komenciĝas per majuskloj. Por tiuj okazoj sufiĉas uzi la strip()-funkcion per la signoj, kiujn ni volas forĵeti inter citiloj, kaj lower() por minuskligi la vorton.

Nun mi volas, ke la vortoj, kiuj pleje aperas en la teksto, estu montritaj en la ekrano, kun la nombro de fojoj, kiam ili aperas dekstre; sed mi ne programos ĝin; mi uzos ilojn, kiuj ebligas fari tion en GNU/Linukso: uniq kaj sort.

La kodo, kiun mi devas plenumi, estas jen (la antaŭa Python-programo estas listo-de-vortoj.py):

python3 listo-de-vortoj.py | sort | uniq -c | sort -n -r

La listo estas tre granda, do utilas vidi ĝin per less. Se mi volas eltiri nur la liston de la 20 plej uzitaj vortoj, mi aldonas tubon: | head -n 20:

python3 listo-de-vortoj.py | sort | uniq -c | sort -n -r | head -n 20

Ĉi tio liveras la jenan rezulton:

274 καὶ
193 δὲ
169 τὸν
105 τῷ
 86  84 ἐν
 60 γὰρ
 56 τῆς
 52 εἰς
 41 μὲν
 40 τοῖς
 35 χαιρέας
 31 οὐ
 30 ὡς
 27 τοῦ
 27 ὅτι
 26 ἀπὸ
 26 οὖν
 24 πρὸς
 22 αὐτὸν

Kompreneble, la plejparto de la vortoj, kiuj pleje ripetiĝas, estas konjunkcioj kaj prepozicioj ĉi-okaze, kaj en la malnova greka multaj vortoj estas deklinaciitaj. Se ni volas solvi tiujn problemojn, ni devus perfektigi la Python-programon.

Sed por via specifa problemo vi mem devos enprofundiĝi. Ĉi tie mi volas simple montri, ke nur per listo de vortoj vi povas kalkuli la oftecon, kiam ili aperas, kaj ordigi ilin per iloj de GNU Coreutils, kiuj jam estas instalitaj en GNU/Linukso. Mi uzis nenion krom programoj, kiujn mi jam havis instalitaj en mia operaciumo: ne necesas reinventi la radon nek uzi eksterajn kodotekojn.

Komentoj