2011-01-28 8 views
8

yo queríamos una implementación particular, de forma que el usuario proporcione un bloque de texto como:Extrae referentes al marcado/Palabras clave de bloque de texto

"Requisitos - Conocimiento de trabajo, sobre el Medio Ambiente de la lámpara utilizando Linux, Apache 2, MySQL 5 y PHP 5, - conocimiento de la web 2.0 Normas - confortable con JSON - manos en la experiencia en el trabajo con los marcos, Zend, OOPs - Cross Browser Javascripting, jQuery etc. - conocimiento de la versión de software de control, tales como la subversión será preferible. "

Lo que quiero hacer es seleccionar automáticamente las palabras clave relevantes y crear etiquetas/palabras clave, por lo tanto, para la pieza anterior de texto, etiquetas relevantes deben ser: MySQL, PHP, JSON, jQuery, control de versiones, oop, web2 .0, javascript

¿Cómo puedo hacer esto en PHP/Javascript, etc.? Un comienzo sería realmente útil.

Respuesta

2

Esto no es fácil de hacer porque requiere algún tipo de lógica difusa. Se debe utilizar la YQL extractora Plazo Yahoo

Compruébelo usted mismo: link

+0

Gracias por el enlace, yo estoy buscando algo como esto. Intenté YQL pero de alguna manera no reconoció muchos términos. Encontré este sitio llamado Zemanta, que es bastante bueno, estoy planeando usar ambos y fusionar mis resultados. – sgomez

+0

esto es lo más increíble que he encontrado en Internet en aproximadamente 5 años más o menos ... gracias – AMB

0

Dependiendo de si desea mostrar al cliente las palabras clave/tags o si desea extraer las palabras clave/etiquetas del bloque de texto entonces mayor cálculo con ellos.

Si solo tiene que mostrarlos, entonces la manipulación del lado del cliente está bien. Si los necesita para un mayor cálculo, utilice el lado del servidor para ello.

Puedo recomendar una implementación javascript clientide si puede proporcionar más detalles. Si desea genéricamente "saber" las palabras clave a continuación, algún tipo de solución inteligente es NECESARIO

Si usted tiene una lista de palabras clave, puede utilizar regular expressions para extraer los datos

+1

Gracias por su respuesta. ¿Puedes recomendar una implementación de cliente? Lo que quiero es que, cuando un usuario llena un bloque de texto, debe extraer etiquetas relevantes de él. – sgomez

16

un método muy ingenuo es eliminar común stopwords del texto, dejándolo con palabras más significativas como 'Estándares', 'JSON', etc. Sin embargo, todavía se escuchará mucho ruido, por lo que puede considerar un servicio como OpenCalais que puede hacer un análisis bastante sofisticado de su texto .

Actualización:

bien, el enlace en mi respuesta anterior se refirió a las implementaciones, pero pidió una manera muy simple está aquí:

function stopWords($text, $stopwords) { 

    // Remove line breaks and spaces from stopwords 
    $stopwords = array_map(function($x){return trim(strtolower($x));}, $stopwords); 

    // Replace all non-word chars with comma 
    $pattern = '/[0-9\W]/'; 
    $text = preg_replace($pattern, ',', $text); 

    // Create an array from $text 
    $text_array = explode(",",$text); 

    // remove whitespace and lowercase words in $text 
    $text_array = array_map(function($x){return trim(strtolower($x));}, $text_array); 

    foreach ($text_array as $term) { 
    if (!in_array($term, $stopwords)) { 
     $keywords[] = $term; 
    } 
    }; 

    return array_filter($keywords); 
} 

$stopwords = file('stop_words.txt'); 
$text = "Requirements - Working knowledge, on LAMP Environment using Linux, Apache 2, MySQL 5 and PHP 5, - Knowledge of Web 2.0 Standards - Comfortable with JSON - Hands on Experience on working with Frameworks, Zend, OOPs - Cross Browser Javascripting, JQuery etc. - Knowledge of Version Control Software such as sub-version will be preferable."; 

print_r(stopWords($text, $stopwords)); 

Se puede ver esto, y el contenido de stop_word.txt en este Gist.

Ejecución de la anterior en su ejemplo de texto produce la siguiente matriz:

Array 
(
    [0] => requirements 
    [4] => linux 
    [6] => apache 
    [10] => mysql 
    [13] => php 
    [25] => json 
    [28] => frameworks 
    [30] => zend 
    [34] => browser 
    [35] => javascripting 
    [37] => jquery 
    [38] => etc 
    [42] => software 
    [43] => preferable 
) 

Así que, como he dicho, esto es algo ingenuo y podría usar más de optimización (además de que es lento) pero sí saque el mayor palabras clave relevantes de su texto. También necesitarías afinar las palabras stop.Capturar términos como Web 2.0 será muy difícil, así que, de nuevo, creo que sería mejor utilizar un servicio serio como OpenCalais que pueda entender un texto y devolver una lista de entidades y referencias. DocumentCloud se basa en este mismo servicio para recopilar información de los documentos.

Además, para la aplicación del lado del cliente se podría hacer más o menos lo mismo con JavaScript, y probablemente mucho más limpio (aunque podría ser lento para el cliente.)

+0

Gracias Darren. De hecho, ingenuo, pero muy exhaustivo, ¿puedes recomendar una implementación, es decir, usar preg_replace sort of thing o algún script eficiente? – sgomez

+0

¡Genial! Gracias por la implementación. – sgomez

+0

¿Responde esto a tu pregunta? –

5

Me hicieron una revisión rápida de estos esta mañana y para mi sorpresa una que funciona mejor con la frase de ensayo fue escrito en PHP

lo que parecía ser el más profesional realiza abismalmente: viewer.opencalais.com

Otros que estaban bien eran (no estoy seguro en qué idioma están escritos en)

  • www.nactem.ac.uk/software/Termine/# forma
  • www.alchemyapi.com/api/keyword/
Cuestiones relacionadas