2010-05-24 6 views
5

Tengo dos pedazos de texto. Me gustaría hacer una diferencia basada en palabras entre ellos (como cuando la utilidad unix wdiff lo hace) pero con más información en el resultado (es decir, la posición del personaje donde comienza la palabra añadida/desmarcada).¿Hay bibliotecas de Java para hacer una diferencia basada en palabras?

Necesito hacer esto en Java, por lo que una salida simple de las diferencias (como wdiff) no es adecuada para mí: me gustaría manipular objetos que representen diferencias.

+0

ver http://stackoverflow.com/questions/479654/java-library-for-free-text-diff – mdma

+0

Gracias, pero no es lo que estoy buscando: me gustaría hacer una palabra basada en diferencias, pero no simplemente tener la salida, pero ser capaz de manipular estos datos. En mi mente no es un objeto Java con estos campos: - archivo de Posición de añadir/eliminar en la primera (o segunda, por cierto) - Añadir/Eliminar - String (palabra) añadido (o eliminado) – Mycol

Respuesta

3

Hay Diff,Match,Patch - disponible en Java, y una demostración está disponible - parece hacer diferencias de palabras.

+1

Probé mucho y está basado en el carbón. Si quieres un outuput humano tienes que establecer un tiempo muy alto, el cálculo es muy lento y sin embargo no está basado en palabras (quiero decir que "house" y "wife" son diferentes solo en "hous" y "wif") – Mycol

+0

¿Viste la sección de limpieza posterior al procesamiento? Es posible que pueda agregar un postprocesador que alinee las diferencias con las palabras. ¿Es para texto en inglés? Cuando elevas el nivel a las palabras, el problema se vuelve más complejo. Incluso el simple hecho de poner el texto en palabras con precisión es un esfuerzo, y luego tiene el problema de desambiguar las diferencias (los cambios se pueden interpretar de varias maneras), lo que uno tiene sentido puede depender de su aplicación. Tratar con bloques de texto cortados y pegados en un lugar diferente es en principio una operación, pero detectar esto puede ser difícil. – mdma

+0

Si puede asignar palabras a los caracteres (por ejemplo, asegúrese de que no haya más de 64k palabras únicas). Luego puede analizar el texto usted mismo, asignar cada palabra a un carácter y ejecutar la diferenciación de caracteres sobre eso. Por supuesto, si la implementación del algoritmo Diff es tal que puede reemplazar fácilmente los tipos de datos que se comparan, entonces podrá implementar trivialmente la diferenciación de palabras, pasando objetos de palabras como entrada en lugar de caracteres. No he visto la API de Dif, así que no puedo decirlo con certeza. – mdma

Cuestiones relacionadas