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

php search 'εύελικτο'? (να καταλαβαίνει τις πτώσεις, ενικό, πλυθηντικό, κεφαλαία-μικρά κλπ)


heisenberg

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

Ακόμα κι αυτό μόνο στη θεωρία δουλεύει.

 

Όπως ξαναείπα νωρίτερα: ας υποθέσουμε ότι υπάρχει και το έχει κανείς στα χέρια του. Να τον δω να γράφει PHP/SQL για να πετύχει το επιθυμητό αποτέλεσμα... απλά δεν γίνεται έτσι.

 

Παραθέτω μια υλοποίηση καθαρά σε PHP. ΦΥΣΙΚΑ και είναι θεωρία μόνο, καθώς, όπως είπα και πριν, ακόμα και να είχες το λεξικό έστω και σε αυτή τη μορφή, το κόστος σε ταχύτητα θα ήταν τόσο μεγάλο που θα πρέπει να σκεφτείς μια όχι και τόσο εύστοχη αναζήτηση:

 

 

 

>

<?php

$word = "άνθρωπος";

$DICTIONARY = array(
 "αυτοκίνητο" => array(
   "αυτοκίνητο",
   "αυτοκίνητου",
   "αυτοκίνητα",
   "αυτοκινήτων",
   "αυτοκίνητα"
 ),
 "άνθρωπος" => array(
   "άνθρωπος",
   "ανθρώπου",
   "άνθρωπο",
   "άνθρωπε",
   "άνθρωποι",
   "ανθρώπων",
   "ανθρώπους"
 )
);

function getWords ($array, $value) {

 if ( is_array( $array ) && count( $array ) > 0 ):
   foreach ( array_keys( $array ) as $key ):

   if ( in_array($value, $array[$key]) ):
     return ( $array[$key] );
   endif;

   endforeach;
 endif;

}

print_r ( getWords( $DICTIONARY, $word ) );

?>

 

 

 

ΥΓ> Αν δεν είναι overkill, πιθανώς να σε ενδιέφερε να δεις κάποιον proximity algorithm, όπου με την κατάλληλη τιμή να πετύχαινες μια ισορροπημένη λύση «σκουπιδιών»/ευστοχίας.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Παιδιά η ένστασή μου είναι ότι στη γενική περίπτωση θα πρέπει το search να γίνεται με "query" πάνω σε κάποιο ειδικά διαμορφωμένο data structure, και γι' αυτό το λόγο δε νομίζω πως μπορεί να υλοποιηθεί κάτι παρουσιάσιμο. Για παράδειγμα:

 

* Ο _tasos είπε πως μπορεί κανείς να κρατάει ένα "normalized" αντίγραφο των κειμένων και να ψάχνει πάνω σ' αυτό -- πολύ σωστά, όντως η οποιαδήποτε αποδεκτή λύση θα βρίσκεται προς αυτή την κατεύθυνση. Μη ξεχνάμε όμως ότι search δεν είναι μόνο το να γράψεις WHERE contents LIKE '%foo%' OR contents LIKE '%bar%' -- αν δεν υπάρχει και σωστό ranking των αποτελεσμάτων το search είναι σχεδόν άχρηστο.

* Το παπί ανέφερε regex -- αυτό δεν εφαρμόζεται σε full text search με την καμία. Θα έπρεπε πρώτα να έχεις υλοποίηση stemming, και αν την έχεις τότε η προσέγγιση του _tasos είναι πολύ καλύτερη.

* Τέλος ο thanocaster έδωσε μια υλοποίηση σε καθαρή PHP. Το πρόβλημα μ' αυτήν είναι ότι αν τη βάλεις να τρέξει πάνω σε ένα corpus μεγαλύτερο από μέγεθος "δοκιμάζω να δω αν τρέχει", δε θα τελειώσει ποτέ. Επίσης το πρόβλημα του ranking παραμένει.

 

Στο παρελθόν υλοποίησα δύο φορές κάτι παρόμοιο σε PHP. Την πρώτη φορά οι τεχνικές ήταν απλές (στο επίπεδο αυτών που έχω αναφέρει). Το αποτέλεσμα ήταν πολύ φτωχό σε σχέση μ' αυτά τα οποία έχει μάθει κανείς να περιμένει σήμερα όταν γράφει σε ένα πεδίο search (καλώς η κακώς σήμερα ο χρήστης σου έχει μάθει στο Google οπότε αυτό είναι το μέτρο σύγκρισης, και αν δεν φτάνεις ούτε το 1% τα σχόλια περιττεύουν) και χρειάστηκε αρκετό κόπο. Τη δεύτερη φορά ήταν βασισμένο σε πιο σοβαρά μαθηματικά (τεχνικές vector space model) και το αποτέλεσμα κατά την άποψή μου βλεπόταν, αλλά επίσης κόστισε μήνες χρόνου και χιλιάδες ευρώ. Και φυσικά όλα αυτά έχοντας σα δεδομένες όλες τις ιστορίες με stemming, suffix trees και άλλα τέτοια σατανιστικά.

 

Το συμπέρασμα που θέλω να καταλήξω είναι αν δεν ξέρεις που πας να μπλέξεις, μην πλησιάζεις καν. Αυτό το πρόβλημα λύνεται διαβάζοντας papers, όχι στο πόδι.

 

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

 

Τέλος αν νομίζεις ότι θα σε βοηθήσει, κάπου πρέπει να έχω ένα text file με πολλές χιλιάδες λέξεις που είχα χρησιμοποιήσει σε άλλο project. Στείλε μου ΠΜ αν σε ενδιαφέρι να το ξεθάψω και να στο στείλω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ναι το σκέφτηκα για google search, αλλά το δωρεάν βγάζει διαφημίσεις.

και δε θέλω διαφημίσεις.

 

και ήθελα να αποφύγω τα 100$ κάθε χρόνο για το επι πληρωμή, αν υπήρχε κάτι έτοιμο.

 

όμως δεν είναι τόσο τα λεφτά, όσο το ότι το google search θα βρίσκει σε όλο το website, ενώ εγώ θέλω από συγκεκριμένο πίνακα της βάσης (ένα μέρος του website).

 

Άστα να πάνε... Η Google μου έστειλε μια επιταγή των 75€ ευρώ δωρεάν διαφήμισης και μόλις λήξει, αν κάνω registration στην υπηρεσία Adwords, θα πληρώνω για κάθε click και ένα ποσόν που θα το ορίσω εγώ!!!!

Ο φίλος που είχε 40000 click την ημέρα στην σελίδα του πόσα θα πληρώνει τον μήνα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν κατάλαβα,

τι σχέση έχει η διαφήμιση και το adwords με το search που θέλω να κάνω;

Δεν κατάλαβα πως σχετίζονται ...

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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