2011-10-26 9 views
6

1 hanno un testo, ad esempio:funzione che evidenziare una parola e estrarre il testo nelle sue vicinanze

Anche insalata cancello malesuada con Performance morbido. Tutta per gettare le banane esterni precedentemente sterilizzato proteine ​​è stato messo. Anche malesuada insalata cancello con prestazioni morbido. leone gelsomino di calcio. gonna nutrizione televisione di calcio ed il gas tossico. Fusce dapibus, tellus ac cursus commodo, tortor Mauris Condimentum nibh, ut fermentum massa justo sedersi amet risus .

nessuno sviluppatore libero di una propaganda faretra. Sempre al gate del felis euismod Vestibulum id ligula. Vestibulum id ligula Porta felis euismod sempre. vari sit-ma Sed sorridere molto, ma non eccezionale. PakSoft cancello riservato tempi di attivazione delle prestazioni. Tutta per gettare le fissato dal banane all'aperto proteine ​​velenose.

Domani immobiliare pomodoro peperoncino carote fermentazione. Anche malesuada insalata cancello con prestazioni morbido. Presentare una grande comodità in esecuzione o giocatori di Minneapolis e termici. Mecenate ganasce talora morbide. relè qualsiasi calcio piatto morbido scuola o di un leone di calcio.

Questo testo appare come descrizione su una ricerca eseguita nel mio sito e voglio essere in grado di evidenziare una parola/string e estrarre il testo accanto ad essa.

Non sono sicuro che è il modo migliore sarà PHP (probabilmente è) o semplicemente usare una funzione di Photoshop. 1 saper evidenziare una parola in Photoshop, ma non è sicuro come estrarre il testo.

In questo esempio voglio mostrare come descrizione, perché il mio stringa viene cercata "chili di pomodoro" il seguente testo.

.... mettere un sacco di aliquet.Cras all'aperto pomodoro chili carote fermentazione. Anche porta ....

Come vedete im non solo mostra la parola evidenziata, ma anche alcuni testi prima e dopo di esso. Quale sarebbe il metodo migliore per ottenere questo risultato?

sto usando il fruscio-fuori equilibrio come motore di ricerca nel mio sito e la mia conoscenza degli CGI è nulla quindi preferisco provare la via php.

Grazie per tutto il vostro aiuto

+0

str_replace ($ word, "$ word", $ result)? – elibyy

+0

Ma questo restituirà comunque l'intero testo, voglio solo estrarne un riassunto. Forse 10 parole/100 caratteri prima e dopo la parola abbinata. – chifliiiii

risposta

5

usando un'espressione regolare in PHP (si potrebbe fare lo stesso in JavaScript, però).

$regex = '/([A-Za-z0-9.,-]+\s*){0,5}\sconsectetur purus(\s|[,.!?])(\s*[A-Za-z0-9.,-]+){0,5}/'; 
preg_match($regex, $content, $matches); 
echo $matches[0]; 

Questo corrisponde 0-5 parole costruiti utilizzando caratteri alfanumerici o uno dei .,- (perfezionare questo) seguito dalle parole che state cercando (con o senza punteggiatura alla fine), seguito da 0-5 parole . Questo non spezzerà mai una parola nel mezzo perché viene raggiunta una certa quantità di caratteri.

uscita:

Inchiesta velit aliquet.

Cras mattis consectetur purus sit amet fermentum. Etiam porta

Ora è possibile finirlo, ad es. rimuovere il \n, aggiungere ..., evidenziare consectetur purus ...

+0

Grazie mille questo ha fatto il trucco. Lascia che ti chieda come faccio se la parola appare più di una volta nel testo. Posso quindi estrarre tutti i pezzi per mostrarli insieme? – chifliiiii

+0

@chifliiiii Potresti dare un'occhiata a preg_match_all – middus

+0

Grazie ancora, lo farò – chifliiiii

1

Dipende da come si ottiene la risposta dopo aver cercato la richiesta e il modo in cui il motore di ricerca funziona.

Se sei il bersaglio è "sulla tipizzazione" di ricerca, come "Google" ha - allora sarebbe meglio per renderlo da PHP per tagliare i dati trasferiti e sprecare meno traffico.

In caso contrario, se si ottiene l'intero testo come una risposta e non vi importa circa il carico - farlo con JS usando RegExp o contare string.charAt(int).

+0

Sì, il testo è già caricato come pensavi. Puoi darmi un po 'di luce su come farlo con javascript? – chifliiiii

+0

var x = x.replace ("([\ S] {, INT_CHARS_TO_LEFT})" + word + "([\ S] {, INT_CHARS_TO_RIGHT})", "... $ 1 " + word + " $ 2. .. "); –

+0

@chifliiiii In alternativa, guarda la regex che ho postato nella mia risposta. – middus

0

Abbiamo creato una piccola libreria per farlo. Evidenzierà le parole che hai citato e ti fornirà un estratto delle frasi attorno alle tue parole di ricerca.

$lorumIpsum = "three paragraps of lrum ipsum"; 
TextSnippet::createSnippet('Lorem', $lorumIpsum); 

Ciò comporterà il seguente testo:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. ... Etiam bibendum lorem nec tempus sollicitudin. ... Sed in dapibus lorem. ... Nunc turpis ipsum, bibendum quis sodales sed, ullamcorper et lorem. Donec et metus hendrerit, interdum elit ut, dignissim dui.

La classe als supporta l'impostazione del tag html per l'evidenziazione con e l'impostazione di parole min e max per lo snippet.

Vedere swisnl/textsnippet su Github.

Problemi correlati