假设我为公司编写了一款定制的电子邮件管理应用程序。它从公司的支持账户中读取电子邮件并将其清理成纯文本版本存储在数据库中,并在此过程中与客户账户和订单相关联。当员工回复邮件时,我的程序会生成一封电子邮件,其中包含讨论线程的格式化版本,发送给客户。如果客户回复,则该应用程序会查找主题行中的唯一编号以读取传入的消息,剥离先前的讨论,并将其作为新项目添加到线程中。
通常情况下,这一切都很好,但有一个地方我一直没有处理好,那就是文本换行。为了生成像上面那样漂亮的电子邮件格式,我需要重新包装客户最初发送的文本。
我已经编写了一个算法来实现这一点(尽管看着代码,我不确定它如何工作 - 它可能需要重构)。但是它不能区分硬换行符、"段落结束"换行符和"语义"换行符。例如,硬换行符是指电子邮件客户端在段落内插入的换行符,以便在79列处换行长行文本。段落结束换行符是用户在段落的最后一句话之后添加的换行符。而语义换行符则是像Fred上面输入的地址一样的
相反,我的算法只会将两个连续的换行符视为表示新段落的信号,因此客户的电子邮件将被格式化成以下内容:
每当我尝试编写一个可以按预期重新换行的版本时,我基本上会遇到难题,因为我需要知道文本的语义,硬换行和“我真的是想像
有没有算法可以按预期重新换行文本?或者在权衡任何给定解决方案的复杂性时,这种实现是否“足够好”?
谢谢。
通常情况下,这一切都很好,但有一个地方我一直没有处理好,那就是文本换行。为了生成像上面那样漂亮的电子邮件格式,我需要重新包装客户最初发送的文本。
我已经编写了一个算法来实现这一点(尽管看着代码,我不确定它如何工作 - 它可能需要重构)。但是它不能区分硬换行符、"段落结束"换行符和"语义"换行符。例如,硬换行符是指电子邮件客户端在段落内插入的换行符,以便在79列处换行长行文本。段落结束换行符是用户在段落的最后一句话之后添加的换行符。而语义换行符则是像Fred上面输入的地址一样的
br
标记。相反,我的算法只会将两个连续的换行符视为表示新段落的信号,因此客户的电子邮件将被格式化成以下内容:
每当我尝试编写一个可以按预期重新换行的版本时,我基本上会遇到难题,因为我需要知道文本的语义,硬换行和“我真的是想像
br
一样”的换行符之间的区别,例如客户地址中的换行符。(我使用两个连续的换行符来确定何时开始新段落,这与大多数人实际输入电子邮件的方式相吻合。)有没有算法可以按预期重新换行文本?或者在权衡任何给定解决方案的复杂性时,这种实现是否“足够好”?
谢谢。