问题标签 [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 投票
8 回答
8246 浏览

fuzzy-search - 轻量级模糊搜索库

你能推荐一些轻量级的模糊文本搜索库吗?

我想要做的是让用户找到错误的搜索词的正确数据。

我可以使用像 Lucene 这样的全文搜索引擎,但我认为这太过分了。

编辑:
为了让问题更清楚,这里是该库的主要场景:
我有一个很大的字符串列表。我希望能够在此列表中进行搜索(类似于 MSVS 的智能感知),但应该可以通过字符串过滤此列表,该字符串不存在但与列表中的某个字符串足够接近。
例子:

  • 红色的
  • 绿色的
  • 蓝色的

当我在文本框中输入“Gren”或“Geen”时,我想在结果集中看到“Green”。

索引数据的主要语言是英语。

我认为 Lucene 对这项任务来说太重了。

更新

我找到了一款符合我要求的产品。它是ShuffleText
你知道任何替代方案吗?

0 投票
4 回答
14377 浏览

fuzzy-search - Levenshtein 基于距离的方法与 Soundex

根据相关线程中的评论,我想知道为什么基于 Levenshtein 距离的方法比 Soundex 更好。

0 投票
5 回答
22699 浏览

c# - C# 中的模糊文本(句子/标题)匹配

嘿,我正在使用Levenshteins算法来获取源字符串和目标字符串之间的距离。

我也有返回值从 0 到 1 的方法:

但这对我来说还不够。因为我需要更复杂的方式来匹配两个句子。

例如,我想自动标记一些音乐,我有原始歌曲名称,并且我有垃圾歌曲,如超级、质量、2007 年、2008年等年份等。还有一些文件只有http://trash。 .thash..song_name_mp3.mp3,其他正常。我想创建一个比我现在更完美的算法。也许有人可以帮助我吗?

这是我目前的算法:

这正常工作,但只是在某些情况下,很多标题应该匹配,不匹配......我想我需要某种公式来玩权重等,但我想不出一个......

想法?建议?算法?

顺便说一句,我已经知道这个话题(我的同事已经发布了,但我们无法为这个问题提供适当的解决方案。): 近似字符串匹配算法

0 投票
4 回答
21700 浏览

sql-server - 是否可以在没有 SSIS 的情况下执行 T-SQL 模糊查找?

SSIS 2005/2008 进行模糊查找和分组。在 T-SQL 中是否有相同的功能?

0 投票
7 回答
15251 浏览

fuzzy-search - 如何在大型字符串数据库中找到字符串的最佳模糊匹配

我有一个字符串数据库(任意长度),其中包含超过一百万个项目(可能更多)。

我需要将用户提供的字符串与整个数据库进行比较,如果存在则检索相同的字符串,否则返回最接近的模糊匹配(60% 相似性或更好)。理想情况下,搜索时间应低于一秒。

我的想法是在根据长度缩小数据库中的候选者之后,使用编辑距离将每个数据库字符串与搜索字符串进行比较。

但是,由于我需要经常执行此操作,我正在考虑构建数据库字符串的索引以保存在内存中并查询索引,而不是直接查询数据库。

关于如何以不同方式解决此问题或如何构建内存索引的任何想法?

0 投票
8 回答
70529 浏览

java - Java中的模糊字符串搜索库

我正在寻找用于模糊字符串搜索的高性能 Java 库。

有许多算法可以找到相似的字符串、Levenshtein 距离、Daitch-Mokotoff Soundex、n-gram 等。

存在哪些 Java 实现?对他们有利有弊?我知道 Lucene,任何其他解决方案或 Lucene 是最好的?

我找到了这些,有人有经验吗?

0 投票
2 回答
236 浏览

algorithm - 将 RSS 条目映射到 HTML 正文 w。非精确搜索

你将如何解决这个问题?

您正在抓取博客的 HTML。博客的一些 HTML 是博客文章,一些是格式、侧边栏等。如果有的话,您希望能够分辨 HTML 中的哪些文本属于哪个文章(即永久链接)。

我知道你在想什么:你可以只看 RSS 而完全忽略 HTML!但是,RSS 通常只包含非常短的摘录或删除您可能感兴趣的链接。您希望通过同时使用同一页面的 HTML 和 RSS 从本质上打败 RSS 的摘录。

RSS 条目如下所示:

HTML 格式的博客文章如下所示:

因此 HTML 页面包含相同的字段,但预先不知道永久链接的位置,并且这些字段将被一些主要是 HTML 和空白的噪声文本分隔,但也可能包含一些额外的元数据,例如“由 Johnny 发布"或日期或类似的东西。如下所述,文本在 HTML 和 RSS 中也可能略有不同。

附加规则/注意事项:

  • 标题可能不是唯一的。这种情况发生的频率比您想象的要多。我见过的例子:“周一综述”、“TGIF”等。
  • 标题甚至可以留空。
  • RSS 中的摘录也是可选的,但假设必须至少有非空白摘录或非空白标题
  • RSS 摘录可能包含完整的帖子内容,但更有可能包含帖子正文开头的简短摘录
  • 假设永久链接必须是唯一的,并且在 HTML 和 RSS 中必须相同。
  • RSS 和 HTML 中的标题、摘录和帖子正文的格式可能略有不同。例如:
    • RSS 可能在标题或正文中去除了 HTML,或者在 HTML 页面上可以添加更多 HTML(例如用某些东西包围文章正文的第一个字母)或格式可能略有不同
    • 文本的编码可能略有不同,例如在 RSS 中是 utf8,而在 HTML 中的非 ascii 字符总是使用 & 号编码。但是,假设这是英文文本,非 ascii 字符很少见。
    • 可能存在编码错误的 Windows-1252 可怕性。对于像弯引号这样的符号字符,这种情况经常发生。但是,可以安全地假设大部分文本都是 ascii。
    • 可能会在任何一个方向上折叠,尤其是在标题中。因此,他们可以将 HTML 页面中的标题全部大写,但不能在 RSS 中。
  • 假定 RSS 提要和 HTML 页面中的条目数不同。要么有更多或更少的旧条目。我们只能期望只获得出现在两者中的那些帖子。
  • RSS 可能会滞后。HTML 页面中可能有一个新条目尚未出现在 RSS 提要中。如果 RSS 通过 Feedburner 进行联合,则可能会发生这种情况。同样,我们只能期望解析那些同时出现在 RSS 和 HTML 中的帖子。
  • 帖子的正文可以很短也可以很长。

100% 准确率不是限制。但是,越准确越好。

嗯,你会怎么做?

0 投票
9 回答
98577 浏览

mysql - 如何使用 PHP 对 MYSQL 中的公司名称进行模糊匹配以实现自动完成?

我的用户将通过剪切和粘贴一个包含公司名称的大字符串来导入。

我有一个现有且不断增长的 MYSQL 公司名称数据库,每个数据库都有一个唯一的 company_id。

我希望能够解析字符串并为每个用户输入的公司名称分配一个模糊匹配。

现在,只是做一个直接的字符串匹配,也很慢。** Soundex 索引会更快吗?如何在用户输入时为他们提供一些选项?**

例如,有人写道:

我发现以下似乎与此问题相似的线程,但发帖人尚未批准,我不确定他们的用例是否适用:

如何在大型字符串数据库中找到字符串的最佳模糊匹配

在 Java 中匹配不准确的公司名称

0 投票
2 回答
49700 浏览

fuzzy-search - 最佳模糊匹配算法?

在更短的时间内处理超过 100000 条记录的最佳模糊匹配算法(模糊逻辑、N-Gram、Levenstein、Soundex ......)是什么?

0 投票
1 回答
2819 浏览

ssis - SSIS 模糊查找,每个查找错误有多个输出

我有一个非常简单的 SSIS 包,包含 3 个组件:

  1. OLE DB 源
  2. 模糊查找
  3. OLE DB 目标

在模糊查找组件中,我在高级选项卡中将“每次查找输出的最大匹配数”从 1 更改为 2。

当我在更改后运行包时,我收到以下错误消息:

[OLE DB 目标 [57]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Native Client”Hresult:0x80004005 描述:“链接服务器 '(null)' 的 OLE DB 提供程序 'STREAM' 返回了列 '[!BulkInsert]._Confidence' 的无效数据。”

将数字改回 1 再次起作用。OLE DB 源有大约 45000 行,查找有大约 580000 行。

我不知道如何进一步解决这个问题,所以任何帮助表示赞赏!

谢谢丹尼尔