问题标签 [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 回答
151 浏览

sql-server - 材料描述的模糊搜索,包括数字尺寸和材料类型的一般描述

我们希望提供对电气材料数据库(即导管、电缆等)的模糊搜索。问题是,由于所有材料类型缺乏一致性,我们无法将尺寸从文本描述中拆分到单独的字段中,因为有些材料是按尺寸以外的其他因素进行评级的。

我尝试将全文搜索和 Levenshtein 搜索算法的 SQL CLR 实现结合起来(用于帮助排名),但我的结果有点古怪(即,由于排名不正确,它们没有正确排序)。

例如,如果搜索词是“3/4”ABCD Conduit”,我可能会按以下顺序返回几个不相关的结果:

1/2" 导管 1/4" X 3/4" 电缆 1/4" 电缆扎带 3/4" DFC 导管三通 3/4" ABCD 导管 3/4" 导管

我相信我已经将问题归结为这两种搜索算法没有考虑标点符号和数字的相关性这一事实。也就是说,在这样的搜索中,我希望大小优先于描述其余部分的任何模糊匹配,但我的结果并没有反映这一点。

我的问题是:谁能推荐更好的搜索算法或可能更适合搜索字母数字和标点字符组合的不同方法?

0 投票
2 回答
2110 浏览

lucene - 使用精确的编辑距离搜索 Lucene

我想搜索具有编辑距离的 Lucene 索引。例如,假设有一个包含字段 FIRST_NAME 的文档;我想要所有名字与“约翰”相距 1 编辑距离的文档。

我知道 Lucene 支持模糊搜索 (FIRST_NAME:john~) 并采用 0 到 1 之间的数字来控制模糊性。问题(对我来说)是这个数字不能直接转化为编辑距离。当文档中的值是短字符串(少于 3 个字符)时,模糊搜索很难找到它们。例如,如果有一个带有 FIRST_NAME 'J' 的文档,我搜索 FIRST_NAME:I~0.0 我什么也得不到。

0 投票
5 回答
4105 浏览

string - 从数据库中快速获取模糊字符串匹配

我有一个约 150'000 个单词和一个模式(任何单个单词)的数据库,我想从数据库中获取所有单词,它与模式之间的 Damerau-Levenshtein 距离小于给定数字。我需要做的非常快。你能建议什么算法?如果 Damerau-Levenshtein 距离没有好的算法,也欢迎 Levenshtin 距离。

感谢您的帮助。

PS 我不会使用 SOUNDEX。

0 投票
1 回答
2050 浏览

python - 一个好的django搜索应用程序?— 如何使用 Haystack 进行模糊搜索?

我目前正在使用 django-haystack,以 apache-solr 作为后端。

问题是我无法让应用程序执行我正在寻找的搜索功能

  1. 搜索单词中的子部分

    例如。搜索“buntu”不会给我“ubuntu”

  2. 搜索相似词

    例如。搜索“ubantu”会得到“ubuntu”


任何帮助将不胜感激。

0 投票
4 回答
32106 浏览

r - 在 R 中使用模糊/近似字符串匹配合并两个数据帧

描述

我有两个数据集,其中包含需要合并的信息。我拥有的唯一常见字段是不完全匹配的字符串和可能大不相同的数字字段

解释问题的唯一方法是向您展示数据。这是a.csvb.csv。我正在尝试将 B 合并到 A。

B 中有 3 个字段,A 中有 4 个字段。公司名称(仅限文件 A)、基金名称、资产类别和资产。到目前为止,我的重点是尝试通过替换单词或部分字符串来匹配基金名称以创建完全匹配,然后使用:

然而,这只会让我达到大约 30% 的匹配率。其余的我必须手动完成。

资产是一个数值字段,在这两个字段中并不总是正确的,并且如果基金的资产较低,则可能会有很大差异。Asset Class 是一个字符串字段,在两个文件中“通常”相同,但是存在差异。

更复杂的是文件 B 中的不同系列基金。例如:

AGF 加拿大价值

AGF 加拿大价值-D

在这些情况下,我必须选择没有序列化的那个,或者选择称为“A”、“-A”或“Advisor”的那个作为匹配项。

问题

你会说什么是最好的方法?这个练习是我必须每月做的事情,手动匹配它们非常耗时。代码示例将很有帮助。

想法

我认为可能有效的一种方法是根据字符串中每个单词的第一个大写字母对字符串进行规范化。但我一直无法弄清楚如何使用 R 来解决这个问题。

我考虑的另一种方法是根据资产、基金名称、资产类别和公司的组合创建匹配索引。但同样,我不确定如何用 R 来做到这一点。或者,就此而言,如果它甚至可能的话。

非常感谢代码、注释、想法和方向的示例!

0 投票
7 回答
25972 浏览

sql - Similarity function in Postgres with pg_trgm

I'm trying to use the similarity function in Postgres to do some fuzzy text matching, however whenever I try to use it I get the error:

If I add explicit casts to text I get the error:

My query is:

Do I need to do something to initalize pg_trgm?

0 投票
3 回答
2730 浏览

java - 非英语字符串上的 Levenshtein 距离

Levenshtein距离算法也适用于非英语语言字符串吗?

更新:在比较亚洲字符时,这会在 Java 等语言中自动工作吗?

0 投票
6 回答
23498 浏览

regex - 模糊正则表达式

在我的工作中,我使用了近似字符串匹配算法(例如 Damerau-Levenshtein 距离)来使我的代码不易受到拼写错误的影响,取得了很好的效果。

现在我需要将字符串与简单的正则表达式进行匹配,例如TV Schedule for \d\d (Jan|Feb|Mar|...). 这意味着字符串TV Schedule for 10 Jan应该返回 0 而T Schedule for 10. Jan应该返回 2。

这可以通过在正则表达式中生成所有字符串(在本例中为 100x12)并找到最佳匹配来完成,但这并不实用。

你有什么想法如何有效地做到这一点?

0 投票
3 回答
6757 浏览

lucene - Lucene 对短语而不是单个单词的模糊匹配

我正在尝试使用 Apache Lucene 对短语“Grand Prarie”(故意拼写错误)进行模糊匹配。我的部分问题是~运算符仅对单个单词进行模糊匹配,并且表现为短语的邻近匹配。

有没有办法用 lucene 对短语进行模糊匹配?

0 投票
4 回答
14023 浏览

lucene - Lucene查询:bla~*(匹配以模糊开头的单词),怎么做?

在 Lucene 查询语法中,我想将 * 和 ~ 组合在一个有效的查询中,类似于:bla~* //invalid query

含义:请匹配以“bla”或类似“bla”开头的单词。

更新:我现在所做的,适用于少量输入,使用以下(SOLR 模式的片段):

如果您不使用 SOLR,则执行以下操作。

Indextime:通过创建一个包含我的(短)输入的所有前缀的字段来索引数据。

Searchtime:仅使用 ~ 运算符,因为前缀明确存在于索引中。