„Második fejezet” a LibreOffice-ban és a parancssorban

A LibreOffice 6.1 újdonságaként magyar számneves számozási stílusokat is használhatunk kiadványainkban a következő videón látható módon. Az FSF.hu Alapítvány támogatásával megvalósult fejlesztés az OOXML szabványban már meglévő hasonló számozások export/import támogatását is tartalmazza.

A fejlesztés mögött az előző hírben szereplő Soros programozási nyelv, illetve az új libnumbertext programkönyvtár áll, amely több mint 30 nyelven teszi elérhetővé az új számozási stílusokat, l. a következő videó angol, francia és német példáit. Rene Engelhard megkezdte a libnumbertext Debian-integrációját, egyszerű hozzáférést biztosítva a programkönyvtárhoz, amellyel nemcsak a LibreOffice felületén alapértelmezetté váló funkciókat, hanem több új érdekes magyar számnévformátumot is használhatunk akár a parancssorban is:


$ spellout
spellout 1.0.1-3: convert numbers to number names and money amounts
Usage: spellout [-l lang] [-p prefix] par1 [par2...]
Parameter: n: number; n-m: range; n-m~s: range with step
Examples: spellout 1-10 500 1000-10000~1000
          spellout -l en-GB -p ordinal 1-100
          spellout -l en -p ordinal-number 1-100
          spellout -l en -p USD 100.45
          spellout -l en -p "money USD" 100.45
Help of language module: spellout -l es help
$ spellout -l hu help
egy, kettő, három
ordinal: első, második, harmadik
ordinal-number: 1., 2., 3.
year: kétezeregy, kétezerkettő, kétezerhárom
formal: egyszáz, kettőszáz, egyezer
text: egy, 12 ezer, 10 milliárd
currency (for example, HUF): két forint ötven fillér
formal HUF: egyszázkettő forint ötven fillér
$ spellout -p ordinal -l hu 1-3
első
második
harmadik

A fejlesztés a LibreOffice fordítói közösség bevonásával, illetve a még hiányzó többnyelvű számneves oldalszámozás megvalósításával folytatódik. Kapcsolódó hibajegy: tdf#117171.

Hozzászólások

igazabol lenyugozo. Csak ezeket mar irodalmi folyoiratokban kene lekozolni, mert itt mar nem uti meg az emberek ingerkuszobet. Egyszeruen az informatikusok ennyire nem vajtfuluek.

Ahogy regen az irodalomtanarnom mondta: engem annyira erdekelt a matematika, hogy a fizetesemet meg tudjam szamolni...

Egyebkent forditva is mukodik parancssorbol?

Ertem ez alatt, hogy szoveget tokenizalok, es az irott szamokat kiveszi szamokkent.
pl:
kettoezer-tiz forint -> 2010 huf

---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

"irodalmi folyóiratokban kéne leközölni"

Teljesen egyetértek. A kivitelezés tényleg bravúros, minden tiszteletem, de mivel a számokat könnyebb számjegyként kezelni és értelmezni emberi oldalon is, így nagyon ritka, amikor erre a betűátírásra tömegesen/automatizáltan szükség van.

Amúgy szép munka! :-)

Igaz, a hír inkább érdekes, mint hasznos a legtöbb informatikusnak. De most kaptam több javítást, illetve észrevételt többek között kínai, izlandi és bolgár LibreOffice-fejlesztőktől, úgyhogy bízom az informatikus olvasókban is! :) Bíró ismerősöm a Linux Libertine G Graphite betűkészletekkel alakította át automatikusan még az évszámokat is a jogi szakszövegekben, pl. „kelt kétezer-tizennégyben”. A jövőben ez a kerülő megoldás, és a Calc Numbertext kiegészítő is kiváltható lesz a libnumbertext-integrációval.

A szövegfelismeréshez külön Soros programot lehet írni, alapból még nem támogatott a programkönyvtárban (bár a szabályokat meg lehetne fordítani valószínűleg). A külön program előnye, hogy tetszőleges rugalmasságú lehet, pl. a következő magyar példa a furcsább számok („ezermilliárd”), helyesírási hibák („milió”, „nyócvan”), felesleges szóközök és kötőjelek esetén is működik, pl.


$ spellout -l hu_fordítva "ezer milliárd nyócvan milió--tiz forint"
1000080000010 HUF

A program (amely ékezet nélküli bemenetre is könnyen módosítható):


# currency

"(.*) forint" $1 HUF

# add zeroes

== e12 ==

(.*)mill?iárd(.*)	$(e3 \1)$(e9 \2)
(.*)			000$(e9 \1)

== e9 ==

(.*)mill?ió(.*)		$(e3 \1)$(e6 \2)
(.*)			000$(e6 \1)

== e6 ==

"[- ]?ezer(.*)"		001$(e3 \1)
(.*)ezer(.*)		$(e3 \1)$(e3 \2)
(.*)			000$(e3 \1)

== e3 ==

(.*száz.*)	$1
(.*(t[ií]z|h[uú]sz|harminc|v[ea]n).*) 0$1
(..+)		00$1
"[- ]?"		000

== ==

# numbers

(egy)?bill?ió(.*)		1$(e12 \2)
(.*)bill?ió(.*)			$1$(e12 \2)
(egy)?mill?iárd(.*)		1$(e9 \2)
(.*)mill?iárd(.*)		$1$(e9 \2)
(egy)?mill?ió(.*)		1$(e6 \2)
(.*)mill?ió(.*)			$1$(e6 \2)
(egy)?ezer(.*)			1$(e3 \2)
(.*)ezer(.*)			$1$(e3 \2)

# remove inner spaces and hyphens

"[- ](.*)" $1
"(.*)[- ]" $1

# numbers

(egy)?száz	100
(.*)száz	$100
(egy)?száz(.*(t[ií]z|h[uú]sz|harminc|v[ea]n).*) 1$2
(.*)száz(.*(t[ií]z|h[uú]sz|harminc|v[ea]n).*) $1$2
(egy)?száz(.*)	10$2
(.*)száz(.*)	$10$2

nulla		0
egy		1
(két|kettő)	2
három		3
n[eé]gy		4
öt		5
hat		6
h[eé]t		7
(nyolc|nyóc)	8
kilenc		9
t[ií]z		10
t[ií]zen(.*)	1$1
h[uú]sz		20
h[uú]szon(.*)	2$1
harminc		30
harminc(.*)	3$1
(negy|öt|hat|het|nyolc|nyóc|kilenc)v[ae]n $10
(negy|öt|hat|het|nyolc|nyóc|kilenc)v[ae]n(.*) $1$2

Ez a fejlesztés szerintem a felolvasó programokban jöhet nagyon jól, ahol vakoknak, gyengénlátóknak lehet nagy segítség, amikor a számokat illetve a jelöléseket, rövidítéseket értelmesen, pontosan tudja szöveggé konvertálni, majd felolvasni.

Nem mindegy, hogy:
"egy hat pont öt három e ú er megfelel öt kettő nulla egy pont négy kettő há ú ef nek"
vagy pedig
"tizenhat egész ötvenhárom euró megfelel ötezer-kétszázegy egész negyvenkettő forintnak"

Ez a probléma szerintem évek óta meg van oldva.

Annak idején egy szerző a Linuxvilágban leközölte a mbrola nevű szoftver magyarításának menetét. A számok felolvasásához történetesen azt a shellszkriptet használta fel, ami az én könyvemben található példaprogramként.

---
Science for fun...