2010-02-03 12 views
11

uso de JavaScript que necesito para eliminar eficazmente ~ 10000 palabras clave de un documento de Word ~ ​​100.000, de los cuales ~ 1000 habrá palabras clave. ¿Qué enfoque sugerirías?método eficiente para reemplazar varias palabras en el texto

¿Sería una masiva expresión regular ser práctico? ¿O debería simplemente recorrer los caracteres del documento buscando palabras clave (aburrido)?

Editar:
Buen punto: solo palabras completas, no partes. Y algunas palabras clave contienen espacios.
Estoy tratando de hacerlo todo del lado del cliente para reducir la presión en el back-end.

+1

Pregunta interesante. Por un lado, una máquina de estado escrita a mano en un lenguaje compilado se vencería con la expresión regular, pero por otro lado, el Javascript es bastante lento, por lo que necesitaría probar y comparar si el motor de expresiones regulares es más rápido debido a que se compiló . –

+0

¿Tiene que ser JavaScript o puede enviarlo al servidor para su transformación? Es difícil decir cuál será más eficiente sin algunos datos para probarlo. Si está usando Python, por ejemplo, puede segmentar los datos y enhebrar el proceso si realmente lo necesita. –

+0

¿Está obligado a reemplazar solo palabras enteras o partes de la palabra también? Por ejemplo, palabra, palabra clave, palabra-raíz, todos tienen la palabra "palabra" en ellos, ¿cómo deben ser tratados? – meouw

Respuesta

6

Utilizar una expresión regular puede ser una buena opción:

var words = ['bon', 'mad']; 
'joe bon joe mad'.replace(new RegExp('(' + words.join('|') + ')', 'g'), ''); 
// 'joe joe ' 

La expresión regular no es muy complicado con cosas como la visión hacia adelante, y el motor de expresiones regulares que está escrito en C/C++, por lo puedes esperar que sea bastante rápido. Sin embargo, compare y compare si el rendimiento se ajusta a sus necesidades.

no creo que la implementación de su propio programa de análisis será más rápido, pero puedo estar equivocado - referencia.

Envío del documento al servidor no suena muy bueno para mí. Con 100k de palabras estás mirando una carga en el rango de megabytes, y aún tienes que hacer algo con eso en el servidor y empujarlo hacia atrás.


puede que tenga que ajustar la expresión regular para hacer algo con los espacios.

+1

Es posible que desee agregar controles en las fronteras palabra ' '\\ b (' + words.join ('|') + ') \\ b'' –

+0

La expresión regular podría utilizar un poco de amor, estoy de acuerdo, pero ilustra el punto. –

0

Mi instinto me dice que para una gran cantidad de palabras clave, clasificar las palabras clave y crear una máquina de estado por carácter sería mucho más rápido que una expresión regular, ya que la máquina de estado es trivial, puede generarse automáticamente.

Cuestiones relacionadas