给定一个任意字符串,找到重复短语的有效方法是什么?我们可以说短语必须超过一定的长度才能包括在内。
理想情况下,您最终会得到每个短语的出现次数。
答案 0 :(得分:7)
理论上
在实践中
我猜你正在分析一个实际自然语言(例如英语)单词的文档,而你实际上想要对你收集的数据做些什么。
在这种情况下,您可能只想对某些小n进行快速n-gram分析,例如只需n = 2或3.例如,您可以通过剥离将文档标记为单词列表标点符号,大小写和词干(运行,运行 - >'运行')以增加语义匹配。然后,只需构建每个相邻词对的哈希映射(例如C ++中的hash_map,python中的字典等)到目前为止的出现次数。最后,您将获得一些非常有用的数据,这些数据的编码速度非常快,并且运行速度不会太慢。
答案 1 :(得分:4)
js
应用程序以测试字符串并通过示例进行操作。
答案 2 :(得分:1)
Suffix trees是实现这一目标的好方法。该文章的底部链接到不同语言的实现。
答案 3 :(得分:0)
就像jmah所说,你可以使用后缀树/后缀数组。
您可以使用here的算法进行描述(参见第3.1节)。
你可以在他们引用的书中找到更深入的描述(Gusfield,1997),on google books。
答案 4 :(得分:0)
假设您有一个带有n个条目的排序数组A(i = 1,2,3,...,n)
Algo(A(i))
{
while i<>n
{
temp=A[i];
if A[i]<>A[i+1] then
{
temp=A[i+1];
i=i+1;
Algo(A[i])
}
else if A[i]==A[i+1] then
mark A[i] and A[i+1] as duplicates
}
}
这个算法在O(n)时间运行。