2

我想找到重复的句子/短语并计算它们在段落或文档中的频率。

例如:段落:

在插入选项卡上,画廊包括旨在与您的文档的整体外观相协调的项目。您可以使用这些库来插入表格、页眉、页脚、列表、封面和其他文档构建块。当您创建图片、图表或图表时,它们也会与您当前的文档外观相协调。通过从“主页”选项卡上的“快速样式”库中选择所选文本的外观,您可以轻松更改文档文本中所选文本的格式。您还可以使用“主页”选项卡上的其他控件直接设置文本格式。大多数控件提供使用当前主题的外观或使用您直接指定的格式的选择。要更改文档的整体外观,请在“页面布局”选项卡上选择新的主题元素。要更改快速样式库中可用的外观,使用更改当前快速样式集命令。主题库和快速样式库都提供重置命令,以便您始终可以将文档的外观恢复为当前模板中包含的原始外观。在“插入”选项卡上,画廊包含旨在与文档的整体外观相协调的项目。

重复的句子/短语之一是“在插入选项卡上”。它的频率是2。如何找到所有这些?

你有什么主意吗?

非常感谢!

4

2 回答 2

0

首先,您需要定义“短语”的含义。如果您可以将其定义为最小匹配词数,例如 4,那么您可以浏览生成所有4-gram的文档。将这些从 4 克到某个位置的地图放入地图中,您可以通过这种方式快速找到匹配项。

于 2013-02-01T05:21:33.997 回答
0

这听起来像是一个算法设计问题,因为它可以通过蛮力来实现,但也必须有一个很好的分而治之的解决方案。

正如@justinvf 所说,您必须首先定义最小长度才能获得任何有意义的结果,否则您最重复的短语几乎肯定会是e,因为这是最常出现的字符(无论如何都是英语)。

蛮力方法是计算最小长度 $m$ 的所有短语,方法是使用子字符串str[0:m]...[0+1:m+1]...一直到段落末尾,同时计算任何重复。然后将增量增加到 2 并重复。似乎时间复杂度类似于 $\mathcal{O} (n^{nm})$ 其中 $n$ 是段落中的字符数。

T̶h̶e̶ ̶d̶i̶v̶i̶d̶e̶ ̶a̶n̶d̶ ̶c̶o̶n̶q̶u̶e̶r̶ ̶a̶p̶p̶r̶o̶a̶c̶h̶ ̶w̶o̶u̶l̶d̶ ̶b̶e̶ ̶t̶o̶ ̶r̶e̶c̶u̶r̶s̶i̶v̶e̶l̶y̶ ̶f̶o̶l̶l̶o̶w̶ ̶t̶h̶e̶s̶e̶ ̶s̶t̶e̶p̶s̶:̶ ̶ ̶1̶.̶ ̶C̶a̶l̶c̶u̶l̶a̶t̶e̶ ̶t̶h̶e̶ ̶p̶h̶r̶a̶s̶e̶-̶f̶r̶e̶q̶u̶e̶n̶c̶e̶ ̶i̶n̶ ̶t̶h̶e̶ ̶L̶H̶S̶ ̶o̶f̶ ̶t̶h̶e̶ ̶s̶t̶r̶i̶n̶g̶ ̶2̶.̶ ̶C̶a̶l̶c̶u̶l̶a̶t̶e̶ ̶t̶h̶e̶ ̶p̶h̶r̶a̶s̶e̶-̶f̶r̶e̶q̶u̶e̶n̶c̶e̶ ̶i̶n̶ ̶t̶h̶e̶ ̶R̶H̶S̶ ̶o̶f̶ ̶t̶h̶e̶ ̶s̶t̶r̶i̶n̶g̶ ̶3̶.̶ ̶C̶a̶l̶c̶u̶l̶a̶t̶e̶ ̶t̶h̶e̶ ̶p̶h̶r̶a̶s̶e̶- ̶f̶r̶e̶q̶u̶e̶n̶c̶e̶ ̶f̶o̶r̶ ̶'̶s̶p̶l̶i̶t̶'̶ ̶s̶t̶r̶i̶n̶g̶s̶.̶.̶ ̶i̶.̶e̶.̶ ̶o̶n̶e̶s̶ ̶t̶h̶a̶t̶ ̶s̶t̶r̶a̶d̶d̶l̶e̶ ̶t̶h̶e̶ ̶m̶i̶d̶p̶o̶i̶n̶t̶ ̶o̶f̶ ̶t̶h̶e̶ ̶s̶t̶r̶i̶n̶g̶.̶ ̶ ̶T̶h̶i̶s̶ ̶i̶s̶ ̶o̶f̶f̶ ̶t̶h̶e̶ ̶t̶o̶p̶ ̶o̶f̶ ̶m̶y̶ ̶h̶e̶a̶d̶ ̶s̶o̶ ̶t̶h̶e̶r̶e̶ ̶m̶a̶y̶ ̶b̶e̶ ̶u̶n̶f̶o̶r̶s̶e̶e̶n̶ ̶c̶o̶m̶p̶l̶i̶c̶a̶t̶i̶o̶n̶s̶ ̶I̶'̶m̶ ̶n̶o̶t̶ ̶t̶h̶i̶n̶k̶i̶n̶g̶ ̶o̶f̶,̶ ̶b̶u̶t̶̶t̶h̶e̶̶p̶r̶i̶n̶c̶i̶p̶l̶e̶̶i̶s̶̶t̶h̶e̶r̶e̶。̶ ̶ ̶T̶B̶H̶ ̶t̶h̶i̶s̶ ̶s̶o̶u̶n̶d̶s̶ ̶l̶i̶k̶e̶ ̶a̶ ̶p̶r̶o̶b̶l̶e̶m̶ ̶t̶h̶a̶t̶ ̶c̶o̶m̶e̶s̶ ̶f̶r̶o̶m̶ ̶a̶n̶ ̶a̶l̶g̶o̶r̶i̶t̶h̶m̶ ̶d̶e̶s̶i̶g̶n̶ ̶t̶e̶x̶t̶b̶o̶o̶k̶ ̶a̶n̶d̶ ̶p̶r̶o̶b̶a̶b̶l̶y̶ ̶h̶a̶s̶ ̶a̶ ̶v̶e̶r̶y̶ ̶n̶e̶a̶t̶ ̶s̶o̶l̶u̶t̶i̶o̶n̶ ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶ ̶a̶l̶r̶e̶a̶d̶y̶.̶

编辑:然而,最优化的解决方案是建立一个后缀树

于 2013-02-01T07:32:20.750 回答