Tag: 模糊搜索

如何使用Postgresql创建简单的模糊搜索?

我的基于RoR的网站上的搜索function有点问题。 我有很多产品和一些CODE。 此代码可以是任何字符串,如“AB-123-lHdfj”。 现在我使用ILIKE运算符来查找产品: Product.where(“code ILIKE ?”, “%” + params[:search] + “%”) 它工作正常,但找不到像“AB123-lHdfj”或“AB123lHdfj”这样的代码的产品。 我该怎么办? 可能postgresql有一些字符串规范化function,还是其他一些方法来帮助我? 🙂

如何在Ruby中进行模糊子串匹配?

我找到了很多关于模糊匹配的链接,将一个字符串与另一个字符串进 我有一个非常长的字符串,它是一个文档和一个子字符串。 子字符串来自原始文档,但已被多次转换,因此可能引入了奇怪的工件,例如此处的空格,字符串。 子字符串将匹配原始文档中文本的一部分99%或更多。 我不匹配以查看此字符串是哪个文档,我试图在文档中找到字符串开始的索引。 如果字符串是相同的,因为没有引入随机错误,我会使用document.index(substring) ,但如果有一个字符差异,则会失败。 我认为通过删除字符串和子字符串中除az以外的所有字符来比较差异,然后使用压缩字符串时生成的索引将压缩字符串中的索引转换为真实文档中的索引。 这种情况很好用,其中差异是空格和标点符号,但只要一个字母不同就失败了。 该文档通常是几页到一百页,而子串从几个句子到几页。

Ruby中字符串字典中的快速模糊/近似搜索

我有一个50K到100K字符串的字典(最多可以有50多个字符),我试图找到给定字符串是否在字典中具有一些“编辑”距离容差。 (例如Levenshtein)。 在进行搜索之前,我很好地预先计​​算任何类型的数据结构。 我的目标是尽可能快地对该字典运行数千个字符串并返回最近的邻居。 我会很好的只是得到一个布尔值,说明一个给定是否在字典中,如果有一个明显更快的算法这样做 为此,我首先尝试计算所有Levenshtein距离并采取最小值,但显然非常慢。 所以我尝试在这篇文章的基础上实现Levenshtein Trie http://stevehanov.ca/blog/index.php?id=114 请参阅我的要点,重现基准: https : //gist.github.com/nicolasmeunier/7493947 以下是我在机器上的一些基准测试: 编辑距离0(完美匹配) Benchmark.measure { 10.times { dictionary.search(random_word, 0) } } * 编辑距离2,变得慢很多* Benchmark.measure { 10.times { dictionary.search(random_word, 2) } } 它从那里走下坡路,并且编辑距离大于2时变得非常慢。(每个测试字符串的平均值超过1秒)。 我想知道如何/如果我可以显着加快这一点。 如果已经在ruby / gem中实现了现有解决方案,我也不想重新发明轮子…… 编辑1:在我的情况下,我希望我与字典匹配的大多数字符串不在那里。 因此,如果有任何算法可以快速丢弃字符串,那可能会有所帮助。 谢谢,尼古拉斯