Greek stemmer drupal module - κάνοντας την αναζήτηση στα ελληνικά πιο αποτελεσματική

Το πρόβλημα

Ένα από τα βασικότερα προβλήματα που ανακύπτουν στις μηχανές αναζήτησης που χρησιμοποιούν οι περισσότερες ιστοσελίδες είναι ότι όταν κάποιος ψάχνει μια λέξη όπως π.χ. "ποδήλατα", η μηχανή θα του φέρει μόνο τις σελίδες που περιλαμβάνουν τη λέξη "ποδήλατα" ακριβώς γραμμένη έτσι. Αν δηλαδή η σελίδα περιλαμβάνει τη λέξη "ποδήλατο", δεν θα εμφανιστεί στα αποτελέσματα, γιατί για αυτήν πρόκειται για μια διαφορετική λέξη! Το αποτέλεσμα του παραπάνω γεγονότος είναι ότι οι χρήστες δεν παίρνουν εύκολα από τις μηχανές αναζήτησης που περιλαμβάνονται πια σε πολλές ιστοσελίδες τα αποτελέσματα που επιθυμούν και αυτό έχει σαν επακόλουθο είτε: 1. να μεταβαίνουν σε άλλες ιστοσελίδες πιστεύοντας ότι αυτό που ψάχνουν δεν υπάρχει στη σελίδα που βρίσκονται, 2. είτε να παύουν να εμπιστεύονται τις μηχανές αναζήτησης που βρίσκονται μέσα στα site, 3. είτε να καταλήγουν τελικά να χρησιμοποιούν το Google το οποίο μπορεί και φέρνει τις σελίδες που περιλαμβάνουν τη λέξη "ποδήλατο" ακόμα κι όταν ψάχνουμε για "ποδήλατα". Το παραπάνω πρόβλημα παρατηρείται σε όλες τις γλώσσες γίνεται όμως πιο έντονο στα ελληνικά όπου οι καταλήξεις και τα παράγωγα κάθε λέξης είναι πολλά.

Η λύση

Την απάντηση στο παραπάνω πρόβλημα έρχεται να δώσει το "stemming", το οποίο η Wikipedia περιγράφει ως τη διαδικασία αφαίρεσης από τις λέξεις των παραγώγων και καταλήξεων και μείωσής τους στη ρίζα τους (stem). Με τη διαδικασία αυτή η μηχανή αναζήτησης βρίσκει ότι η ρίζα της λέξης "ποδήλατο" είναι "ποδήλατ" και αποθηκεύει αυτή στο ευρετήριό της. Αντίστοιχα, όταν ένας χρήστης κάνει αναζήτηση για "ποδήλατο", ψάχνει στο ευρετήριό της για "ποδήλατ" το οποίο το έχει ήδη αποθηκευμένο και έτσι φέρνει τη σελίδα που το περιέχει. Το αποτέλεσμα είναι ότι η σελίδα εμφανίζεται είτε όταν κάποιος ψάχνει για "ποδήλατο" είτε για "ποδήλατα". Το πρόβλημα λοιπόν λύθηκε!

Η υλοποίηση για την ελληνική γλώσσα

Τον Φεβρουάριο του 2006 ο Γιώργος Νταής μετά από 20 εβδομάδες μελέτης παρουσίασε στη Στοκχόλμη της Σουηδίας την μεταπτυχιακή διατριβή του που αφορούσε στην ανάπτυξη ενός αλγορίθμου stemming για την ελληνική γλώσσα. Με επόπτη καθηγητή τον Hercules Dalianis και βασισμένος στον αλγόριθμο Porter (ο οποίος είχε γίνει από το 1980 που παρουσιάστηκε από τον Martin Porter ο de facto αλγόριθμος για stemming της αγγλικής γλώσσας) ανέπτυξε τον αντίστοιχο αλγόριθμο ο οποίος καλύπτει με ακρίβεια πάνω από 90% τις 166 καταλήξεις της ελληνικής γλώσσας! To 2008 ο Πάνος Κυριακάκης μετέφερε τον αλγόριθμο σε PHP και το 2009 ο Βασίλης Σπηλιόπουλος ανέπτυξε ένα module το οποίο μεταφέρει τον αλγόριθμο στη μηχανή αναζήτησης του Drupal 5. Το 2009 o basos.g at gmx.net βελτίωσε τη μεταφορά σε PHP (δουλεύει εγγενώς με UTF-8) και ανέπτυξε και extensions για τη μηχανή αναζήτησης Lucene.

