search αναζητηση για τα πρωτα 4 γραμματα απο καθε λεξη

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Nemesis_Elite
Δημοσιεύσεις: 348
Εγγραφή: 14 Μαρ 2009 22:51
Τοποθεσία: athens

search αναζητηση για τα πρωτα 4 γραμματα απο καθε λεξη

Δημοσίευση από Nemesis_Elite » 25 Νοέμ 2014 00:31

εχω κανει ενα αρχειο που κανει αναζητηση σε ολα τα αρχεια σε φακελους και υποφακελους και μου δινει το link. κανει καλη δουλεια απλα θελω να το βελτιωσω λιγο.

σκιζω το κεφαλι πως θα μπορουσα να κανω το εξης:
search $string = "Αθανασιος Γεωργιου Κλοκοζας";
και να μου δωσει ολα τα αποτελεσματα οχι απο την ακριβη φραση αλλα
results
"Αθανfdgfh Γεωρhhrf Κλοκsdgh";
"Αθαν5ygsh Γεωρjjt5f Κλοκ6hsgf";
"Αθαν75hd Γεωρ44tg Κλοκ34tggh";
να κανει match και να ψαχνει μονο τα πρωτα γραμματα...
δυσκολο για μενα ψαχνω καποια βοηθεια

μηπως να το κανει αναποδα δεν ειναι αναγκη τα πρωτα τα 4 γραμματα, αλλα να κοβει με το substr ενα γραμμα απο το τελος της καθε λεξης και καθε φορα να ψαχνει, και να μου δινει τα αποτελεσματα...πφφφ

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

search αναζητηση για τα πρωτα 4 γραμματα απο καθε λεξη

Δημοσίευση από giannis17 » 25 Νοέμ 2014 12:02

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

πχ αν το έφτιαχνα για μένα θα έφτιαχνα ως εξής:

κατ'αρχάς ένα class με τα substitutes (ελληνικά με τόνους/χωρίς, και μετά όλα μαζί αντιστοίχηση με greeklish)+strtolower οπότε κάθε λήμμα να το μεταφράζει σε μια ουδέτερη unicode οντότητα ανεξάρτητα πως έχει γραφτεί (μπορείς να βάλεις εξαίρεση αν το search string περικλείεται σε quotes να το προσπερνάει αυτό το βήμα).

μετά αν αποτελείται το λήμμα από πολλές λέξεις (χωρισμένες με κενό ή παύλα) να τις κάνει tokenize και να τις διαχειρίζεται σαν ξεχωριστά λήμματα, γιατί μπορεί να είναι ανάποδα γραμμένες από ότι ψάχνει ο χρήστης ή πολύ απλά να έδωσε μόνο μία από τις λέξεις σαν search string

και τέλος κάθε λήμμα να το συγκρίνει με το ουδετεροποιημένο search string και να το βαθμολογεί σε μια κλίμακα του 5 (ανάλογα με το πόσα γράμματα ταιριάζουν). Ότι έχει βαθμό 5 το δίνει σαν αποτέλεσμα, ότι έχει 3-4 το βάζει από κάτω με το γνωστό κείμενο "μήπως εννούσατε..."

από εκεί και πέρα. αποφάσισε ακριβώς πως θες να δουλεύει το δικό σου και δείξε μας τον κώδικα για να σε βοηθήσουμε να το συμπληρώσεις.
"There is only one problem with common sense; it’s not very common."
– Milt Bryce

Άβαταρ μέλους
Nemesis_Elite
Δημοσιεύσεις: 348
Εγγραφή: 14 Μαρ 2009 22:51
Τοποθεσία: athens

search αναζητηση για τα πρωτα 4 γραμματα απο καθε λεξη

Δημοσίευση από Nemesis_Elite » 25 Νοέμ 2014 21:53

ευχαριστώ για την απάντηση. δεν έχω σούπερ γνώσεις, προσπαθώ με τα βασικά που ξέρω να κάνω κάτι.
Λοιπον εδώ είναι το scriptaki μου που ψάχνει recursive search τσουκου τσουκου σε ολους τους φακελους/υποφακελους τα αρχεια πχ pdf και δίνει το real path link πισω σε UTF-8.

