Visualizzazione dei risultati da 1 a 7 su 7

Discussione: preview testo

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613

    preview testo

    Qualcuno sa dirmi se esiste una funzione MySql, oppure come fare, per creare un'anteprima del testo che contenga le parole usate per fare una ricerca FULLTEXT?

    S'è capito che intendo? Devo fare una specie di motore di ricerca che fa l'highlight delle parole chiave usate per la ricerca e mostra UNA frase in cui sono state trovate.
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    up
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  3. #3
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Beh...generalmente (vedi google) ti viene mostrata una porzione di caratteri del testo, quindi la soluzione più immediata è usare substr() quando estrai i record dal database:

    Codice PHP:
    // faccio la query di ricerca ed estraggo i record trovati
    while($row mysql_fetch_array($result))
    {
        
    $contenuto substr($row['contenuto'], 0100)."...";
        print(
    $contenuto);

    ovviamente è solo un esempio. Diciamo pero' che questo produce un risultato simile a quello che vedo nella maggior parte dei motori di ricerca.


  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Grazie, però è il modo che ho usato fino ad adesso, invece io vorrei una cosa del genere...

    Supponi di avere un pezzetto di lorem ipsum

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed augue. Integer cursus nisl sed tellus. Fusce venenatis erat. Vivamus dictum, est et consequat fermentum, orci risus iaculis dolor, eu bibendum augue dolor ut mi. Integer semper viverra dui. Nam suscipit. Aliquam non nibh sit amet purus eleifend accumsan.
    E tu hai cercato "venenatis erat", con il substring($frase, 50) verrebbe fuori un

    Lorem ipsum dolor sit amet, consectetuer adipiscin...
    dove "venenatis erat" non compare. Potrei si cercare quella frase e creare un intorno ma il problema compare con le parelo tipo gli articoli e le congiunzioni! Mi sono spiegato meglio ora?
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  5. #5
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
    <?php

    function search_statement($cerca$text)
    {
        
    $c_len strlen($cerca);
        
    $pos strpos($text$cerca);
        
    $pos $pos+$c_len;
        
    $post substr($text$pos);
        
    $end strpos($post".");
        
    $post substr($post0$end+1);
        
    $pos $pos-$c_len;
        
    $pre substr($text0$pos);
        
    $pos strrpos($pre".");
        
    $pre substr($pre$pos+1);
        return 
    $pre." <font style='color:#FF0000;'>".$cerca."</font> ".$post;
    }

    $text "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed augue. Integer cursus nisl sed tellus. Fusce venenatis erat. Vivamus dictum, est et consequat fermentum, orci risus iaculis dolor, eu bibendum augue dolor ut mi. Integer semper viverra dui. Nam suscipit. Aliquam non nibh sit amet purus eleifend accumsan.";

    $cerca "venenatis erat";

    print(
    search_statement($cerca$text));

    ?>
    Se non ho capito male ora è a posto


  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    [modificato!!]
    Grazie Drugo ma era più una cosa del genere che volevo fare..
    Mi sono inventato delle regole di rilevanza delle parole che fa ride ma meglio di niente.. tanto il testo su cui fare l'highlight viene fuori da una ricerca fulltext fatta su mysql.

    Codice PHP:
    ##Supponete che sia il campo di della tabella risultato dalla ricerca, ovviamente alcune delle parole cercate esisteranno.
    $text "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut nec tortor. Nulla molestie purus quis felis. Sed condimentum, est non blandit placerat, elit diam tempor lorem, sit amet ornare orci mauris nec dui. Duis in tortor. In nibh dolor, egestas sed, rutrum nec, elementum quis, ligula. In nonummy risus vel nibh. In posuere massa commodo nibh lobortis laoreet. Duis ipsum. Ut sed ligula id dui molestie ultrices. Sed vitae dolor. Sed viverra felis facilisis neque. Vestibulum id eros. Donec non eros. Vivamus odio. Fusce dictum felis malesuada purus. Sed fringilla lorem vel sapien. Aenean rutrum facilisis nisi.";

    ## Setto i parametri e le funzioni per pulire i le parole chiave usate per la ricerca.
    $clear = array(','';''?''!''"''£''$''%''/''\\','('')''=''\'''.');
    $replace " ";
    ##Toglie gli spazi multipli
    $regex "([[:space:]]{2,})";
    $search explode(" "trim(preg_replace($regex" "str_replace($clear$replacetrim($_POST['search'])))));

    ## Faccio in modo che le parole più corte di tre lettere siano considerate meno rilevanti
    foreach($search as $key){
        if(
    strlen($key)>3)
            
    $occurrence[$key] = substr_count($text" ".$key);
            
    ## Può essere commentato!
        
    else
            
    $occurrenceShort[$key] = substr_count($text" ".$key);
    }


    ##Se sono state cercate parole più lunghe di 3 caratteri
    if(count($occurrence) != 0){
        
    ## Ordino l'array in base al numero di occorrenze in 
            ## maniera che in occurrence[0] ci sia quella più rilevante
        
    array_multisort($occurrenceSORT_DESCSORT_NUMERIC);
        
            
    ## Creo l'array di parole da evidenziare
        
    $relevant array_keys($occurrence);
            
            
    ## Trovo la prima occorrenza della paroola più rilevante e creo 
            ## l'anteprima di 400 caratteri
            ## stando però attento che 200 caratteri prima il testo esista
        
    if(strpos($text$relevant[0]) > 200)
            
    $init 200;
        else
            
    $init strpos($text$relevant[0]);
            
        
    $highlight substr($text, (strpos($text$relevant[0])-$init), 300);
        
            
    ##Creo l'highlight
        
    foreach($relevant as $key)
            
    $highlight str_replace($key'<font style="background-color:#00CCCC ">'.$key.'</font>'$highlight);
    }
    ##Creo l'anteprima dei primi 300 caratteri.
    else{
        
    $highlight substr($text0300);
    }
     
    ## Stampo il risultato
    echo "[i][...]".$highlight."[...][/i]
    "

    E' un funzionamento un pò empirico ma per quel che mi serve è efficace... se avete di meglio fatemi sapere, grazie!
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Versione finale ( per ora ).
    Non la commento, se vi serve qualche delucidazione contattatemi, ciao

    Codice PHP:
    function HighLight($occurrence$text$color="#00CCCC"){

        
    array_multisort($occurrenceSORT_DESCSORT_NUMERIC);
        
        
    $relevant array_keys($occurrence);

        if(
    strpos($text$relevant[0]) > 200)
            
    $init 200;
        else
            
    $init strpos($text$relevant[0]);
            
        
    $highlight substr($text, (strpos($text$relevant[0])-$init), 300);
        
        
        foreach(
    $relevant as $key){
        
            
    $search = array(" ".$key." ",  
                            
    " ".$key.".",  
                            
    " ".$key.","
                            
    " ".$key.";"
                            
    " ".$key.":"
                            
    " ".$key."?"
                            
    " ".$key."!"
                            
    "'".$key."'"
                            
    " ".$key."'",
                            
    "'".$key." "
                            
    "\"".$key."\"",  
                            
    " ".$key."\"",
                            
    "\"".$key." ",
                            
    "(".$key.")",
                            
    " ".$key.")");
                            
            
    $replace = array(' <font style="background-color:'.$color.' ">'.$key.'</font> ',
                             
    ' <font style="background-color:'.$color.' ">'.$key.'</font>.'
                             
    ' <font style="background-color:'.$color.' ">'.$key.'</font>,'
                             
    ' <font style="background-color:'.$color.' ">'.$key.'</font>;',
                             
    ' <font style="background-color:'.$color.' ">'.$key.'</font>:',
                             
    ' <font style="background-color:'.$color.' ">'.$key.'</font>?',
                             
    ' <font style="background-color:'.$color.' ">'.$key.'</font>!',
                             
    '\\'<font style="background-color:'.$color.' ">'.$key.'</font>\'',
                             
    ' <font style="background-color:'.$color.' ">'.$key.'</font>\'',
                             
    '\\'<font style="background-color:'.$color.' ">'.$key.'</font',
                             '"<font style="
    background-color:'.$color.' ">'.$key.'</font>"',
                             ' 
    <font style="background-color:'.$color.' ">'.$key.'</font>"',
                             '"
    <font style="background-color:'.$color.' ">'.$key.'</font',
                             '
    (<font style="background-color:'.$color.' ">'.$key.'</font>)',
                             ' 
    <font style="background-color:'.$color.' ">'.$key.'</font>)');
        
            $highlight = str_replace($search, $replace, $highlight);

            
        }
        
        return $highlight;
    }


    $text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut nec tortor. Nulla molestie purus quis felis. Sed condimentum, est non blandit placerat, elit diam tempor lorem, sit amet ornare orci mauris nec dui. Duis in tortor. In nibh dolor, egestas sed, rutrum nec, elementum quis, ligula. In nonummy risus vel nibh. In posuere massa commodo nibh lobortis laoreet. Duis ipsum. Ut sed ligula id dui molestie ultrices. Sed vitae dolor. Sed viverra felis facilisis neque. Vestibulum id eros. Donec non eros. Vivamus odio. Fusce dictum felis malesuada purus. Sed fringilla lorem vel sapien. Aenean rutrum facilisis nisi.";

    $occurrence = array();
    $occurrenceShort = array();
    $clear = array('
    ,', ';', '?', '!', '"', '£', '$', '%', '/', '\\','(', ')', '=', '\'', '.');
    $replace = " ";
    $regex = "([[:space:]]{2,})";
    $search = explode(" ", trim(preg_replace($regex, " ", str_replace($clear$replace, trim($_POST['search'])))));

    if(!empty(
    $search[0])){
        foreach(
    $search as $key){
            if(strlen(
    $key)>3)
                
    $occurrence[$key] = substr_count($text, " ".$key);
            elseif(strlen(
    $key)!=1)
                
    $occurrenceShort[$key] = substr_count($text, " ".$key);
        }
    }


    if(count(
    $occurrence) != 0){
        
        
    $highlight = HighLight($occurrence$text);
            
    }
    elseif(count(
    $occurrenceShort) != 0){
        
        
    $highlight = HighLight($occurrenceShort$text);
        
    }

    else{
        
    $highlight = substr($text, 0, 300);
    }
        
    echo "

    [i][...]".$highlight."[...][/i]

    "; 
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.