问题标签 [fuzzy-search]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
423 浏览

lucene - 为查询添加模糊性

有没有一种简单的方法可以为用户在 Lucene 中输入的搜索查询添加模糊级别?

如果可能的话,我想避免解析他们输入的文本。

目前,如果他们输入green boxes,我使用带有 boosts 的多字段查询解析器,它可以轻松生成以下内容,例如:

我想做的就是将其转换为:

看起来我需要解析查询并将模糊性添加到每个术语,但我想知道是否有一种简单的方法来添加模糊性?

0 投票
3 回答
2157 浏览

php - Fuzzy Text Search: Regex Wildcard Search Generator?

I'm wondering if there is some kind of way to do fuzzy string matching in PHP. Looking for a word in a long string, finding a potential match even if its mis-spelled; something that would find it if it was off by one character due to an OCR error.

I was thinking a regex generator might be able to do it. So given an input of "crazy" it would generate this regex:

It would then return all matches for that word or variations of that word.

How to build the generator: I would probably split the search string/word up into an array of characters and build the regex expression doing a foreach the newly created array replacing the key value (the position of the letter in the string) with ".+".

Is this a good way to do fuzzy text search or is there a better way? What about some kind of string comparison that gives me a score based on how close it is? I'm trying to see if some badly converted OCR text contains a word in short.

0 投票
3 回答
10871 浏览

sql-server-2005 - 使用 SQL Server 2005 模糊匹配可能重复项的良好 SQL 策略

我想在大型数据库中找到与 COMPANYNAME 和 ADDRESSLINE1 等字段匹配的可能的候选重复记录

例子:

对于具有以下 COMPANYNAME 的记录:

  • “Acme, Inc.”

我希望我的查询将具有这些 COMPANYNAME 值的其他记录作为可能的重复值吐出:

  • “阿克米公司”
  • “Acme,合并”
  • “极致”

我知道如何进行连接、相关子查询等,以执行提取我想要的数据集的机制。我知道之前已经在这里介绍过。我有兴趣听到有关进行模糊搜索的最佳方法的想法 - 我应该使用全文索引还是 soundex 函数或其他我对此过程不知道的东西?(我使用的是 SQL Server 2005)

任何帮助表示赞赏!

0 投票
2 回答
462 浏览

linq - 我需要一个“模糊”查询来获取高于和低于给定维度的产品

这是我的问题:用户按尺寸搜索产品。结果应显示所需尺寸(如果有)的所有产品以及逐渐变大和变小的产品,直到除了尺寸正确的产品外,还显示至少 50 个尺寸过小的产品和 50 个超大尺寸的产品。

结果应始终显示一定尺寸的所有产品;换句话说,如果向上或向下移动到下一个尺寸会导致超过 50 种产品,请全部展示它们 - 不要停留在 50 种。

示例:假设有 25 个不同的尺寸,每个尺寸有 20 个产品。用户要求尺寸为 12。我们需要减小三个尺寸并增大三个尺寸才能在每个方向上至少获得 50 个尺寸。查询应返回所有尺寸为 12 的产品,以及尺寸为 9、10、11、13、14 和 15 的产品。该查询将返回总共 140 个产品(20 个尺寸 - 12 加上 60 和 60 以上)。不幸的是,尺寸不是像我的示例那样好的整数。它们是任意十进制值。

执行此操作的 Linq to SQL 查询非常酷,但也欢迎使用纯 SQL 或 C#。(我的环境是C#,SQL Server 2005)谢谢

0 投票
1 回答
2223 浏览

algorithm - 使用 bitap 算法寻找模糊匹配

最近,我已经查看了 bitap 算法的几种实现,但它们所做的都是找到模糊匹配的起点。我需要的是找到一个匹配。有一个例子:

假设我们有以下文本:abcdefg

和一个模式:bzde

并且我们希望在文本中找到所有出现的模式,最多有 1 个错误(考虑编辑距离)。

所以我需要算法返回:bcde。

有没有简单(或不简单=))的方法来做到这一点?关于这个算法的原始文章没有回答这个问题。

谢谢您的帮助。

0 投票
1 回答
170 浏览

search - 模糊数据的交叉引用数据库