---> κάνει replace σε ολα τα γράμματα τα ελληνικά με τόνους και πολυτονικά
(γιατι το κοινό της σελίδας ειναι Ψάλτες και γράφει στο πολυτονικό)
---> κάνει replace kai lowercase και το search και το filename και δίνει τα αποτελέσματα πρωτα στην ακριβή φράση και μετα αν εχει πιο πολλές λέξεις ξεχωριστά για την κάθε λεξη.

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

Κώδικας: Επιλογή όλων

<?php

	$search = $_POST&#91;'search'&#93;;
	if &#40;@get_magic_quotes_gpc&#40;&#41;&#41;
		&#123;
		$search = stripslashes&#40;$search&#41;;
		&#125;		
	$search = mb_strtolower&#40;$search, 'UTF-8'&#41;;	
	if &#40;empty&#40;$search&#41;&#41; // αν ειναι κενο, στοπ
		&#123;	
		echo "<p style='color&#58; rgb&#40;192,0,0&#41;;'>παρακαλώ εισάγετε όρο προς αναζήτηση</p>"; 
		&#125;
	else &#123;  // αν δεν ειναι κενο το αρχικό $search
	
	$replace = &#91;
    '&lt;' => '', '&gt;' => '', ''' => '', '&amp;' => '',
    '&quot;' => '', 'Ά' => 'Α', 'Έ' => 'Ε', 'Ή' => 'Η', 'Ί' => 'Ι', 'Ό' => 'Ο',
    'Ύ' => 'Υ', 'Ώ' => 'Ω', 'ά' => 'α', 'έ' => 'ε', 'ή' => 'η', 'ί' => 'ι',
    'ό' => 'ο', 'ύ' => 'υ', 'ώ' => 'ω', 'ϊ' => 'ι', 'ΐ' => 'ι', 'ϋ' => 'υ', 
	'ΰ' => 'υ', '&#7936;' => 'α', '&#7937;' => 'α', '&#7938;' => 'α', '&#7939;' => 'α', '&#7940;' => 'α', '&#7941;' => 'α', '&#7942;' => 'α', '&#7943;' => 'α', '&#7944;' => 'Α', '&#7945;' => 'Α', '&#7946;' => 'Α', '&#7947;' => 'Α', '&#7948;' => 'Α', '&#7949;' => 'Α', '&#7950;' => 'Α', '&#7951;' => 'Α', '&#7952;' => 'ε', '&#7953;' => 'ε', '&#7954;' => 'ε', '&#7955;' => 'ε', '&#7956;' => 'ε', '&#7957;' => 'ε', '&#7960;' => 'Ε', '&#7961;' => 'Ε', '&#7962;' => 'Ε', '&#7963;' => 'Ε', '&#7964;' => 'Ε', '&#7965;' => 'Ε', '&#7968;' => 'η', '&#7969;' => 'η', '&#7970;' => 'η', '&#7971;' => 'η', '&#7972;' => 'η', '&#7973;' => 'η', '&#7974;' => 'η', '&#7975;' => 'η', '&#7976;' => 'Η', '&#7977;' => 'Η', '&#7978;' => 'Η', '&#7979;' => 'Η', '&#7980;' => 'Η', '&#7981;' => 'Η', '&#7982;' => 'Η', '&#7983;' => 'Η', '&#7984;' => 'ι', '&#7985;' => 'ι', '&#7986;' => 'ι', '&#7987;' => 'ι', '&#7988;' => 'ι', '&#7989;' => 'ι', '&#7990;' => 'ι', '&#7991;' => 'ι', '&#7992;' => 'Ι', '&#7993;' => 'Ι', '&#7994;' => 'Ι', '&#7995;' => 'Ι', '&#7996;' => 'Ι', '&#7997;' => 'Ι', '&#7998;' => 'Ι', '&#7999;' => 'Ι', '&#8000;' => 'ο', '&#8001;' => 'ο', '&#8002;' => 'ο', '&#8003;' => 'ο', '&#8004;' => 'ο', '&#8005;' => 'ο', '&#8008;' => 'Ο', '&#8009;' => 'Ο', '&#8010;' => 'Ο', '&#8011;' => 'Ο', '&#8012;' => 'Ο', '&#8013;' => 'Ο', '&#8016;' => 'υ', '&#8017;' => 'υ', '&#8018;' => 'υ', '&#8019;' => 'υ', '&#8020;' => 'υ', '&#8021;' => 'υ', '&#8022;' => 'υ', '&#8023;' => 'υ', '&#8025;' => 'Υ', '&#8027;' => 'Υ', '&#8029;' => 'Υ', '&#8031;' => 'Υ', '&#8032;' => 'ω', '&#8033;' => 'ω', '&#8034;' => 'ω', '&#8035;' => 'ω', '&#8036;' => 'ω', '&#8037;' => 'ω', '&#8038;' => 'ω', '&#8039;' => 'ω', '&#8040;' => 'Ω', '&#8041;' => 'Ω', '&#8042;' => 'Ω', '&#8043;' => 'Ω', '&#8044;' => 'Ω', '&#8045;' => 'Ω', '&#8046;' => 'Ω', '&#8047;' => 'Ω', '&#8048;' => 'α', '&#8050;' => 'ε', '&#8052;' => 'η', '&#8054;' => 'ι', '&#8056;' => 'ο', '&#8058;' => 'υ', '&#8060;' => 'ω', '&#8064;' => 'α', '&#8065;' => 'α', '&#8066;' => 'α', '&#8067;' => 'α', '&#8068;' => 'α', '&#8069;' => 'α', '&#8070;' => 'α', '&#8071;' => 'α', '&#8072;' => 'Α', '&#8073;' => 'Α', '&#8074;' => 'Α', '&#8075;' => 'Α', '&#8076;' => 'Α', '&#8077;' => 'Α', '&#8078;' => 'Α', '&#8079;' => 'Α', '&#8080;' => 'η', '&#8081;' => 'η', '&#8082;' => 'η', '&#8083;' => 'η', '&#8084;' => 'η', '&#8085;' => 'η', '&#8086;' => 'η', '&#8087;' => 'η', '&#8088;' => 'Η', '&#8089;' => 'Η', '&#8090;' => 'Η', '&#8091;' => 'Η', '&#8092;' => 'Η', '&#8093;' => 'Η', '&#8094;' => 'Η', '&#8095;' => 'Η', '&#8096;' => 'ω', '&#8097;' => 'ω', '&#8098;' => 'ω', '&#8099;' => 'ω', '&#8100;' => 'ω', '&#8101;' => 'ω', '&#8102;' => 'ω', '&#8103;' => 'ω', '&#8104;' => 'Ω', '&#8105;' => 'Ω', '&#8106;' => 'Ω', '&#8107;' => 'Ω', '&#8108;' => 'Ω', '&#8109;' => 'Ω', '&#8110;' => 'Ω', '&#8111;' => 'Ω', '&#8114;' => 'α', '&#8115;' => 'α', '&#8116;' => 'α', '&#8118;' => 'α', '&#8119;' => 'α', '&#8122;' => 'Α', '&#8124;' => 'Α', '&#8130;' => 'η', '&#8131;' => 'η', '&#8132;' => 'η', '&#8134;' => 'η', '&#8135;' => 'η', '&#8136;' => 'Ε', '&#8138;' => 'Η', '&#8140;' => 'Η', '&#8146;' => 'ι', '&#8150;' => 'ι', '&#8151;' => 'ι', '&#8154;' => 'Ι', '&#8162;' => 'υ', '&#8164;' => 'ρ', '&#8165;' => 'ρ', '&#8166;' => 'υ', '&#8167;' => 'υ', '&#8170;' => 'Υ', '&#8172;' => 'Ρ', '&#8178;' => 'ω', '&#8179;' => 'ω', '&#8180;' => 'ω', '&#8182;' => 'ω', '&#8183;' => 'ω', '&#8184;' => 'Ο', '&#8186;' => 'Ω', '&#8188;' => 'Ω'
 
&#93;;
	
	
// ΨΑΞΕ ΜΟΝΟ ΓΙΑ PDF
if &#40;isset&#40;$_POST&#91;'pdf'&#93;&#41;&#41;&#123; //ΑΝ ΕΙΝΑΙ ΤΣΕΚΑΡΙΣΜΕΝΟ ΤΟ PDF ψαφε στο φακελο pdf
echo "<div class='tab-content' id='tab-2'>";

if&#40;isset&#40;$_POST&#91;'cmdsearch'&#93;&#41;&#41;
&#123;
$search = $_POST&#91;'search'&#93;;
if &#40;@get_magic_quotes_gpc&#40;&#41;&#41;
&#123;
$search = stripslashes&#40;$search&#41;;
&#125;

$it = new RecursiveDirectoryIterator&#40;"pdf"&#41;;
$allowed=array&#40;"pdf","PDF"&#41;;

///////////////////////////ΑΝΑΖΗΤΗΣΗ ΠΡΩΤΑ ΓΙΑ ΑΡΚΙΒΗ ΦΡΑΣΗ//////////////////////////////////////
echo "<div style='width&#58;600px; margin-left&#58; 0;'>Κριτήριον &#7936;ναζητήσεως&#58; <span style='color&#58; rgb&#40;192,0,0&#41;;'>";
echo $search;
echo  "</span></div>";
echo "<div style='width&#58;600px; margin-left&#58; 0;'>&#7944;ποτελέσματα &#7936;ναζητήσεως &#40;&#7940;νοιγμα &#7936;ρχείων σ&#8050; νέο παράθυρο&#41;</div>";

echo "<div style='background-color&#58;rgb&#40;255, 255, 224&#41;; border&#58;solid; border-width&#58;1px; border-color&#58;#333; margin-top&#58; 2px;' class='phrases'>";
$search = mb_strtolower&#40;$search, 'UTF-8'&#41;;
$search = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $search&#41;;  

foreach&#40;new RecursiveIteratorIterator&#40;$it&#41; as $file&#41; 
&#123;
	//$file = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;  
	$file2=str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;
    if &#40;false !== stripos&#40;mb_strtolower&#40;$file2, 'UTF-8'&#41;, $search&#41;&#41;
	
&#123;
 
echo "<a style='padding&#58;10px 10px 5px 5px; text-decoration&#58;none; line-height&#58;15px;' class='smamal' target='_blank' href='http&#58;//www.domain.gr/files/";
echo $file;
echo "'>";
echo "...";
echo $file;
echo "</a>";
echo "<br />";
&#125;
&#125;
echo "</div>";
///////////////////////ΤΕΛΟΣ. ΤΩΡΑ ΚΑΝΕ EXPLODE " " ΚΑΙ ΨΑΞΕ ΤΙΣ ΛΕΞΕΙΣ ΧΩΡΙΣΤΑ///////////////////////////////

	$search = mb_strtolower&#40;$search, 'UTF-8'&#41;;
	$words = explode&#40;" ", $search&#41;;
	$search0 = $words&#91;0&#93;;
	$search1 = $words&#91;1&#93;;
	$search2 = $words&#91;2&#93;;
	//$search0;
	echo "<p></p>";
	echo "<hr>";
	echo "<p></p>";
	echo "<div>";
	$it = new RecursiveDirectoryIterator&#40;"pdf"&#41;;
	$allowed=array&#40;"jpg","JPG","png","PNG","gif","GIF","mp3","MP3","mp4","MP4","pdf","PDF"&#41;;

	echo "<div style='width&#58;600px; margin-left&#58; 0;'>Συναφή Αποτελέσματα&#58; <span style='color&#58; rgb&#40;192,0,0&#41;;'>";
	echo $search0;
	echo  "</span></div>";
	$search0 = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $search0&#41;;  
	foreach&#40;new RecursiveIteratorIterator&#40;$it&#41; as $file&#41; 
	&#123;
	//$file = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;  
	$file2=str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;
    if &#40;false !== stripos&#40;mb_strtolower&#40;$file2, 'UTF-8'&#41;, $search0&#41;&#41;
	
	&#123;
 
	echo "<a style='padding&#58;10px 10px 5px 5px; text-decoration&#58;none; line-height&#58;15px;' class='smamal' target='_blank' 	href='http&#58;//www.domain.gr/files/";
	echo $file;
	echo "'>";
	echo "...";
	echo $file;
	echo "</a>";
	echo "<br />";
	&#125;
	&#125;
	echo "</div>";
	
	//$search1;
	echo "<p></p>";
	echo "<hr>";
	echo "<p></p>";
	echo "<div>";
	$it = new RecursiveDirectoryIterator&#40;"pdf"&#41;;
	$allowed=array&#40;"jpg","JPG","png","PNG","gif","GIF","mp3","MP3","mp4","MP4","pdf","PDF"&#41;;

	echo "<div style='width&#58;600px; margin-left&#58; 0;'>Συναφή Αποτελέσματα&#58; <span style='color&#58; rgb&#40;192,0,0&#41;;'>";
	echo $search1;
	echo  "</span></div>";
	$search1 = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $search1&#41;;  
	foreach&#40;new RecursiveIteratorIterator&#40;$it&#41; as $file&#41; 
	&#123;
	//$file = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;  
	$file2=str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;
    if &#40;false !== stripos&#40;mb_strtolower&#40;$file2, 'UTF-8'&#41;, $search1&#41;&#41;
	
	&#123;
 
	echo "<a style='padding&#58;10px 10px 5px 5px; text-decoration&#58;none; line-height&#58;15px;' class='smamal' target='_blank' 	href='http&#58;//www.domain.gr/files/";
	echo $file;
	echo "'>";
	echo "...";
	echo $file;
	echo "</a>";
	echo "<br />";
	&#125;
	&#125;
	echo "</div>";
	
	if &#40;empty&#40;$search2&#41;&#41; /* αν δεν υπαρχει 3 λεξη στοπ*/
	&#123;		 
	&#125;
	else &#123;  /* αν υπαρχει 3 λεξη προχωρα στο else */
	
	//$search2;
	echo "<p></p>";
	echo "<hr>";
	echo "<p></p>";
	echo "<div>";
	$it = new RecursiveDirectoryIterator&#40;"pdf"&#41;;
	$allowed=array&#40;"jpg","JPG","png","PNG","gif","GIF","mp3","MP3","mp4","MP4","pdf","PDF"&#41;;

	echo "<div style='width&#58;600px; margin-left&#58; 0;'>Συναφή Αποτελέσματα&#58; <span style='color&#58; rgb&#40;192,0,0&#41;;'>";
	echo $search2;
	echo  "</span></div>";
	$search2 = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $search2&#41;;  
	foreach&#40;new RecursiveIteratorIterator&#40;$it&#41; as $file&#41; 
	&#123;
	//$file = str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;  
	$file2=str_replace&#40;array_keys&#40;$replace&#41;, $replace, $file&#41;;
    if &#40;false !== stripos&#40;mb_strtolower&#40;$file2, 'UTF-8'&#41;, $search2&#41;&#41;
	
	&#123;
 
	echo "<a style='padding&#58;10px 10px 5px 5px; text-decoration&#58;none; line-height&#58;15px;' class='smamal' target='_blank' 	href='http&#58;//www.domain.gr/files/";
	echo $file;
	echo "'>";
	echo "...";
	echo $file;
	echo "</a>";
	echo "<br />";
	&#125;
	&#125;
	echo "</div>";
	&#125; /* τελοσ αν υπαρχει 3 λεξη προχωρα στο else */
&#125;
else
&#123;
echo "<p></p>";
&#125;
echo "</div>";
&#125;
		&#125; // τελος αν δεν ειναι κενο το αρχικό $search
		
?>

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

search αναζητηση για τα πρωτα 4 γραμματα απο καθε λεξη

Δημοσίευση από alou » 26 Νοέμ 2014 16:10

Nemesis, αυτό

Κώδικας: Επιλογή όλων

'&lt;' => '', '&gt;' => '', ''' => '',
αποκλείεται να μη βγάζει σφάλμα, μένει single quote ανοιχτό.

κάντο τουλάχιστον έτσι

Κώδικας: Επιλογή όλων

'&lt;' => '', '&gt;' => '', "'" => '',
Πες τι αποτέλεσμα έχεις και βλέπουμε και το υπόλοιπο, είναι λίγο προχειρα γρμμένο και καλό θα ήταν να ξεχωρίσεις κάποιες λειτουργίες για να καταλάβεις τι συμβαίνει.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

search αναζητηση για τα πρωτα 4 γραμματα απο καθε λεξη

Δημοσίευση από Rapid-eraser » 29 Δεκ 2014 14:43

Αυτό που περιγράφεις λέγετε αλγόριθμος Stemmer .
(Μάλιστα ο giannis17 έκανε μία πολύ ωραία ανάλυση για το πως γίνεται το indexing σε ένα τέτοιο database)

Γενικώς να έχεις υπόψιν σου πως τέτοια indexings δεν γίνονται realtime αλλά είναι προετοιμασμένα και το search γίνεται με πέρασμα του search term από τον ίδιο stemmer αλγόριθμο ( και καταλήγεις σε fulltext search)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης