Esiste una specifica indipendente dalla lingua per "Ordinamento naturale delle stringhe"

6

Mentre provo dolorosamente a trovare un buon algoritmo di ordinamento naturale scritto in JavaScript, mi imbatto in una serie di diverse implementazioni, & post e blog interessanti risposte su Stack Overflow.

Ogni implementazione fornisce i suoi trucchi tecnici, tuttavia più lo guardavo più una domanda diventava molto chiara: "c'è in realtà qualche specificazione agnostica della lingua riguardante l'ordinamento naturale delle stringhe ???"

Voglio dire, se no, allora come ci si potrebbe aspettare di scrivere un pezzo di codice che sia in realtà "corretto per tutti" o "concordato dalla comunità"? Mi sarei aspettato una specifica che affermasse il risultato dei compromessi / decisioni prese, almeno per l'inglese, poiché è semplice (senza accenti / segni diacritici) ...

Nota che ho scritto "linguaggio indipendente" come mi aspetterei che questa specifica fosse utilizzata per implementare soluzioni in diverse lingue, non solo in javascript o C # o Java.

Risorse:

posta Adrien Be 26.09.2014 - 14:18
fonte

2 risposte

13

Gli algoritmi per determinare quale stringa viene prima quando si confrontano due stringhe sono chiamati algoritmi di confronto e l'ordinamento che producono è chiamato ordine di confronto .

Sfortunatamente, non esiste un ordine di collazione globale concordato. A peggiorare le cose, l'ordinamento corretto non dipende solo dalla lingua, ma può anche differire tra i diversi contesti.
Un esempio di differenza linguistica è che in tedesco i caratteri accentati vengono ordinati immediatamente dopo le loro controparti non accentate (ö viene immediatamente dopo o), ma in svedese i caratteri accentati vengono proprio alla fine dell'alfabeto (ö viene dopo z). E per quanto riguarda le differenze di utilizzo, le rubriche telefoniche e i dizionari possono avere ordini diversi.

Sebbene non esista un ordine di collazione globale, esistono ordini di collazione che generalmente danno un ordine ragionevole indipendentemente dal linguaggio naturale in cui sono scritte le parole e ci sono algoritmi di collazione che possono essere personalizzati per dare un ragionevole ordine o per dare l'ordine assolutamente corretto per una determinata cultura e utilizzo.

Uno di questi algoritmi è "Algoritmo di confronto Unicode", che può essere trovato all'indirizzo link . Questo algoritmo può essere personalizzato per un'ampia gamma di ordini di confronto e viene fornito con una configurazione predefinita che fornisce un ordine ragionevole per tutti i punti di codice Unicode. L'algoritmo non dipende da alcun particolare linguaggio di programmazione.
La sezione introduttiva dello standard offre una buona panoramica delle difficoltà nella corretta raccolta del testo.

Un altro algoritmo è descritto in standard ISO 14651 .

Oltre ai vari ordini di riscossione nazionali, esiste anche un ordine di collazione standardizzato per le lingue europee, chiamato European Ordering Rules (EOR) .

    
risposta data 03.10.2014 - 12:46
fonte
4

C'è ISO 14651 . Questo è uno standard ISO che specifica un algoritmo che può essere usato quando si confrontano due stringhe. Lo standard specifica anche un file di dati che specifica l'ordine di confronto, il Common Tailorable Template, CTT.

Vi sono le regole di ordinazione europee . Questa è un'implementazione dell'iso CTT. Definisce un ordinamento per stringhe scritte in lingue scritte con l'alfabeto latino, greco e cirillico.

C'è l'algoritmo di Unicode Collation . L'algoritmo di confronto in Unicode (UCA) è un algoritmo definito in Unicode Technical Report # 10, che definisce un metodo personalizzabile per confrontare due stringhe.

    
risposta data 03.10.2014 - 12:11
fonte

Leggi altre domande sui tag