Dar formato al texto con respecto a la puntuación

¿Cómo puedo dar formato al texto en un lenguaje natural teniendo en cuenta la puntuación? El incorporado gq comando de Vim, o herramientas de línea de comando, como fmt or por romper líneas sin tener en cuenta la puntuación. Dejame darte un ejemplo,

fmt -w 40 no da lo que quiero:

we had everything before us, we had
nothing before us, we were all going
direct to Heaven, we were all going
direct the other way

smart_formatter -w 40 daría:

we had everything before us,
we had nothing before us,
we were all going direct to Heaven,
we were all going direct the other way

Por supuesto, hay casos en los que no se encuentra ningún signo de puntuación dentro del ancho de texto dado, entonces puede recurrir al comportamiento de formato de texto estándar.

La razón por la que quiero esto es para obtener un significado diff de texto donde puedo identificar qué oración o subsentencia cambió.

preguntado el 16 de mayo de 11 a las 19:05

1 Respuestas

Aquí hay un método de trabajo no muy elegante, pero que finalmente se me ocurrió. Supongamos que un salto de línea en un signo de puntuación vale 6 caracteres. Significa que aceptaré un resultado que sea más irregular pero que contenga más líneas que terminen en un signo de puntuación si la "irregularidad" tiene menos de 6 caracteres. Por ejemplo, esto está bien ("irregularidad" son 3 caracteres).

Wait!
He said.

Esto no está bien ("irregularidad" tiene más de 6 caracteres)

Wait!
He said to them.

El método consiste en agregar 6 caracteres ficticios después de cada signo de puntuación, formatear el texto y luego eliminar los caracteres ficticios.

Aquí está el código para esto

sed -e 's/\([.?!,]\)/\1 _ _ _/g' | fmt -w 34 | sed -e 's/ _//g' -e 's/_ //g'

solía _ (espacio + guión bajo) como un par de caracteres ficticios, suponiendo que no estén contenidos en el texto. El resultado parece bastante bueno,

we had everything before us,
we had nothing before us,
we were all going direct to
Heaven, we were all going
direct the other way

Respondido 07 Jul 11, 00:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.