2017-08-26 46 views
0

A BK Trees (Burkhard-Keller Trees)与模糊字符串搜索(例如拼写检查,单词推荐)相关联。所有的BK树搜索算法都与explained here相同。目标是返回,例如"seek" and "peek" if I search for "aeek"BK - 树搜索全部

现在,我的问题是,我想利用这个模糊字符串搜索算法来搜索从所有类似的项目给予词典。例如,给一个词“寻找”,我想找到全部类似的单词,如“偷看”,“怪胎”,“座位”等字典内。但是我发现BK Trees searching algorithm that everyone uses不是为此设计的。

看看我的sample test result here。我发现the dictionary will be different if the feeding words order is different, thus the search result can be different as well

我要的是,使用,给定任意的四个Python的书我上面sample test,一个SearchAll函数总是返回四个Python的书,尽管字典构建顺序,或搜索完成的顺序。

但是,我尝试了很多方法,但都失败了(例如,this is one of them)。现在我正在甩手并寻求帮助。伪代码或通用算法描述会做。谢谢。

+0

@templatetypedef? – xpt

+0

@Duck,你能帮忙吗? – xpt

回答

1

你必须在线路77和bktree.go的106的整数溢出:

K:= d - R

由于类型druint8,类型k也是uint8,所以当d < r,k结束大于d + r,并且下面的循环不执行。

你能解决这个问题是这样的:

k := int16(d) - int16(r) 
max_k := int16(d) + int16(r) 
if k < 1 { 
    k = 1 
} 
for ; k <= max_k; k++ { 
    ... 
} 
+0

实际上,这不会发生,如行https://github.com/go-dedup/simhash/blob/master/sho/bktree.go#L73-L74,也就是说,在77行和106行时, d'会是'> = r'。但感谢您抽出宝贵时间进行研究! – xpt

+0

我用调试器浏览过它,它发生在[106]行(https://github.com/go-dedup/simhash/blob/master/sho/bktree.go#L106)。而且,修复后,'ExampleSearch_filesA','ExampleSearch_filesB','ExampleSearch_filesS'全部输出相同的结果。 – Anton

+0

哦,那里!非常感谢!你用什么调试器BTW? – xpt