我有一个模式向量,需要使用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等功能可以帮助吗?谢谢!!
Python的新正则表达式模块支持模糊字符串匹配.唱歌(现在)大声赞美.
根据文档:
该
ENHANCEMATCH标志使模糊匹配尝试改善它找到的下一个匹配的拟合.该
BESTMATCH标志使模糊匹配搜索最佳匹配而不是下一个匹配
该ENHANCEMATCH标志使用设置(?e)在
regex.search("(?e)(dog){e<=1}", "cat and dog")[1]返回"狗"
但实际设置BESTMATCH标志没什么.怎么做的?
我有一个程序,它使用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)
任何人都知道是什么原因导致出现该错误?
我正在尝试使用Postgres创建一个模糊搜索,并一直使用django-watson作为基础搜索引擎来解决问题.
我有一个名为search_tsv的字段,它是一个包含我要搜索的模型的所有字段值的tsvector.
我想要使用Levenshtein函数,它在文本字段中完全符合我的要求.但是,我真的不知道如何在tsvector的每个元素上运行它.
有没有办法做到这一点?
关于这个常见问题,我看到堆栈上有很多问题和潜在的答案.由于操作员输入错误或其他轻微变化,您有一个多年来可能吸引了多个重复记录的名称或公司或产品表.
我正在尝试创建一个后端管理工具来管理这个问题.所以它不会是一个高流量的页面,但它仍然不应该杀死构建记录集的数据库.
到目前为止,我有这个查询,需要几分钟的时间来处理(方式太长):
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)
那么,有更好的(更快,更不模糊)的方式吗?
我正在使用 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) 我想实现一个Fuzzy Search使用PHP 7和MySQL 5.7.我在谷歌进行了一些搜索,我发现这些算法用于此目的:Metaphone,Levenshtein,Soundex和Hamming.
我想search for song titles在我的桌子旁.因此,用户可以使用标题,艺术家姓名或两者进行拼写检索,例如YouTube.
什么是用于此目的的最佳算法以及如何在php/MySQL中实现
我是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进行搜索,如果我允许进行高级搜索,我认为可能需要更改.一种选择是使用EntityManager或Template直接使用UserService,但我不知道该怎么做呢.
正如我所描述的那样,这是一个索引问题还是搜索问题,或者可能两者兼而有之?我不是在寻找任何人来做这项工作,只是为了指出我正确的方向.
谢谢!
java fuzzy-search elasticsearch spring-data spring-data-elasticsearch
我想对具有扁平层次结构的对象执行模糊搜索。在 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) 假设我有一个名单。不幸的是,有一些重复,但不清楚哪些是重复的。
Tom Riddle
Tom M. Riddle
tom riddle
Tom Riddle, PhD.
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用Levenshtein distance,并且肯定会想到其他算法来一次比较 2 个名字。
但是在名称列表中,无论字符串距离算法如何,我最终都会生成一个比较输出网格 ( n^2)。
我怎样才能避免这种O(n^2)情况?
fuzzy-search ×10
mysql ×2
python ×2
sql ×2
agrep ×1
algorithm ×1
fuse.js ×1
fuzzywuzzy ×1
java ×1
javascript ×1
php ×1
postgresql ×1
pypi-regex ×1
r ×1
regex ×1
search ×1
soundex ×1
spring-data ×1
sql-server ×1
string ×1
tsvector ×1
web ×1