Last active
December 16, 2022 09:03
-
-
Save kostasx/7516158 to your computer and use it in GitHub Desktop.
Convert greek strings to URL slugs in JavaScript.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function string_to_slug(str) { | |
str = str.replace(/^\s+|\s+$/g, '') // TRIM WHITESPACE AT BOTH ENDS. | |
.toLowerCase(); // CONVERT TO LOWERCASE | |
const from = [ "ου", "ΟΥ", "Ού", "ού", "αυ", "ΑΥ", "Αύ", "αύ", "ευ", "ΕΥ", "Εύ", "εύ", "α", "Α", "ά", "Ά", "β", "Β", "γ", "Γ", "δ", "Δ", "ε", "Ε", "έ", "Έ", "ζ", "Ζ", "η", "Η", "ή", "Ή", "θ", "Θ", "ι", "Ι", "ί", "Ί", "ϊ", "ΐ", "Ϊ", "κ", "Κ", "λ", "Λ", "μ", "Μ", "ν", "Ν", "ξ", "Ξ", "ο", "Ο", "ό", "Ό", "π", "Π", "ρ", "Ρ", "σ", "Σ", "ς", "τ", "Τ", "υ", "Υ", "ύ", "Ύ", "ϋ", "ΰ", "Ϋ", "φ", "Φ", "χ", "Χ", "ψ", "Ψ", "ω", "Ω", "ώ", "Ώ" ]; | |
const to = [ "ou", "ou", "ou", "ou", "au", "au", "au", "au", "eu", "eu", "eu", "eu", "a", "a", "a", "a", "b", "b", "g", "g", "d", "d", "e", "e", "e", "e", "z", "z", "i", "i", "i", "i", "th", "th", "i", "i", "i", "i", "i", "i", "i", "k", "k", "l", "l", "m", "m", "n", "n", "ks", "ks", "o", "o", "o", "o", "p", "p", "r", "r", "s", "s", "s", "t", "t", "y", "y", "y", "y", "y", "y", "y", "f", "f", "x", "x", "ps", "ps", "o", "o", "o", "o" ]; | |
for ( var i = 0; i < from.length; i++ ) { | |
while( str.indexOf( from[i]) !== -1 ){ | |
str = str.replace( from[i], to[i] ); // CONVERT GREEK CHARACTERS TO LATIN LETTERS | |
} | |
} | |
str = str.replace(/[^a-z0-9 -]/g, '') // REMOVE INVALID CHARS | |
.replace(/\s+/g, '-') // COLLAPSE WHITESPACE AND REPLACE BY DASH - | |
.replace(/-+/g, '-'); // COLLAPSE DASHES | |
return str; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Κάποιες λίστες με ελληνικές λέξεις θα βρεις εδώ:
https://raw.githubusercontent.com/kalpetros/greek-dictionary/main/files/el.txt
https://raw.githubusercontent.com/huertatipografica/greekguide/master/greek-dictionary.txt
https://raw.githubusercontent.com/titoBouzout/Dictionaries/master/Greek.dic
Θα μπορούσες να εκμεταλλευτείς αλγόριθμους σύγκρισης String (π.χ. Levenshtein distance algorithm) και να συγκρίνεις το αποτέλεσμα της αντίστροφης διαδικασίας με το λεξικό και να κάνεις τη διόρθωση, π.χ. εάν 'σκανάρεις' το λεξικό θα βρεις ότι η λέξη "μηλο" βρίσκεται σε 1 μονάδα απόσταση από το "μήλο" (πάντα με βάση τον αλγόριθμο, μιας και ένα γράμμα έχει μόνο αλλάξει, το "η") και έτσι θα κάνεις την αντικατάσταση της λέξης "μηλο" με τη λέξη "μήλο" από το λεξικό. Θα πρέπει επίσης να λάβεις υπόψιν σου και τους χαρακτήρες, μιας και ο αλγόριθμος θα βρει ενδεχομένως και άλλες υποψήφιες λέξεις π.χ. "μηλο" => "μιλώ" (2 μονάδες απόστασης) και ούτω καθεξής, οπότε από εκεί και πέρα η αντιστροφή περιπλέκεται.
Σε κάθε περίπτωση, πρέπει να εξετάσεις παραμέτρους όπως η ανάγκη και το πλαίσιο του εν λόγω αλγορίθμου για να δεις αν πρέπει να μελετήσεις και να υλοποιήσεις μια παρόμοια λύση και το ανάλογο κόστος της (σε χρόνο και CPU cycles).