标签: fuzzy-search

R:agrep与矢量模式

我有一个模式向量,需要使用agrep它们.问题是,agrep似乎一次只能采用一种模式.

patt <- c("test","10 Barrel")
lut  <- c("1 Barrel","10 Barrel Brewing","Harpoon 100 Barrel Series","resr","rest","tesr")

for (i in 1:length(patt)) {
  print(agrep(patt[i],lut,max=1,v=T))
}
Run Code Online (Sandbox Code Playgroud)

结果:

[1] "rest" "tesr"
[1] "1 Barrel"                  "10 Barrel Brewing"         "Harpoon 100 Barrel Series"
Run Code Online (Sandbox Code Playgroud)

for 长模式很慢,因此尝试以矢量化形式:

VecMatch1 = function(string, stringVector){
  stringVector[agrep(string, stringVector, max = 1)]
}
a = VecMatch1(patt,lut)

Warning message:
In agrep(string, stringVector, max = 1) :
  argument 'pattern' has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)

可能是lapply等功能可以帮助吗?谢谢!!

fuzzy-search r agrep

3
推荐指数
1
解决办法
1008
查看次数

如何找到最佳模糊字符串匹配?

Python的新正则表达式模块支持模糊字符串匹配.唱歌(现在)大声赞美.

根据文档:

ENHANCEMATCH标志使模糊匹配尝试改善它找到的下一个匹配的拟合.

BESTMATCH标志使模糊匹配搜索最佳匹配而不是下一个匹配

ENHANCEMATCH标志使用设置(?e)

regex.search("(?e)(dog){e<=1}", "cat and dog")[1] 返回"狗"

但实际设置BESTMATCH标志没什么.怎么做的?

python regex string fuzzy-search pypi-regex

3
推荐指数
1
解决办法
1452
查看次数

运行 fuzzywuzzy/fuzz.py 时出错

我有一个程序,它使用fuzzywuzzy来匹配 csv,并查找任何可能重复或非常相似的字符串。当我比较两个文件时,fuzzywuzzy引发以下错误:

WARNING:root:Applied processor reduces input query to empty string all comparisons will have score 0. [Query:'+']
Run Code Online (Sandbox Code Playgroud)

任何人都知道是什么原因导致出现该错误?

python fuzzy-search fuzzywuzzy

3
推荐指数
1
解决办法
3123
查看次数

在tsvector中的每个元素上使用Levenshtein函数?

我正在尝试使用Postgres创建一个模糊搜索,并一直使用django-watson作为基础搜索引擎来解决问题.

我有一个名为search_tsv的字段,它是一个包含我要搜索的模型的所有字段值的tsvector.

我想要使​​用Levenshtein函数,它在文本字段中完全符合我的要求.但是,我真的不知道如何在tsvector的每个元素上运行它.

有没有办法做到这一点?

postgresql fuzzy-search tsvector levenshtein-distance

2
推荐指数
1
解决办法
3522
查看次数

用一种不吸引人的方式找到MySQL的模糊重复

关于这个常见问题,我看到堆栈上有很多问题和潜在的答案.由于操作员输入错误或其他轻微变化,您有一个多年来可能吸引了多个重复记录的名称或公司或产品表.

我正在尝试创建一个后端管理工具来管理这个问题.所以它不会是一个高流量的页面,但它仍然不应该杀死构建记录集的数据库.

到目前为止,我有这个查询,需要几分钟的时间来处理(方式太长):

SELECT 
    tab1.id as id1, 
    tab1.creative as creative1, 
    tab2.id as id2, 
    tab2.creative as creative2 
FROM 
    creatives tab1, 
    creatives tab2 
WHERE 
    SOUNDEX(tab1.creative)= SOUNDEX(tab2.creative) 
AND 
    tab1.id<>tab2.id 
AND 
    tab1.id=(
        SELECT 
            MAX(id) 
        FROM 
            creatives tab 
        WHERE 
            SOUNDEX(tab.creative)=SOUNDEX(tab1.creative))
Run Code Online (Sandbox Code Playgroud)

现在除了花费太长时间才能返回结果之外,结果有时候太模糊了.例如,它发现这些很好:

Convenery of Trades of Edinburgh | Convenery of Trades of Edinbubrgh
Crowdedlogic Theatre Company | Crowded Logic Theatre Company
Run Code Online (Sandbox Code Playgroud)

但这些似乎不合时宜

Daniel Cope | Dan Willis & Obie
David Williams | David Holmes
Run Code Online (Sandbox Code Playgroud)

那么,有更好的(更快,更不模糊)的方式吗?

mysql fuzzy-search soundex

