Odstraneni diakritickych znamenek
Vazena konference, 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? Honza Dvorak
Re: Odstraneni diakritickych znamenek
Friday, November 4, 2005, 6:51:21 PM, you wrote: > Vazena konference, > 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? strucne: nie. pozrite sa kritickym okom na umiestnenie standardnych a akcentovanych znakov v znakovej sade. ak v tom nejakym zazrakom uvidite nejaky naznak algoritmu, rozvinte tu myslienku a alogitmus implementujte :-) nepochybujem, ze dostanete nobelovu cenu za matematiku. :-)) DISCLAIMER: nie som matematik, takze za pripadne necakane osvietenie v tejto veci vopred dakujem :-) anyway, otazkou je, co je to "lepsi sposob" 1) ak to ma byt rychlost -> asi nic nebude rychlejsie nez prevodna tabulka 2) ak to ma byt velkost kodu -> dovolim si tvrdit, ze v tomto pripade akykolvek algoritmus bude vacsi nez ekvivalentna prevodna tabulka. 3) ak to ma byt citatelnost -> zlozitost potencialneho algoritmu urcite prekroci unosnu mieru. kym prevodnu tabulku pochopi kazdy magor, sofistikovany algoritmus len vyvoleni, za predpokladu, ze k nemu bude k dispozicii sprievodna rigorozna praca :-). zaverom asi tolko: - su ulohy, ktore sa algoritmizovat daju; ine sa nedaju alebo to nema zmysel - su ulohy, ktore sa algoritmizovat musia: napriklad robit String.toLowercase() pomocou prevodnej tabulky nad celou Unicode znakovou sadou by bol asi drsny overhead... - je mozne, ze urcite sub-ulohy v tomto zadani su algoritmizovatelne. vacsinou je vsak zakladom nejaka forma prevodnej tabulky. prevodnu tabulku relevantnu pre toto konkretne zadanie predpokladam mate (je to solidne a priamociare riesenie) dalej odporucam do pozornosti: http://www.unicode.org/Public/UNIDATA/ pripadne pre inspiraciu http://www.unicode.org/Public/UNIDATA/SpecialCasing.txt a suvisiacu triedu v JDK: java.lang.ConditionalSpecialCasing (package private, pozri zdrojaky) tak, diky za pozornost, dobre mi padlo pre zmenu pisat znovu nieco po slovensky :-)) -- Patrik Beno J2EE Software Architect Cleverlance - The Clever Enterprise Solutions www.cleverlance.com European Business Center Dukelskych hrdinu 34 170 00 Praha 7 Czech Republic Tel.: +420 266 177 166 Mobile: +420 777 929 450 Fax:+420 266 177 155
Re: Odstraneni diakritickych znamenek
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. S pozdravem, Stepan Roh
Re: Odstraneni diakritickych znamenek
icu4j od ibm funguje celkem spolehlive, jakkoli to muze byt seznano kanonem na vrabce. pavel On 04/11/05, Jan Dvořák <[EMAIL PROTECTED]> wrote: > Vazena konference, > > 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? > > Honza Dvorak > >
RE: Odstraneni diakritickych znamenek
- 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 V 1.6 bude pridana (presneji receno presunut mezi 'bezne' tridy) trida java.text.Normalizer, ktera by to mela resit. Ale cekat na to asi nechcete, co?:) V Tigerovi existuje sun.text.Normalizer, jen je kapanek nedokumentovana.. Jarda
Re: Odstraneni diakritickych znamenek
Len tak okrajom: Sun-acke interne triedy Normalizer a NormalizerUtilities su dostupne aj v 1.4 Kameník Jaroslav wrote: - 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 V 1.6 bude pridana (presneji receno presunut mezi 'bezne' tridy) trida java.text.Normalizer, ktera by to mela resit. Ale cekat na to asi nechcete, co?:) V Tigerovi existuje sun.text.Normalizer, jen je kapanek nedokumentovana.. Jarda
Re: Odstraneni diakritickych znamenek
Diky vsem diskutujicim za namety. Zkusime ICU4J (http://icu.sourceforge.net/), da se zbuildovat i po modulech, a tak nam ten nas drobecek neztloustne o cele 3,1 MB, ale jen o 456 KB. Honza Dvorak Pavel Kolesnikov napsal: icu4j od ibm funguje celkem spolehlive, jakkoli to muze byt seznano kanonem na vrabce. pavel On 04/11/05, Jan Dvořák <[EMAIL PROTECTED]> wrote: Vazena konference, 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? Honza Dvorak
Re[2]: Odstraneni diakritickych znamenek
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? :-) -- Patrik Beno J2EE Software Architect Cleverlance - The Clever Enterprise Solutions www.cleverlance.com European Business Center Dukelskych hrdinu 34 170 00 Praha 7 Czech Republic Tel.: +420 266 177 166 Mobile: +420 777 929 450 Fax:+420 266 177 155
Re[2]: Odstraneni diakritickych znamenek
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