On Fri, 4 Nov 2005, Patrik Beno wrote:
Friday, November 4, 2005, 8:12:56 PM, you wrote:
On Fri, 4 Nov 2005, Jan Dvořák wrote:
mam odstranit diakriticka znamenka ze vsech pismen v retezci, ktera jsou v
latince.
Nejen ceska diakritika, ale vsechny mozne akcenty nad pismeny anglicke
abecedy.
Verze Javy je 1.5.
Nevite lepsi zpusob nez prevodni tabulku?
Krok cislo 1: pro kazdy znak provest konverzi do normalni formy NFD nebo
NFKD (dekompozici).
Krok cislo 2: ze vznikleho zahodit vsechny znaky s tridou Mn (non-spacing
mark), zbytek by mely byt zakladni (base) znaky.
Tento postup ma nekoli problemu:
- myslim, ze Java neposkytuje konverzi do normalni formy (alespon ne v
core API), nicmene Unicode knihovna od IBM by to poskytovat mela
(nezkousel jsem); test na tridu viz Character.NON_SPACING_MARK a
navazujici
- rozpadnou se i jine znaky nez jen ty s diakritikou, napr. nektere
ligatury - zda se, ze uzitim formy NFD misto NFKD (coz provadi nejprve
kompatibilni dekompozici) by se vetsina takovych dala odstavit; a jelikoz
v zadani se hovori o anglicke abecede, pak staci dekomponovat pouze znaky
z Latin bloku (basic, supplement, ext. A, ext. B a ext. additional)
Vice viz unicode.org.
tak, pekne odborne podane, dufal som, ze to ma niekto zmaknute :-)
lenze ak tomu dobre rozumiem, cely postup je v zasade zalozeny na
kategorizacii znakov, a tuto kategorizaciu si znaky nenesu priamo v
sebe.
to znamena, ze je nutne tieto informacie ziskavat z nejakej databazy,
ergo - prevodnej tabulky...
rozumiem tomu spravne? :-)
Ano, jsou to v podstate tabulky. Je to informace na stejne urovni jako
napr. velikost znaku a dokonce pochazi ze stejneho zdroje, tj. z
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt. Bohuzel v Jave z
toho vybrali pouze neco a zbytek byl podle vseho zahozen a to vcetne
normalizace. Ale v te IBM knihovne by to melo byt.
S pozdravem,
Stepan Roh