2
推荐指数
1
解决办法
1329
查看次数

具有匹配百分比的 SQL Server 模糊搜索

我正在使用 SQL Server 2008 R2 SP1。

我有一个包含大约 36034 条客户记录的表。我正在尝试对客户名称字段实施模糊搜索。

这是模糊搜索的功能

ALTER FUNCTION [Party].[FuzySearch]
    (
      @Reference VARCHAR(200) ,
      @Target VARCHAR(200)
    )
RETURNS DECIMAL(5, 2)
    WITH SCHEMABINDING
AS
    BEGIN 
        DECLARE @score DECIMAL(5, 2) 
        SELECT  @score = CASE WHEN @Reference = @Target
                              THEN CAST(100 AS NUMERIC(5, 2))
                              WHEN @Reference IS NULL
                                   OR @Target IS NULL
                              THEN CAST(0 AS NUMERIC(5, 2))
                              ELSE ( SELECT [Score %] = CAST(SUM(LetterScore)
                                            * 100.0 / MAX(WordLength
                                                          * WordLength) AS NUMERIC(5,
                                                              2))
                                     FROM   ( -- do
                                              SELECT    seq = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server fuzzy-search

2
推荐指数
1
解决办法
2万
查看次数

Metaphone vs Levenshtein vs Soundex vs Hamming

我想实现一个Fuzzy Search使用PHP 7和MySQL 5.7.我在谷歌进行了一些搜索,我发现这些算法用于此目的:Metaphone,Levenshtein,Soundex和Hamming.

我想search for song titles在我的桌子旁.因此,用户可以使用标题,艺术家姓名或两者进行拼写检索,例如YouTube.

什么是用于此目的的最佳算法以及如何在php/MySQL中实现

php mysql sql fuzzy-search

2
推荐指数
1
解决办法
3206
查看次数

如何使用Spring-data-elastic查询Elastic

我是Elastic和spring-data-elastic的新手.我一直在这里和网络的其他方面搜索,但到目前为止一直无法找到我的问题的答案.我希望SO能够提供帮助.

我正在从我的Users表(firstName,lastName)索引一些记录,我希望能够允许高级搜索.因此,例如,如果我有'Frances'这个名字并输入'Frank',那么系统足够智能以返回记录.同样适用于'罗宾逊'和'罗宾森'等.

我已将我的POJO设置为以下内容:

Public Users {
    @Field(fieldType = FieldType.String)
    private String firstName;

    @Field(fieldType = FieldType.String)
    private String lastName

    // mutators
    ...

 }
Run Code Online (Sandbox Code Playgroud)

目前我正在使用spring-data-elastic ElasticRepository进行搜索,如果我允许进行高级搜索,我认为可能需要更改.一种选择是使用EntityManagerTemplate直接使用UserService,但我不知道该怎么做呢.

正如我所描述的那样,这是一个索引问题还是搜索问题,或者可能两者兼而有之?我不是在寻找任何人来做这项工作,只是为了指出我正确的方向.

谢谢!

java fuzzy-search elasticsearch spring-data spring-data-elasticsearch

2
推荐指数
1
解决办法
2246
查看次数

Fuse.js:像对象一样在数组中进行模糊搜索

我想对具有扁平层次结构的对象执行模糊搜索。在 Fuse.js 的演示页面上,您必须指定要在对象中查找的键。不幸的是,我没有特定的标识符。

Fuse.js 演示:

var books = [{
  title: "Old Man's War",
  author: {
    firstName: "John",
    lastName: "Scalzi"
  }
}];
var fuse = new Fuse(books, { keys: ["title", "author.firstName"] });
Run Code Online (Sandbox Code Playgroud)

我的设置:

const data = {
  "100": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f4af.png?v6",
  "1234": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f522.png?v6",
  "+1": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v6",
  "-1": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44e.png?v6"
};

const fuse = new Fuse(data, { keys: ??? });
fuse.search('+1'); // should return "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v6",
Run Code Online (Sandbox Code Playgroud)

javascript search fuzzy-search web fuse.js

2
推荐指数
2
解决办法
7483
查看次数

比 O(n^2) 更好地找到相似的名字

假设我有一个名单。不幸的是,有一些重复,但不清楚哪些是重复的。

Tom Riddle
Tom M. Riddle
tom riddle
Tom Riddle, PhD.
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用Levenshtein distance,并且肯定会想到其他算法来一次比较 2 个名字。

但是在名称列表中,无论字符串距离算法如何,我最终都会生成一个比较输出网格 ( n^2)。

我怎样才能避免这种O(n^2)情况?

algorithm fuzzy-search

2
推荐指数
1
解决办法
230
查看次数