¿Cuál es la mejor forma de extraer frases clave de un bloque de texto? Estoy escribiendo una herramienta para hacer la extracción de palabras clave: something like this. He encontrado algunas bibliotecas para Python y Perl para extraer n-grams, pero estoy escribiendo esto en Node, así que necesito una solución de JavaScript. Si no hay ninguna biblioteca de JavaScript existente, ¿alguien podría explicar cómo hacer esto para que yo solo pueda escribirlo?Extraer frases clave del texto (de 1 a 4 palabras)
Respuesta
me gusta la idea, así que he implementó: Ver abajo (comentarios descriptivos se incluyen).
Vista previa en: http://fiddle.jshell.net/WsKMx/
/*@author Rob W, created on 16-17 September 2011, on request for Stackoverflow (http://stackoverflow.com/q/7085454/938089)
* Modified on 17 juli 2012, fixed IE bug by replacing [,] with [null]
* This script will calculate words. For the simplicity and efficiency,
* there's only one loop through a block of text.
* A 100% accuracy requires much more computing power, which is usually unnecessary
**/
var text = "A quick brown fox jumps over the lazy old bartender who said 'Hi!' as a response to the visitor who presumably assaulted the maid's brother, because he didn't pay his debts in time. In time in time does really mean in time. Too late is too early? Nonsense! 'Too late is too early' does not make any sense.";
var atLeast = 2; // Show results with at least .. occurrences
var numWords = 5; // Show statistics for one to .. words
var ignoreCase = true; // Case-sensitivity
var REallowedChars = /[^a-zA-Z'\-]+/g;
// RE pattern to select valid characters. Invalid characters are replaced with a whitespace
var i, j, k, textlen, len, s;
// Prepare key hash
var keys = [null]; //"keys[0] = null", a word boundary with length zero is empty
var results = [];
numWords++; //for human logic, we start counting at 1 instead of 0
for (i=1; i<=numWords; i++) {
keys.push({});
}
// Remove all irrelevant characters
text = text.replace(REallowedChars, " ").replace(/^\s+/,"").replace(/\s+$/,"");
// Create a hash
if (ignoreCase) text = text.toLowerCase();
text = text.split(/\s+/);
for (i=0, textlen=text.length; i<textlen; i++) {
s = text[i];
keys[1][s] = (keys[1][s] || 0) + 1;
for (j=2; j<=numWords; j++) {
if(i+j <= textlen) {
s += " " + text[i+j-1];
keys[j][s] = (keys[j][s] || 0) + 1;
} else break;
}
}
// Prepares results for advanced analysis
for (var k=1; k<=numWords; k++) {
results[k] = [];
var key = keys[k];
for (var i in key) {
if(key[i] >= atLeast) results[k].push({"word":i, "count":key[i]});
}
}
// Result parsing
var outputHTML = []; // Buffer data. This data is used to create a table using `.innerHTML`
var f_sortAscending = function(x,y) {return y.count - x.count;};
for (k=1; k<numWords; k++) {
results[k].sort(f_sortAscending);//sorts results
// Customize your output. For example:
var words = results[k];
if (words.length) outputHTML.push('<td colSpan="3" class="num-words-header">'+k+' word'+(k==1?"":"s")+'</td>');
for (i=0,len=words.length; i<len; i++) {
//Characters have been validated. No fear for XSS
outputHTML.push("<td>" + words[i].word + "</td><td>" +
words[i].count + "</td><td>" +
Math.round(words[i].count/textlen*10000)/100 + "%</td>");
// textlen defined at the top
// The relative occurence has a precision of 2 digits.
}
}
outputHTML = '<table id="wordAnalysis"><thead><tr>' +
'<td>Phrase</td><td>Count</td><td>Relativity</td></tr>' +
'</thead><tbody><tr>' +outputHTML.join("</tr><tr>")+
"</tr></tbody></table>";
document.getElementById("RobW-sample").innerHTML = outputHTML;
/*
CSS:
#wordAnalysis td{padding:1px 3px 1px 5px}
.num-words-header{font-weight:bold;border-top:1px solid #000}
HTML:
<div id="#RobW-sample"></div>
*/
No sé tal biblioteca en JavaScript, pero la lógica es texto
- dividida en una matriz
- continuación, clasificar y contar
alternativamente
- dividida en una matriz
- crear una matriz secundaria
- que atraviesa cada elemento de la primera matriz
- comprobación de si existe elemento actual en la matriz secundaria
- si no existe empuje como clave
- demás aumentar el valor de un elemento que tiene una clave = al punto buscado. HTH
Ivo Stoykov
ésto no hacer lo que no im querer b/c que no extrae múltiples N-gramas de palabras ... Así funciona para palabras sueltas solamente –
mira aquí -> http: //valuetype.wordpress .com/2011/08/24/keyword-density-with-javascript/esta es una muestra con un conteo de palabras, pero podría ampliarse fácilmente por 3 o 4 palabras – i100
- 1. Algoritmos para detectar frases y palabras clave del texto
- 2. Identificación de palabras y frases importantes en el texto
- 3. Extraer palabras de un archivo de texto
- 4. Algoritmo para buscar palabras clave y frases clave en una cadena
- 5. Extraer JSON del texto
- 6. Cómo extraer palabras clave de un bloque de texto en Haskell
- 7. Extraer texto del PDF
- 8. Buscar las primeras 4 palabras y las últimas 4 palabras de la base de datos después de palabras clave particulares?
- 9. ¿Extraer meta palabras clave de la página web?
- 10. Algoritmos o bibliotecas para análisis textual, específicamente: palabras dominantes, frases en texto y colección de texto
- 11. Ruby: Extraer palabras de Cadena
- 12. Cómo extraer URL del texto
- 13. ¿Qué es una forma simple de generar palabras clave a partir de un texto?
- 14. ¿Cómo agrupar las palabras clave del motor de búsqueda?
- 15. Cómo extraer frases comunes/significativas de una serie de entradas de texto
- 16. cadenas de análisis: extracción de palabras y frases [JavaScript]
- 17. Eliminar la línea contiene palabras/frases específicas con PHP
- 18. Cómo encontrar frases comunes en un gran cuerpo de texto
- 19. ¿Cómo clasificar el texto según los grupos de palabras clave?
- 20. ¿Cómo puedo obtener las frases más populares de mucho texto?
- 21. Lucene: frases de varias palabras como términos de búsqueda
- 22. Biblioteca para extraer palabras (voz) del flujo de audio?
- 23. Extracción de términos con relevancia contextual (frases nominales) del texto en un proyecto .NET
- 24. Extrae referentes al marcado/Palabras clave de bloque de texto
- 25. Unir [una palabra por fila] a filas de frases con [varias palabras por fila]
- 26. argumentos de palabras clave Clojure
- 27. C# Extraer texto del PDF utilizando PdfSharp
- 28. javaScript palabras clave reservadas
- 29. ¿Cómo extraer texto del documento PDF?
- 30. extraer texto del pdf en Javascript
He actualizado el código para corregir un error en IE8. Este error se informó por correo electrónico, he pegado el correo y mi respuesta (que ofrece la solución e incluye una explicación detallada) aquí: http://pastebin.com/7Edx88Gp. –
hermosa, varios años después todavía está ayudando a la gente –