我目前正在从事一个项目,我必须将大量用户生成的名称与规范格式的相同名称的单独列表进行匹配。问题是用户生成的名称包含大量拼写错误、缩写以及简单的无效数据,因此很难与规范数据进行交叉引用。关于这样做的方法有什么建议吗?

这不必实时完成,在这种情况下,准确性比速度更重要。

目前对此的想法是:

  1. 使用现有的搜索实现(如 Lucene 或 Sphinx)在规范数据库中对用户输入的名称进行模糊搜索,我认为它使用类似 Levenshtein 距离之类的东西。
  2. 交叉引用 SOUNDEX 散列(据说是根据名称的发音而不是拼写计算)而不是使用实际名称。
  3. 以上的一些组合

有人对这些或他们自己的想法有任何反馈吗?

我担心的一个问题是,上述方法都不能很好地处理缩写。谁能指出一些机器学习方法的方向,以实际搜索扩展的缩写(或告诉我我疯了)?提前致谢。

0 投票
4 回答
911 浏览

php - 支持模糊搜索的最简单的站点搜索应用程序是什么?

我有一个网站需要搜索大约 20-30k 条记录,其中大部分是电影和电视节目名称。该站点使用 memcache 运行 php/mysql。

我希望用我目前拥有的搜索来替换FULLTEXTsoundex(),它可以工作......有点,但在许多情况下并不是很好。

是否有任何体面的搜索脚本易于实现,并且将提供体面的搜索功能(表中的 3 列)。

0 投票
2 回答
6623 浏览

php - PHP/MySQL 小范围模糊搜索

我正在寻找为小型 PHP/MySQL 应用程序实现模糊搜索。具体来说,我有一个包含大约 2400 条记录的数据库(以每年大约 600 条的速度添加记录,因此它是一个小型数据库)。感兴趣的三个字段是街道地址、姓氏和日期。我希望能够通过其中一个字段进行搜索,并且基本上可以容忍拼写/字符错误。即,“123 Main Street”的地址也应与“123 Main St”、“123 Main St.”、“123 Mian St”、“123 Man St”、“132 Main St”等匹配,名称也是如此和日期。

我对其他类似问题的回答的主要问题:

  • 不可能为每个可能的错误拼写定义同义词,忘记为日期和名称定义同义词。
  • Lucene 等对于这样一个有限的搜索数据集(称其最多为 5,000 条记录,每条记录 3 个字段)而言似乎非常重量级。
  • 对于所有可能的拼写错误,仅仅使用通配符做一些事情似乎并不合乎逻辑。

有什么建议么?我知道不可能在本地使用 MySQL,但由于数据集非常有限,我想保持相对简单......也许是一个 PHP 类,它可以从数据库中获取所有记录,使用某种比较算法,并返回相似记录的 ID?

谢谢,杰森

0 投票
4 回答
11843 浏览

sql - q-gram 近似匹配优化

我有一个包含 300 万个人记录的表,我想在其上使用 q-grams 执行模糊匹配(例如姓氏)。我已经创建了一个 2 克表链接到这个,但是在这个数据量(大约 5 分钟)上搜索性能不是很好。

我基本上有两个问题:(1)你能建议任何方法来提高性能以避免表扫描(即必须计算搜索字符串和 300 万个姓氏之间的常见 q-gram)(2)使用 q-gram,如果 A与 B 相似,C 与 B 相似,是否意味着 C 与 A 相似?

亲切的问候

彼得

0 投票
1 回答
503 浏览

java - 没有运算符的 Lucene 查询

我正在尝试使用 Lucene 在数据库中搜索名称。但是,有些名称包含诸如“NOT”和“OR”之类的词,甚至包含“-”减号。我仍然希望使用分析器将名称中的不同标记分解并作为术语的布尔组合进行搜索,但我不希望 Lucene 将任何“NOT”/“OR”术语解释为运算符(而不是我希望它们像正常术语一样被搜索)。

完成我所说的一种方法是在搜索查询上手动运行分析器,然后根据所有结果标记手动构造一个布尔查询。这是最好的方法吗?我的印象是分析器被设计为与查询解析器一起使用,我觉得应该有一个内置的方法来完成我想要做的事情。有人知道最好的方法吗?