2011-10-26 14 views
6

1 tiene un texto, por ejemplo:función que destacar una palabra y extraer el texto cercano que

Incluso ensalada puerta malesuada con un rendimiento suave. Todo para sentar las plátanos al aire libre previamente esterilizado se puso proteína. Incluso la ensalada puerta malesuada con un rendimiento suave. Jasmine león que el fútbol. falda de la nutrición y la televisión de fútbol de gas venenoso. dapibus Fusce, Tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum Massa justo sit amet RISUS .

ningún desarrollador libre de una propaganda aljaba. Siempre a la puerta de la felis euismod Vestibulum ligula ID. Vestibulum Identificación ligula semper porta felis euismod. varios sentarse, pero Sed sonreír mucho, pero no genial. PakSoft Tiempos Rendimiento de disparo de puerta reservados. Total de sentar las conjunto por los plátanos al aire libre de proteínas venenosas.

Mañana raíces tomate chile zanahorias fermentación. Incluso la ensalada puerta malesuada con un rendimiento suave. Presentar un gran corredor conveniencia o jugadores Minneapolis y térmicas. Mecenas mandíbulas veces suaves. retransmitir cualquier olla de fútbol suave escuela o un león de fútbol.

Ese texto aparece como una descripción de una búsqueda realizada en mi sitio web y quiero ser capaz de destacar una palabra/cadena y extraer el texto junto a él.

no estoy seguro es la mejor manera será PHP (probablemente es) o simplemente utilizar una función de Photoshop. 1 saber cómo resaltar una palabra en Photoshop pero no sabe cómo extraer el texto.

En este ejemplo quiero mostrar como la descripción porque mi cadena se buscó "chile de tomate" el siguiente texto.

.... poner un montón de aliquet.Cras al aire libre tomate chile zanahorias de fermentación. Incluso puerta ....

Como se puede ver im no sólo muestra la palabra resaltada pero también algunos textos antes y después de ella. ¿Cuál sería el mejor método para lograr esto?

estoy usando el silbido-fuera de balance como motor de búsqueda en mi sitio web y mi knoledge de CGI es nula por lo que prefiero probar la forma en php.

Gracias por toda su ayuda

+0

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

+0

Pero eso aún devolverá el texto completo, solo quiero extraer un resumen del mismo. Tal vez 10 palabras/100 caracteres antes y después de la palabra coincidente. – chifliiiii

Respuesta

5

usando una expresión regular en PHP (que podría hacer lo mismo en JavaScript, aunque).

$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]; 

Esto coincide con 0-5 palabras construyen utilizando caracteres alfanuméricos o una de .,- (afinar este), seguido de las palabras que usted está buscando (con o sin puntuacion al final), seguido de 0-5 palabras . Esto nunca dividirá una palabra en el medio porque se alcanza una cierta cantidad de caracteres.

Salida:

posuere velita aliquet.

Cras mattis consectetur purus sit amet fermentum. Etiam porta

Ahora puedes ajustar esto, p. eliminar el \n, agregar ..., resaltar consectetur purus ...

+0

Muchas gracias, este fue el truco. Déjame preguntarte cómo hago si la palabra aparece más de una vez en el texto. ¿Puedo extraer todas las piezas para mostrarlas juntas? – chifliiiii

+0

@chifliiiii Es posible que desee ver preg_match_all – middus

+0

Gracias de nuevo, voy a – chifliiiii

1

Depende de cómo se obtiene la respuesta después de buscar la solicitud y la forma en que funciona el motor de búsqueda.

Si usted es el objetivo "en la tipificación" de búsqueda, como "Google" tiene - a continuación, que sería mejor para que sea por PHP para cortar los datos transferidos y desperdiciar menos tráfico.

De lo contrario, si se obtiene la totalidad del texto como una respuesta y no les importa acerca de la carga - hacerlo con JS usando RegExp o contar string.charAt(int).

+0

Sí, el texto ya está cargado como pensabas. ¿Me puede dar alguna luz sobre cómo hacerlo con javascript? – chifliiiii

+0

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

+0

@chifliiiii Alternativamente, mira en la expresión regular que publiqué en mi respuesta. – middus

0

Creamos una pequeña biblioteca para hacer esto. Resaltará las palabras que mencione y le dará un resumen de las oraciones alrededor de sus palabras de consulta.

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

Esto resultará en el siguiente texto:

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

La clase als admite el ajuste de la etiqueta html para resaltar y establecer las palabras mín. Y máx. Para el fragmento.

Ver swisnl/textsnippet en Github.

Cuestiones relacionadas