Προς το περιεχόμενο

Αναζήτηση Ελληνικών Κειμένων


web_developer

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας,

 

Θα ήθελα μια βοήθεια για το θέμα με την αναζήτηση ελληνικών κειμένων. Θέλω σε μια ιστοσελίδα να μπορώ να αναζητώ ελληνικές λέξεις και να εμφανίζονται με τόνο, χωρίς τόνο, με κεφαλαία ή χωρίς. Στην βάση δεδομένων πρέπει να επιλέξω greek_general_ci, utf8_general_ci, utf8_unicode_ci ή υπάρχει κάποιος άλλος τρόπος ανάπτυξης;

 

Ευχαριστώ

Δημοσ.

Η κωδικοποίηση είναι άσχετη με αυτό που ζητάς. Να το πω διαφορετικά, δεν υπάρχει κωδικοποίηση στην οποία το πεζό, κεφαλαίο, τονούμενο ή μη, είναι το ίδιο code point. Αν ήταν, δεν θα μπορούσες να απεικονίσεις πεζό, κεφαλαίο, τονούμενο ή μη.

 

Αυτό που ζητάς λύνεται σε επίπεδο application. Θα πρέπει να μετατρέπεις το λήμμα που εισάγει ο χρήστης σε μία τυποποιημένη προαποφασισμένη μορφή (π.χ άτονα κεφαλαία, soundex, pattern, wildcards, κλπ) μέσω συνάρτησης Χ, και να έχεις κλειδιά στα οποία είτε να μπορείς να εφαρμόσεις συνάρτηση Υ με το ίδιο αποτέλεσμα ή να είναι ήδη διαμορφωμένα μέσω της Χ.

 

Η ακριβής άριστη λύση εξαρτάται από τη συγκεκριμένη εφαρμογή, για την οποία δεν μας λες τίποτα. Για παράδειγμα, διαφορετική προσέγγιση θα έχεις εάν είσαι σε θέση να φορτώσεις όλον τον προς έρευνα πίνακα στη μνήμη και διαφορετικά εάν είσαι υποχρεωμένος να τον προσπελάσεις μέσω SQL. Στην πρώτη περίπτωση εφαρμόζεις τη Χ στο λήμμα και στον πίνακα και καθαρίζεις. Στη δεύτερη, θα πρέπει να βρεις matching συναρτήσεις.

 

Ας πούμε για παράδειγμα ότι δουλεύεις σε PHP και MySql.

 

Στην PHP έχεις strtoupper, soundex (X)

Στη MySql έχεις upper, soundex (Υ)

 

Αν υπήρχε μια κωδικοποίηση ελληνικών στην οποία οι X,Y θα είχαν την ίδια συμπεριφορά, θα μπορούσες να λύσεις το πρόβλημά σου, εν μέρει. Εγώ, δεν έχω βρει. Συνεπώς, αφού δεν μπορείς να αλλάξεις τη βάση, θα πρέπει να κατασκευάσεις μια X η οποία να έχει την ίδια συμπεριφορά με την Y της βάσης.

 

Συνεπώς, ανακεφαλαιώνοντας:

 

Περίπτωση #1: Ο πίνακας είναι μικρός και φορτώνεται στη μνήμη

> $match = (X($keyword) == X($column))

 

Περίπτωση #2: Δημιουργείς ξεχωριστό column (indexed) το οποίο θα περιέχει τα λήμματα στη μορφή που θέλεις

> $myColumn = X($column)

> [save]

> SELECT ... WHERE myColumn = X($keyword)

 

Περίπτωση #3: Συναρτήσεις Χ,Υ με κοινή συμπεριφορά

> SELECT ... WHERE Υ(column) = X($keyword)

 

Τα παραπάνω, για απλά binary searches. Αν ζητάς fulltext, τότε το θέμα περιπλέκεται.

 

Τέλος, υπάρχει και η λύση να ενσωματώσεις το custom search της google...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...