migf1 Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 του nspyroy μου φανηκε πιο καλη λυση γιατι θα βρισκει ανεξαρτητα απο τονους και τις διαφορες στα ονοματα. Δηλαδη θα βρρει και το δημητρης και το δημητριος.. η αληθεια ειναι οτι η Double Metaphone δεν καταλαβα ακριβως τι κανει και πως λειτουργει. και αν δεν το καταλαβω δεν θα μπορεσω να τη χρησιμοποιησω.. Πρέπει να μας πεις τι ακριβώς θέλεις να κάνεις. Αν θα διαβάζεις ονόματα από την είσοδο για να απαντάς πότε γιορτάζουν, τότε προσωπικά θεωρώ πιο στοιχειώδες να απαντάει σωστά το πρόγραμμα (π.χ. να μη σου λέει πως ο Χάρης γιορτάζει μαζί με την Χαρίκλεια ή την Εύχαρις) παρά να κάνει auto-spell corrections. Μπορείς βέβαια να το βάλεις να τα κάνει και τα 2, αλλά σε αυτή την περίπτωση η λύση του Double Metaphone φαντάζει η ιδανική (και πιο εύκολη).
Moderators Spect~ Δημοσ. 28 Μαΐου 2012 Μέλος Moderators Δημοσ. 28 Μαΐου 2012 nspyroy το διαβασα το αρθρο αυτο απο πριν απλα δεν ειχα καταλαβει τι κανει ακριβως. το προγραμμα θα εχει και τη δυνατοτητα αναζητησης και την επιλογη εμφανισεις τον επαφων που γιορταζουν(θα κοιταει στον καταλογο και θα λεει ποιες απο τις επαφες του χρηστη γιορταζουν) θα προσπαθησω να καταλαβω ακριβως πως λειτουργει η Double Metaphone και να δουλεψω με αυτη
nspyrou Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 nspyroy το διαβασα το αρθρο αυτο απο πριν απλα δεν ειχα καταλαβει τι κανει ακριβως. το προγραμμα θα εχει και τη δυνατοτητα αναζητησης και την επιλογη εμφανισεις τον επαφων που γιορταζουν(θα κοιταει στον καταλογο και θα λεει ποιες απο τις επαφες του χρηστη γιορταζουν) θα προσπαθησω να καταλαβω ακριβως πως λειτουργει η Double Metaphone και να δουλεψω με αυτη Θα δεις, είναι εύκολη η φιλοσοφία του Αν συναντήσεις πρόβλημα, εδώ είμαστε να τα πούμε όλα
migf1 Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 ... θα προσπαθησω να καταλαβω ακριβως πως λειτουργει η Double Metaphone και να δουλεψω με αυτη Αυτό που κάνει, όπως κατάλαβα διαβάζοντας τη Wikipedia, είναι για κάθε λέξη/όνομα να σου δημιουργεί 2 codes (strings): ένα primary-code κι ένα secondary-code. Ονόματα που μοιάζουν μεταξύ τους θα έχουν ίδιο κάποιο από τα primary & secondary codes. Το ποια ακριβώς αναλογία απεικονίζουν τα primary και τα secondary codes δυο ονομάτων δεν το διευκρινίζει το άρθρο, αλλά υποθέτω θα αναφέρεται στην τεκμηρίωση του αλγόριθμου. Υποθέτω επίσης πως η αναλογία των 2 ονομάτων ενδεχομένως να απεικονίζεται και στην ομοιότητα (ίσως και σειρά) των χαρακτήρων που απαρτίζουν τα primary & secondary codes τους. Όπως και να 'χει, πρέπει πρώτα να αποφασίσεις πως θα λειτουργεί το πρόγραμμά σας. Γιατί για παράδειγμα, αν δεν διαβάζει ονόματα από τον χρήστη, τότε δεν χρειάζεται καν το Double Metaphone αν το θεωρείς πολύπλοκο, βαρύ ή οτιδήποτε. Σε γενικές γραμμές, αν θες να κάνει και auto-spell correcting στην είσοδο του χρήστη, τότε θα πρέπει να προσαρμόσεις το πρόγραμμά σου ώστε σε κάθε ανορθόγραφη είσοδο να παρουσιάζει μια λίστα από πιθανά intended ονόματα (κάτι σαν auto-complete ένα πράγμα). Αυτό δεν θα είναι κατά ανάγκη το ίδιο hashing που θα κάνεις για να βρεις πότε γιορτάζει το τελικό όνομα. Εγώ όταν είπα πως είναι εξίσου εύκολο το έτοιμο Java Class του Double Metaphone δεν εννοούσα να το χρησιμοποιήσεις για να κάνεις auto-correct λαναθασμένη είσοδο, αλλά για να κάνεις nomalize της είσοδο με την βάση σου χωρίς να χρειαστεί να γράψεις κώδικα normalization μόνος σου. Να συγκρίνεις δηλαδή ΚΑΙ το primary ΚΑΙ το secondary code της εισόδου με το primary ΚΑΙ το secondary code του κάθε ονόματος στη βάση (να απαιτείς δλδ να είναι ακριβώς ίδια).
pantpesl2 Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Καλησπέρα φίλε, για δοκίμασε και το παρακάτω: > import java.text.Normalizer; import java.util.regex.Pattern; class Main { public static void main (String[] args) { String originalStr = "Παντελής"; String nfdNormalizedString = Normalizer.normalize(originalStr, Normalizer.Form.NFD); Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+"); String convertedStr = pattern.matcher(nfdNormalizedString).replaceAll(""); System.out.println("Original:\t" + originalStr); System.out.println("Converted:\t" + convertedStr); } } Έξοδος: > Original: Παντελής Converted: Παντελης
Aztec Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Προσωπικά θα έκανα το input κεφαλαία ή μικρά άτονα και θα εψαχνα με αυτό. Το xml θα το προσάρμοζα αντίστοιχα και τέλειωσε
migf1 Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Προσωπικά θα έκανα το input κεφαλαία ή μικρά άτονα και θα εψαχνα με αυτό. Το xml θα το προσάρμοζα αντίστοιχα και τέλειωσε Yeap, ομοίως κι εγώ (είναι αυτό που πρότεινα εξαρχής). Το θεωρώ το πιο straight-forward, εύχρηστο και αποτελεσματικό. Δεν χρειάζεται καν να πειραχτεί η βάση (το xml)... αφού μπορεί κι αυτή να γίνεται normalize με τον ίδιο τρόπο τη στιγμή της σύγκρισης με την είσοδο... εννοώ on-the-fly για το κάθε όνομα της βάσης κατά τη σύγκριση (εκτός αν υπάρχουν speed-critical θέματα, οπότε σε αυτή την περίπτωση προφανώς εξυπηρετεί να είναι ήδη normalized η βάση). Btw, για τα Ελληνικά είναι πιο βολικό να γίνονται normilized σε άτονα κεφαλαία, παρά σε άτονα μικρά, για περιπτώσεις όπως των σ και ς.
Aztec Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Yeap, ομοίως κι εγώ (είναι αυτό που πρότεινα εξαρχής). Το θεωρώ το πιο straight-forward, εύχρηστο και αποτελεσματικό. Δεν χρειάζεται καν να πειραχτεί η βάση (το xml)... αφού μπορεί κι αυτή να γίνεται normalize με τον ίδιο τρόπο τη στιγμή της σύγκρισης με την είσοδο... εννοώ on-the-fly για το κάθε όνομα της βάσης κατά τη σύγκριση (εκτός αν υπάρχουν speed-critical θέματα, οπότε σε αυτή την περίπτωση προφανώς εξυπηρετεί να είναι ήδη normalized η βάση). Btw, για τα Ελληνικά είναι πιο βολικό να γίνονται normilized σε άτονα κεφαλαία, παρά σε άτονα μικρά, για περιπτώσεις όπως των σ και ς. Η λογική που είπα για το xml είναι απλά να έχει πχ name_id, name_description τα οποία αντίστοιχα θα έχουν τιμές θανος, Θάνος. Το δευτερο θα είναι και αυτό που θα δείχνει και θα πηγαίνει καρφί η αναζήτηση. Για τα Ελληνικά έχεις δίκιο απλά εφόσον είναι κλειδί εσωτερικό θα μπορούσα να χρησιμοποιήσω ακόμα και αριθμούς. Για μένα είναι απλά κλειδί χωρίς νόημα. Φυσικά δεν διαφωνώ με κανέναν καθώς όλα είναι εφικτά. Κάπου κερδίζεις κάπου χάνεις
migf1 Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 ... Η λογική που είπα για το xml είναι απλά να έχει πχ name_id, name_description τα οποία αντίστοιχα θα έχουν τιμές θανος, Θάνος. Το δευτερο θα είναι και αυτό που θα δείχνει και θα πηγαίνει καρφί η αναζήτηση. Αν πω ότι την κατάλαβα τη 2 πρόταση, θα πω ψέμματα Έτσι κι αλλιώς δεν θα πρέπει να κάνεις normalize την είσοδο against του "θανος" (δηλαδή του κλειδιού; ). Αν σου δώσει "ΘΑΝΟΣ" στην είσοδο πως θα κάνεις normalize το τελικό Σ της εισόδου στο τελικό ς του κλειδιού. Ή για να φέρω άλλο παράδειγμα, αν το κλειδί σου είναι "θανασης" και η είσοδος "ΘΑΝΑΣΗΣ" πως θα κάνεις normalize τις 2 εμφανίσεις του Σ της εισόδου στα αντίστοιχα σ και ς του κλειδιού; ΥΓ. Αν τα κλειδιά είναι αριθμοί, τότε αλλάζει τελείως η λογική οπότε μιλάμε για τελείως διαφορετική υλοποίηση (κατά την άποψή μου λιγότερο βατή, αφού θα χρειαστείς πιο πολύπλοκο κώδικα για να αντιστοιχείς τις εισόδους με τα κλειδιά της βάσης).
Aztec Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Αν πω ότι την κατάλαβα τη 2 πρόταση, θα πω ψέμματα Έτσι κι αλλιώς δεν θα πρέπει να κάνεις normalize την είσοδο against του "θανος" (δηλαδή του κλειδιού; ). Αν σου δώσει "ΘΑΝΟΣ" στην είσοδο πως θα κάνεις normalize το τελικό Σ της εισόδου στο τελικό ς του κλειδιού. Ή για να φέρω άλλο παράδειγμα, αν το κλειδί σου είναι "θανασης" και η είσοδος "ΘΑΝΑΣΗΣ" πως θα κάνεις normalize τις 2 εμφανίσεις του Σ της εισόδου στα αντίστοιχα σ και ς του κλειδιού; ΥΓ. Αν τα κλειδιά είναι αριθμοί, τότε αλλάζει τελείως η λογική οπότε μιλάμε για τελείως διαφορετική υλοποίηση (κατά την άποψή μου λιγότερο βατή, αφού θα χρειαστείς πιο πολύπλοκο κώδικα για να αντιστοιχείς τις εισόδους με τα κλειδιά της βάσης). Όντως δεν ήμουν σαφής. Εννοώ ότι μπορεί να κατεβάσει όλα τα Σ ως σ και να μην ασχοληθεί καθόλου με ς. Για αυτό είπα οτι δεν χρειάζεται να είναι ορθό το κλειδί. Δεν με νοιάζει αν θα κατεβάσει το ΘΑΝΟΣ ως θανος μπορεί να το κατεβάσει ως θανοσ. Με τον ίδιο τρόπο έτσι και αλλιώς με ένα μικρό κώδικα θα φτιάξει τα κλειδιά των ονομάτων. Δεν διαφωνώ όμως ότι καλύτερα να τα κάνει κεφαλαία.
migf1 Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Α, οκ (μα είπα κι εγώ ) Πάντως αν δεν υπάρχει θέμα με τη ταχύτητα στο μηχανάκι, η non-normalized βάση εκτός του ότι κατεβάζει τον όγκο της κατά το ήμισυ (εννοώ δεν χρειάζεται να έχει "description field") έχει και το πλεονέκτημα ότι μπορεί το πρόγραμμα να κάνει output στην οθόνη τα κλειδιά όμορφα & τονισμένα, απευθείας όπως τα διαβάζει από τη βάση.
Aztec Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Α, οκ (μα είπα κι εγώ ) Πάντως αν δεν υπάρχει θέμα με τη ταχύτητα στο μηχανάκι, η non-normalized βάση εκτός του ότι κατεβάζει τον όγκο της κατά το ήμισυ (εννοώ δεν χρειάζεται να έχει "description field") έχει και το πλεονέκτημα ότι μπορεί το πρόγραμμα να κάνει output στην οθόνη τα κλειδιά όμορφα & τονισμένα, απευθείας όπως τα διαβάζει από τη βάση. Συμφωνούμε απόλυτα. Μου αρέσει καλύτερα.
Directx Δημοσ. 28 Μαΐου 2012 Δημοσ. 28 Μαΐου 2012 Προσωπικά για το θέμα των τόνων (αλλά και των διαλυτικών με ή δίχως τόνο όσο και των κεφαλαίων με τόνο) τους αφαιρώ κατά την διαδικασία της σύγκρισης (τοπικά στην ρουτίνα ελέγχου), ενώ σχετικά με το ς παραδοσιακά το μετατρέπω σε Σ (σ). Τώρα σε ορισμένα framework όλα αυτά είναι έτοιμα αρκεί να τους ζητήσεις να μην συμπεριλάβουν accents κατά την σύγκριση των αλφαριθμητικών.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα