判断两个字符串的相似度很容易,关键是如何提高速度。在搜索引擎中,往往有上百万的网页,怎么去重。速度最快。下面用一个hash的办法来快速计算相似度。
首先,我们用hash的方法把一个字符串变为一个整数数组:
相当于每4个字节把字符串hash成一个整数存起来。
那么如果我们有两个字符串 a, b
我们首先把它们hash成两个集合sa,sb
假设 sa sb的交集有 k个元素
那么相似度就可以定义为
k / max(|sa|,|sb|)
然后给定一个阈值就可以去重了。
这个方法特点是效果比较好,速度很快。
首先,我们用hash的方法把一个字符串变为一个整数数组:
void
hashString(
const
string
&
buf,
set
<
int
>
&
ret)
{
for(int i = 0; i < buf.length() - 4; ++i)
{
string tmp;
tmp += buf[i];
tmp += buf[i+1];
tmp += buf[i+2];
tmp += buf[i+3];
ret.insert(hash(tmp));
}
}
{
for(int i = 0; i < buf.length() - 4; ++i)
{
string tmp;
tmp += buf[i];
tmp += buf[i+1];
tmp += buf[i+2];
tmp += buf[i+3];
ret.insert(hash(tmp));
}
}
相当于每4个字节把字符串hash成一个整数存起来。
那么如果我们有两个字符串 a, b
我们首先把它们hash成两个集合sa,sb
假设 sa sb的交集有 k个元素
那么相似度就可以定义为
k / max(|sa|,|sb|)
然后给定一个阈值就可以去重了。
这个方法特点是效果比较好,速度很快。