0

我已经制定了一个有效的算法,但运行时间非常可怕。是的,我从一开始就知道这将是可怕的,但不是那么多。对于仅 200000 条记录,程序运行了一个多小时。

基本上我正在做的是:

for each searchfield in search fields
    for each sample in samples
        do a q-gram matching
    if there are matches then return it
    else
        split the searchfield into uniwords
        for each sample in samples
            split sample into uniwords
            for each uniword in samples
                if the uniword is a known abbreviation
                    then search the dictionary for its full word or other known abbr
                else do a jaro-winkler matching
            average the distances of all the uniwords
            if the average is above threshold then make it as a match and break
        end for
        if there is a match make a comment that it matched one of the samples partially
    end else
end for

是的,这段代码非常循环愉快。我正在使用蛮力,因为召回非常重要。所以,我想知道如何让它更快,因为我不仅要为数百万数据运行 200000 个数据,而且客户端的计算机不是高端的(1GB-2GB 的 Ram Pentium 4 或双核,我测试该程序的计算机是具有 4GB 内存的双核)。我遇到了 TF/IDF,但我不知道它是否足够。我想知道谷歌如何进行实时搜索。

提前致谢!

编辑:这个程序是一个数据过滤器。从200,000个虚拟数据(实际数据大约12M)中,我必须过滤与样本无关的数据(500个虚拟样本,我仍然不知道实际样本量有多少)。

使用给定的虚拟数据和样本,运行时间大约为 1 小时,但经过四处修补后,我成功地将其缩短到 10-15 分钟。我通过对以相同字符开头的字段和样本进行分组(不包括特殊和无意义的词,例如 the、a、an)并将字段与具有相同第一个字符的样本进行匹配来减少它。我知道那里有问题。如果该字段在第一个字符处拼写错误怎么办?但我认为这些数量可以忽略不计。样本拼写正确,因为它始终保持不变。

4

1 回答 1

0

你的编程语言是什么?我想使用 q=2 或 3 就足够了。我还建议从uni gram获得更高的学位。

于 2012-05-03T20:43:11.480 回答