![]() |
1
10
http://en.wikipedia.org/wiki/Longest_common_substring_problem 在外部链接中有到补充信息的链接,包括本文中解释的两种算法的Perl实现。 编辑添加: 基于讨论,我仍然认为最长的常见子串可能是这个问题的核心。即使在您在注释中引用的日志示例中,该集合的定义特征也是子字符串“journal”。 我首先考虑什么定义了一个集合与其他集合是分开的。这就给了您划分数据的分区,然后问题在于度量一个集合中有多少共性。如果定义特征是一个公共子串,那么最长的公共子串将是一个逻辑起点。 为了自动化集合检测的过程,一般来说,您需要一个共性的成对度量,您可以使用它来度量所有可能的对之间的“差异”。然后您需要一个算法来计算导致总体最小总差的分区。如果差分度量不是最长的常用子字符串,那就没问题了,但是您需要确定它是什么。显然,它需要一些具体的东西,你可以测量。 还要记住,差分测量的特性将取决于可用于划分的算法。例如,假设diff(x,y)给出了x和y之间的差的度量,那么如果距离的度量是diff(a,c)<=diff(a,b)+diff(b,c),那么它可能会很有用。显然,diff(a,c)应该和diff(c,a)相同。 在考虑这一点时,我也开始怀疑我们是否可以把“差异”想象成任何两条弦之间的距离,并且,通过对距离的严格定义,我们是否可以尝试某种 cluster analysis 在输入字符串上。只是一个想法。 |
![]() |
2
5
好问题!解决方案的步骤如下:
我已经在 regroup.py . 下面是一个例子:
|
![]() |
3
2
类似的事情可能会奏效。
在您给出的示例中,从根开始有两条边:“e”和“j”。然后,“J”分支将分为“jo”和“j2”。
我正在标记这个答案社区wiki。请随意延长,以便我们一起对这个问题有一个合理的答案。 |
![]() |
4
2
字符串相似性有很多种方法。我建议您看看这个开源库,它实现了许多度量,比如Levenshtein距离。 |
![]() |
5
1
您应该能够使用通用后缀树来实现这一点:在后缀树中查找来自多个源字符串的长路径。 |
![]() |
6
1
试试“FRAK”。它从一组字符串创建regex表达式。也许对它进行一些修改会对你有所帮助。 https://github.com/noprompt/frak 希望它有帮助。 |
![]() |
7
1
有许多解决方案可以解决寻找公共子串的一般情况。然而,这里的问题更为专门化。您要查找的是通用前缀,而不仅仅是子字符串。这使它简单了一点。 查找最长公共前缀的一个很好的解释可以在 http://www.geeksforgeeks.org/longest-common-prefix-set-1-word-by-word-matching/
所以我建议的“pythonese”伪代码是这样的(请参阅链接以获取
|
![]() |
8
0
对于这个特殊的字符串示例,要保持它非常简单,请考虑使用简单的单词/数字分隔。 非数字序列显然可以以大写字母(整个)开头。把所有的字符串分成一组序列后,比如
然后开始按组分组,很快就会发现前缀“wholet”对于某些组来说很常见,并且所有子组都有s作为头组,所以这些组的唯一变量是1,2。 对于J27,您可以看到J27只是叶子,但它随后以红色和绿色分支。 所以某种类型的列表,对列表,字符串结构(如果我调用正确,则为复合模式)。 |
![]() |
9
0
|
![]() |
Ben · 统计向量中的单词在字符串中出现的频率 7 月前 |
![]() |
LondonRob · 用于检查列表是否包含元素的结构模式匹配 1 年前 |
![]() |
Dhana · 角度模式生成-无法获得所需的输出 1 年前 |
![]() |
James Jithin · 字符串匹配方法-正斜杠不起作用 1 年前 |
![]() |
Adrian · 使用返回类型声明处理Python类型检查器错误 1 年前 |
|
quat · 一个Java 21开关表达式可以有多个保护吗? 1 年前 |
![]() |
Ezk13 · Make:如何将模式匹配的变量传递到列表 1 年前 |
![]() |
zajer · 在ocaml中同时匹配多个模式 1 年前 |