Drupal module

drupalΌλοι οι παραπάνω διέθεσαν την εργασία τους ανοικτή στην προγραμματιστική κοινότητα (GNU GPL). Με βάση την εργασία των παραπάνω, o Γιάννης Καράμπελας ανέπτυξε για τη netstudio τον Ιούλιο του 2011 τα αντίστοιχα module για Drupal 6 και Drupal 7 τα οποία διαθέτουμε επίσης ελεύθερα. Μπορείτε να τα κατεβάσετε και να τα χρησιμοποιήσετε στα site σας από τη σελίδα: https://www.drupal.org/project/greekstemmer.

Οδηγίες χρήσης

1. Εγκαταστήστε και ενεργοποιήστε το module. 2. Επιλέξτε Configuration > Search and Metadata > Re-index site 3. Τρέξτε το Cron όσες φορές χρειάζεται ώστε να ταξινομηθούν όλες οι σελίδες του site σας.

Demo

Μπορείτε να δείτε σε χρήση τον Greek Stemmer χρησιμοποιώντας την αναζήτηση που βρίσκεται στο site μας.

Πηγές

Wikipedia: http://en.wikipedia.org/wiki/Stemming Η διατριβή του Γιώργου Νταή σε PDF: http://people.dsv.su.se/~hercules/papers/Ntais_greek_stemmer_thesis_final.pdf 1η ανάπτυξη του Stemmer σε Javascript: http://people.dsv.su.se/~hercules/greek_stemmer.gr.html Μεταφορά του αλγορίθμου σε PHP από τον Πάνο Κυριακάκη και βελτιωμένη έκδοση από τον basos.g at gmx.net. Module για Drupal 5 από τον Βασίλη Σπηλιόπουλο και module για Drupal 6 και 7 από τη netstudio: https://www.drupal.org/project/greekstemmer

Γιάννης

Γράφει ο Γιάννης

CEO & Founder

Δημοσιεύθηκε την 03.07.2011

Σχόλια
avatar

04/07/2011 - 18:53

Αντώνης Ράτσος

Πολύ καλή δουλειά, μπράβο σας! Αν όμως κάποιος ψάξει για "πολίλατ-ο", θα του βγουν αποτελέσματα για "ποδιλάτ-ης"? Έχουν την ίδια ρίζα αλλά διαφορετική σημασία. Τι κάνει το module σε τέτοια περίπτωση?

Γιάννης

04/07/2011 - 23:04

Γιάννης

Αντώνη, αν κάποιος ψάχνει για "ποδήλατο" θα του βγουν αποτελέσματα και με τη λέξη "ποδηλάτης". Δεν μπορεί να κάνει κάτι σε αυτή την περίπτωση το συγκεκριμένο module, δε νομίζω όμως ότι είναι και τόσο άσχετο. Νομίζω καλύτερο από το να μην του βγάλει τίποτα.

avatar

27/07/2011 - 20:26

Γιάννης Αγγελάκος

Παιδιά πολύ χρήσιμο. Μπράβο!

avatar

21/09/2011 - 14:58

καυστικό λεμόνι

Μπράβο και 1000 ευχαριστώ! Μόλις ενεργοποίησα το module στο site μου και δουλεύει άψογα. Πολύ καλή δουλειά.

avatar

05/11/2011 - 16:18

παολα

πολυ καλο μπραβο!!!!!!!!!!!!!!!!

avatar

28/09/2013 - 22:21

Θανάσης

Το κυριότερο ίσως θέμα που λύνει κατά την γνώμη μου είναι πως δεν διαχωρίζει του τονισμένους από τους μη τονισμένους χαρακτήρες. "Παράδειγμα" και "Παραδειγμα". Θα εμφανιστούν τα ίδια αποτελέσματα και στις δύο περιπτώσεις. +1.

avatar

28/09/2013 - 22:38

Θανάσης

Και μία ερώτηση. Υπάρχει δυνατότητα να αξιοποιηθεί από ένα custom search index που δημιουργήθηκε μέσω του Search API module?

Γιάννης

29/09/2013 - 00:02

Γιάννης

Θανάση, το θέμα των τονισμένων-άτονων είναι ήδη λυμένο μέσω της MySQL. Όσον αφορά την ερώτησή σου σχετικά το custom search index, νομίζω πως θα δουλεύει. Αν όχι, άνοιξε ένα issue στο issue queue να το δούμε.

Σχολιάστε το άρθρο