如何确定最常见的子串

时间:2013-02-01 04:48:42

标签: count

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

例如: 该段:

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

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

你知道吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

首先,你需要用“短语”来定义你的意思。如果您可以将其定义为匹配单词的最小数量,例如4,那么您可以浏览生成所有4-grams的文档。将它们放在从4克到地图的地图中,您可以通过这种方式快速找到匹配。

答案 1 :(得分:0)

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

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

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

分而治之方法是递归地执行以下步骤:̶̶1.计算短语频在LHS中串2.计算短语频在RHS串3.计算短语-频为̶'̶s̶p̶l̶i̶t̶'̶̶s̶t̶r̶i̶n̶g̶s̶.̶.̶即那些跨越中点̶s̶t̶r̶i̶n̶g̶.̶̶这是关闭顶部我HEA d所以有可能是不可预见的并发症我可不是思维,̶但原理是̶t̶h̶e̶r̶e̶.̶̶TBH这听起来像的问题,即来自一个算法设计教科书,可能有一个非常纯溶液某处̶a̶l̶r̶e̶a̶d̶y̶.̶

编辑:然而,最佳解决方案是构建Suffix Tree