3

我的系统收到一条字符串消息。发件人在我的收据之前应用了自动换行。假设发送系统的自动换行算法每行的最大字符数是已知的,是否可以在保留有意义的(用户插入的)换行符的同时正确展开文本?

例如,这里有一些文本。在示例中,我们将让 a*表示一个有意义的、用户插入的换行符,a¬表示一个自动换行算法(系统)插入的换行符。

输入

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed in elit¬
vitae rutrum. Mauris in fringilla nulla, id rutrum augue.*
Sed non venenatis diam. Nam porta diam eget ante tincidunt ornare. Nulla¬
iaculis auctor. Pellentesque nec diam id quam gravida sollicitudin. Donec¬
dictum libero vitae.*
*
Venenatis eleifend vestibulum ante ipsum primis in faucibus orci luctus et*
*
Ultrices posuere cubilia Curae; Quisque vitae tempus odio.

最终,我想做的是“展开”文本,同时保留用户插入的有意义的换行符。

预期产出

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed in elit vitae rutrum. Mauris in fringilla nulla, id rutrum augue.*
Sed non venenatis diam. Nam porta diam eget ante tincidunt ornare. Nulla iaculis auctor. Pellentesque nec diam id quam gravida sollicitudin. Donec dictum libero vitae.*
*
Venenatis eleifend vestibulum ante ipsum primis in faucibus orci luctus et*
*
Ultrices posuere cubilia Curae; Quisque vitae tempus odio.

如您所见,展开算法的首要任务是将每个换行符分类为有意义的或系统插入的。通过检查当前行的字符数加上下一行第一个单词的字符数,我可以非常接近。然而,这并不完美,因为它会将句子中的换行符分类Venenatis为系统插入:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed in elit vitae rutrum. Mauris in fringilla nulla, id rutrum augue.*
Sed non venenatis diam. Nam porta diam eget ante tincidunt ornare. Nulla iaculis auctor. Pellentesque nec diam id quam gravida sollicitudin. Donec dictum libero vitae.*
*
Venenatis eleifend vestibulum ante ipsum primis in faucibus orci luctus et*
Ultrices posuere cubilia Curae; Quisque vitae tempus odio.

感谢您的任何见解,皮特

4

3 回答 3

2

当自动换行和硬回车换行符编码相同时,我认为不能可靠地解决一般问题。你可以做一个近似:

  • 在强制换行之前发生的换行(即,下一个单词将适合该行)绝对是一个硬中断。(这包括将空行计为硬中断。)
  • 否则,如果该行以似乎是段落终止符的方式结束,那么它更有可能是一个硬中断。

第二个条件的棘手部分是计算谓词“似乎是段落终止符”。最低要求是它以句尾标点符号序列(“.”、“!”、“.)”等)结尾。其他要求可能是候选硬中断不拆分平衡的标点符号对(括号、成对的引号等)。(一个推论,至少在英语中,是一个序列:

开引号,文本,句子终止符,开引号,文本

几乎可以肯定是一个艰难的休息。)

这一切显然是特定于语言的。它还假设文本本身没有错别字(不平衡的引号等)。

即使那样,您也可能会得到许多误报。不过,我没有看到任何简单的方法来改进它。

于 2013-08-06T03:50:20.093 回答
1

如果获取一个没有换行符的文件,只需模式“xxxxx ...”并在系统插入换行符后在系统中运行它以产生带有换行符的输出。如果我将该输出视为新输入并再次通过系统运行它,它将不需要添加任何新的换行符,并且输出将与输入相同。

所以我有两个不同的输入(有和没有换行符)映射到同一个输出。因此,没有绝对正确的方法可以确定哪个输入被自动换行以产生任何给定的输出,因为多个输入可以映射到同一个输出。

为了更进一步,我认为您需要对来自用户的输入文件的真实外观进行一些描述,这样您就可以拒绝这样的理论,即用户实际上恰好放入了所有必要的换行符,因此系统实际上不需要完全添加任何换行符。

于 2013-08-06T03:59:10.353 回答
0

我做了这样的事情作为 OCR 的后续操作。很容易识别暗示预期换行符的短线。棘手的部分是捕获段落的最后一行在故意换行之前一直跑到边缘的情况。我最终获得了启发式方法,帮助我确定下一行何时可能是新段落的开始。在小说中,这包括以引用或大写字母开头的内容。它并不完美,我不得不阅读并纠正错误。在发现问题并改进我的规则之前,我并没有走多远。从长远来看,它确实节省了我的时间,但它远非自动化。

于 2013-08-06T04:08:41.707 回答