cercare parole

Ciao a tutti,

devo confrontare le parole contenute in un array con quelle contenute in un testo. E se una parola è uguale la stampo e mi fermo.

esiste una funzione in php che permette di fare un confronti??

 :bye:

inviato 9 anni fa
stellina
X 0 X

se non ho capito male vuoi sapere se in un testo è presente almeno una delle parole conservate in un array, giusto?

In tal caso non credo esista una funzione ad hoc, ma poi ciclare sull'array e usare per ciascun elemento stripos() === false

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

il succo del discorso è vedere se in un testo c'è almeno una delle parole presente in un array e stampare la parola trovata.

Array('rosso','verde','giallo','blu','bianco');

$testo= "il prato di casa mia è verde."

dovrebbe stamparmi verde.

con stripos() so so se l'ha trovata o no la parola.

Per di più se le parole all'interno dell'array fossero 15.000 sarebbe fattibile la ricerca??

 :bye:

risposto 9 anni fa
stellina
X 0 X

dovresti fare 15.000 esecuzioni di stripos... l'operazione ha un costo ma non conosco alternative.

 :bye:

I testi sono molto lunghi?

risposto 9 anni fa
Gianni Tomasicchio
modificato 9 anni fa
X 0 X

no i testi non solo lunghisismi e visto che de vo cercare le località pensavo che per risparmiare un pò potrei cercare delle parole tipo provincia o localita o regione (ecc)  e verificare se ci sono nel testo e prendere la parola che segue ....

che dici?

risposto 9 anni fa
stellina
X 0 X

ora ricordo... stai realizzando lo spider! Perché non provi a mettere tutte le parole del testo in un array e poi a confrontare questo array con quello delle parole da cercare? Ad esempio facendo la differenza degli array.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

potrebbe essere un'idea  ::)

se il testo è salvato su una variabile ($testo),

esiste una funzione che fa in modo di memorizzare ogni singola parola nell'array o dovrei usare $pieces = explode(" ", $testo); ?

 :bye:

risposto 9 anni fa
stellina
X 0 X

Ma explode fa esattamete questo! Magari dovrai togliere prima la punteggiatura e altri caratteri strani, poi potrai usare explode

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

puoi tentare l'utilizzo di espressioni regolari

$espressione_stringa = "^.(Parola1|Parola2|Parola3).*";
if(ereg($espressione_stringa,strtoupper($testo_in_cui_cercare))){
 print("Testo trovato");
}

praticamente controlla se una delle parole è pressente nel testo

Se non ho capito male ti stai cimentando nella realizzazione di uno spider, sicuramente ti sarà di grande aiuto studiare le espressioni regolari: http://it.php.net/manual/it/ref.regex.php. Se le impari bene (e non sono difficili) sicuramente ti semplificano tantissimo le operazioni di confronto su testi.

Sono sicuramente la soluzione più veloce che tu possa usare, con una sola riga di codice puoi analizzare molte condizioni.

p.s: buona fortuna per lo spider un paio di anni fa mi ero cimentato anch'io in questa impresa ma per causa di tempo ho dovuto abbandonare il progetto.

risposto 9 anni fa
Fabiopsy
X 0 X

per cercare una parola in una stringa non bisogna usare le espressioni regolari ma strpos, per ragioni di performance. Inoltre se si vogliono usare le espressioni regolari bisogna usare le pcre e non le ereg, sempre per ragioni di performance, tant'è che le ereg non ci saranno in PHP 6.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

strpos restituisce il punto in cui si trova la parola cercata, per visualizzare la parola successiva come si può procedere?

 :bye:

risposto 9 anni fa
stellina
X 0 X

strpos restituisce il punto in cui si trova la parola cercata, per visualizzare la parola successiva come si può procedere?

 :bye:

postresti tagliare la stringa in quella posizione (con substr()) e poi con explode dividerla in tante parole e prendere la prima. Ma forse è meglio un'espressione regolare per fare tutto con un solo comando.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

forse dovrei aprire un altro post ma al momento sono giunta ad una soluzione parziale.

Ho un testo con che contiene il nome di una localita.

Ho una tabella in un db con i nomi di tutte le localita e confronto ogni localita con il testo.

function strpos2($haystack, $needle, $nth = 1)

{

    

    $haystack = ' '.$haystack;

    if (!strpos($haystack, $needle))

        return false;

    $offset=0;

    for($i = 1; $i < $nth; $i++)

        $offset = strpos($haystack, $needle, $offset) + 1;

    return strpos($haystack, $needle, $offset) - 1;

}

$string = 'abcdef abcdef dfgdsf gsdrwer ef gdsf gdsf gdsfgsdfgdsf gdsfdas fdsf df asdf  san benedetto del tronto fdgs dfg dsf gdsf gdfgfdsgdgs f re tretret ';

$newstring=strtolower($string);

$sql="SELECT nome FROM localita";

$result=mysql_query ($sql);

 while ($data=mysql_fetch_array($result))

 {

    $nome=$data['nome'];

   $localita = strtolower($nome);

   

   $pos = strpos2($newstring, $localita, 1);

   if ($pos !='')//se ho trovato la localita

   {

      echo "$pos $localita<br>";

   }

   

   else echo " ";

   

 

 }

l'unico problema è questo :

estrapolare il risultato corretto tra quelli ottenuti

in questo caso infatti ho ottenuto questi risultati:

83 ne

134 re

96 ro

77 san benedetto

77 san benedetto

77 san benedetto del tronto

137 tret

ma la riga estatta è san benedetto del tronto....

non riesco a focalizzare gli altri controlli che potrei fare per ottenere il risultato corretto

 ???

 :bye:

risposto 9 anni fa
stellina
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda