Classe di stringhe basata su grafemi?


9

Mi chiedo perché non abbiamo alcune classi di stringhe che rappresentano una stringa di cluster grapheme Unicode anziché punti di codice o caratteri. Mi sembra che nella maggior parte delle applicazioni sarebbe più facile per i programmatori accedere ai componenti di un grafema quando necessario, piuttosto che doverli organizzare da punti di codice, il che appare necessario anche se solo per evitare di spezzare casualmente una stringa in "mid-grapheme" (almeno in teoria). Internamente una classe di stringhe potrebbe usare una codifica di lunghezza variabile come UTF-8, UTF-16, o in questo contesto anche UTF-32 è di lunghezza variabile; o implementare sottoclassi per tutti (e facoltativamente configurare la scelta in fase di esecuzione in modo che lingue diverse possano usare le codifiche ottimali). Ma se i programmatori potessero "vedere" le unità grafiche durante l'ispezione di una stringa, non


Immagino che sia passato un po 'di tempo, e ora abbiamo un paio di lingue che lo fanno davvero. : D
Trejkaz,

Risposte:


4

Sembra che il modo migliore per ottenere la correttezza sia impedire ai programmatori di fare "hacking di stringhe" ... non è giusto scrivere la propria parola a capo automatico, sillabazione, conteggio delle parole, giustificazione, movimento del cursore, ecc. Routine. Tutti i moderni quadri dell'interfaccia utente faranno queste cose per te in questi giorni.

Cioè, l'astrazione con cui di solito lavoreresti è più di un "oggetto di visualizzazione di paragrafo", come per GTK: http://library.gnome.org/devel/pango/stable/pango-Layout-Objects.html

piuttosto che una stringa grapheme, come ad esempio: http://library.gnome.org/devel/pango/stable/pango-Glyph-Storage.html

Per accedere a una serie di glifi sono necessarie informazioni disponibili solo a livello di "visualizzazione", quindi la maggior parte degli utilizzi di stringhe potrebbe non disporre di tali informazioni. Ad esempio, devi conoscere il carattere, perché i caratteri possono avere legature diverse.

A parte questo tipo di questione pratica, i glifi probabilmente non sono quello che vuoi.

In molti contesti, si desidera utilizzare gli attributi Unicode corretti, mostrati in questa API ad esempio: http://library.gnome.org/devel/pango/stable/pango-Text-Processing.html#PangoLogAttr

Come puoi vedere da quella struttura (che riflette gli algoritmi Unicode) fare varie cose ai confini dei glifi non è più corretto che farle ai confini dei caratteri.

Queste due specifiche descrivono gli algoritmi per trovare diversi tipi di confini:

Fare elaborazione del testo implica trovare quei confini con gli algoritmi e quindi lavorare con i confini.

Se inizi a capire quanto sia difficile gestire correttamente tutte le lingue, realizzerai molto rapidamente che hai bisogno di una libreria che guardi interi paragrafi e li gestisca correttamente. Windows, Mac, Linux (Qt e GTK) e Java sono tutti dotati di servizi per questo, inoltre c'è http://site.icu-project.org/ per esempio.

Quando scrivo app Web, sfortunatamente devi praticamente lasciare che il browser (probabilmente aiutato dal sistema operativo) faccia queste cose, per quanto ne so. Tutto quello che puoi fare in JavaScript o sul lato server è rovinarlo.

Forse riassumo la risposta come: la maggior parte della manipolazione di stringhe sul testo in linguaggio naturale è rotta, quindi non c'è molto motivo di preoccuparsi della classe di stringhe, oltre a forse averne una senza metodi ;-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.