Digamos que he escrito una aplicación de administración de correo electrónico personalizada para la empresa para la que trabajo. Lee los correos electrónicos de la cuenta de soporte de la empresa y almacena versiones limpias y en texto sin formato de ellos en una base de datos, y hace otras cosas interesantes como asociarlas con cuentas de clientes y pedidos en el proceso. Cuando un empleado responde a un mensaje, mi programa genera un correo electrónico que se envía al cliente con una versión formateada del hilo de discusión. Si el cliente responde, la aplicación busca un número único en la línea de asunto para leer el mensaje entrante, eliminar la discusión anterior y agregarlo como un nuevo elemento en el hilo. Por ejemplo:Algoritmo para volver a envolver el texto envuelto?
This is a message from Contoso customer service. Recently, you requested customer support. Below is a summary of your request and our reply. -------------------------------------------------------------------- Contoso (Fred) on Tuesday, December 30, 2008 at 9:04 a.m. -------------------------------------------------------------------- John: I've modified your address. You can confirm my work by logging into "Your Account" on our Web site. Your order should ship out today. Thanks for shopping at Contoso. -------------------------------------------------------------------- You on Tuesday, December 30, 2008 at 8:03 a.m. -------------------------------------------------------------------- Oops, I entered my address incorrectly. Can you change it to Fred Smith 123 Main St Anytown, VA 12345 Thanks! -- Fred Smith Contoso Product Lover
En general, todo esto funciona muy bien, pero hay un área que he tipo de posponer la limpieza desde hace un tiempo, y se ocupa de ajuste de texto. Para generar el bonito formato de correo electrónico como el anterior, necesito volver a ajustar el texto que el cliente envió originalmente.
He escrito un algoritmo que hace esto (aunque mirando el código, no estoy del todo seguro de cómo funciona, podría usar alguna refactorización). Pero no puede distinguir entre una nueva línea de envolvente dura, una nueva línea de "fin de párrafo" y una nueva línea "semántica". Por ejemplo, una nueva línea de envoltura dura es una que el cliente de correo electrónico insertó dentro de un párrafo para envolver una larga línea de texto, digamos, en 79 columnas. Una nueva línea de fin de párrafo es aquella que el usuario agregó después de la última oración de un párrafo. Y una nueva línea semántica sería algo así como la etiqueta br
, como la dirección que Fred escribió arriba.
Mi algoritmo lugar sólo ve dos saltos de línea en una fila como indica un nuevo párrafo, por lo que tendría correo electrónico del cliente puede formatear algo como lo siguiente:
Oops, I entered my address incorrectly. Can you change it to Fred Smith 123 Main St Anytown, VA 12345 Thanks! -- Fred Smith Contoso Product Lover
cada vez que intento escribir una versión Eso volvería a envolver este texto como estaba previsto, básicamente toqué una pared en la que necesito saber la semántica del texto, la diferencia entre una línea nueva "hard-wrap" y un "Realmente lo quise decir como un tipo br
" nueva línea, como en la dirección del cliente. (Utilizo dos nuevas líneas seguidas para determinar cuándo comenzar un nuevo párrafo, que coincide con la forma en que la mayoría de las personas realmente escriben correos electrónicos).
Cualquiera tiene un algoritmo que puede volver a ajustar el texto como ¿destinado a? ¿O esta implementación es "lo suficientemente buena" al sopesar la complejidad de una solución dada?
Gracias.
Gracias por esta sencilla idea. Vea mi respuesta a continuación para una implementación de muestra rápida y sucia. –