Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Ordinamento di caratteri non latini

    Salve a tutti,
    questo topic serve a fare un po' di brainstorming per vedere di risolvere un problema che mi è capitato da poco.
    Immaginate di avere il dizionario di una lingua con caratteri latini che però possiedono diacritici. In pratica l'alfabeto di questa lingua è qualcosa del genere:

    aAăĂâÂbBcCdDđĐeEêÊfFgGhHiIjJkKlLmMnNoOôÔơƠpPqQrRsS tTuUưƯvVwWxXyYzZ

    L'ordine delle lettere (che penso si basi sul codice ascii del carattere corispondente) non è sempre connesso all'odine dell'alfabato di una lingua.

    Usando php e mysql (ma anche un algoritmo generale sarebbe ancora più gradito) come fareste voi a ordinare il vocabolario di tale lingua?

    Un'idea che mi era venuta era tenere in una tabella l'alfabeto con la posizione, fare una query e poi controllare lettera per lettera ogni parola da ordinare, ma forse è un po' oneroso per il server.

    Accetto qualsiasi consiglio o suggerimento!

    Grazie a chi mi risponderà

    ps: ovviamente ignoro se mysql abbia già un sistema automatico per una cosa del genere. Attenzione perché a me serve davvero il procedimento generale, deve funzionare per lingue esisenti ma magari anche per lingue artificiali che difficilmente hanno una collation (o un supporto) da parte di mysql!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    Non ne vedo il motivo in quanto le parole con lettere diacritiche iniziali vanno assieme a quelle normali, ma se vuoi fare una tempesta di cervelli...

    Se le vuoi ordinare e poterle raggiungere in ordine numerico puoi metterle in un' array, non credo ci sia un modo più "facile".

    Codice PHP:
    $alfabeto_diacritico = [
         
    => "a",
         
    => "A",
         
    => "ă",
         .....

    Ora che hai dato un ordine ad ogni lettera le passi tutte e le ordini secondo la prima lettera

    Codice PHP:
    while(passa tutte le parole){

         
    $first_letter $word[$i]{0};

         
    $letter_code array_search($first_letter$alfabeto_diacritico); //la key corrispondente alla lettera

         
    $words[$letter_code][] = $word[$i//metti la parola assieme a quelle che iniziano con la sua stessa lettera

         
    $i++;

    Intanto le abbiamo ordinate per la prima lettera, questo vuol dire che abbiamo già diviso in "capitoli" il nostro vocabolario.

    A questo punto potremmo ciclare ogni capitolo ed ordinarle con substr avanzando di lettera in lettera e dando alla parola un valore numerico ordinabile come in un alfabeto.

    Ciao,
    endle


    P.S:

    Un'idea che mi era venuta era tenere in una tabella l'alfabeto con la posizione, fare una query e poi controllare lettera per lettera ogni parola da ordinare, ma forse è un po' oneroso per il server.
    Volevi davvero far elaborare un dizionario intero ad ogni richiesta della pagina? Stai tentando forse di dar fuoco ad una web farm?
    Ultima modifica di endlesszero; 25-07-2014 a 16:02

  3. #3
    In realtà il programmino è sul mio pc e quindi semmai do fuoco solo al mio portatile
    Comunque è più un esercizio che voglio rendere generico per studiare un po' le prestazioni di alcuni algoritmi. Non sempre l'alfabeto in una lingua si comporta come ci aspetteremmo! Per esempio alcuni simboli che sono una A con diacritici in Norvegese sono inseriti a fine alfabeto. Se facessi un semplice ordinamento sarebbero inseriti dopo la A sballando di fatto un dizionario norvegese. Sono sicuro che con le collation i problemi sarebbero risolti ma questo non mi considera un arbitrario set di caratteri che magari decido io. Per questo mi serve un algoritmo generale. Appena ho due minuti provo la tua soluzione, intanto grazie
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  4. #4
    Per questo mi serve un algoritmo generale.
    il mio codice è inserito tra i tag [ PHP ], ma credo che (completandolo) potresti eseguirlo come C++, in fondo non ho usato alcuna funzione speciale...

  5. #5
    Sì certo appena ho due minuti liberi lo provo, grazie mille
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.