我的基于RoR的网站上的搜索功能有点问题.我有很多产品和一些CODE.此代码可以是任何字符串,如"AB-123-lHdfj".现在我使用ILIKE运算符来查找产品:
Product.where("code ILIKE ?", "%" + params[:search] + "%")
Run Code Online (Sandbox Code Playgroud)
它工作正常,但找不到像"AB123-lHdfj"或"AB123lHdfj"这样的代码的产品.
我该怎么办?可能是postgresql有一些字符串规范化功能,还是其他一些方法来帮助我?:)
什么是最好的模糊匹配算法(模糊逻辑,N-Gram,Levenstein,Soundex ....,)能够在更短的时间内处理超过100000条记录?
使用OCR工具我从截图中提取文本(每个约1-5个句子).但是,在手动验证提取的文本时,我注意到有时会出现几个错误.
鉴于文本"你好!我真的喜欢Spark❤️!",我注意到:
1)像"I","!"和"l"这样的字母被"|"代替.
2)Emojis未被正确提取并被其他字符替换或被遗漏.
3)不时删除空格.
结果,我可能会得到一个像这样的字符串:"你好7l |真实|喜欢Spark!"
因为我试图将这些字符串与包含正确文本的数据集相匹配(在这种情况下"Hello there!我真的很喜欢Spark❤️!"),我正在寻找一种有效的方法来匹配Spark中的字符串.
任何人都可以建议一个有效的Spark算法,它允许我比较提取文本(〜100.000)与我的数据集(约1亿)?
通过模糊匹配,我不是指Levenshtein距离或类似的相似字符串,而是它在TextMate/Ido/Icicles中的使用方式:给定一个字符串列表,找到包含搜索字符串中所有字符的字符串,但可能还有其他字符串之间的人物,更喜欢最合适.
嘿,我正在使用Levenshteins算法来获得源和目标字符串之间的距离.
我也有从0到1返回值的方法:
/// <summary>
/// Gets the similarity between two strings.
/// All relation scores are in the [0, 1] range,
/// which means that if the score gets a maximum value (equal to 1)
/// then the two string are absolutely similar
/// </summary>
/// <param name="string1">The string1.</param>
/// <param name="string2">The string2.</param>
/// <returns></returns>
public static float CalculateSimilarity(String s1, String s2)
{
if ((s1 == null) || (s2 == null)) return 0.0f;
float dis = LevenshteinDistance.Compute(s1, s2); …Run Code Online (Sandbox Code Playgroud) 我是ElasticSearch的新手,我正在探索它的功能.我感兴趣的其中一个是模糊查询,我正在测试并且有麻烦使用.这可能是一个虚假的问题,所以我猜一个已经使用过这个功能的人会很快找到答案,至少我希望如此.:)
BTW我觉得它可能不仅与ElasticSearch有关,而且可能直接与Lucene有关.
让我们从一个名为"first index"的新索引开始,我在其中存储一个值为"american football"的对象"label".这是我使用的查询.
bash-3.2$ curl -XPOST 'http://localhost:9200/firstindex/node/?pretty=true' -d '{
"node" : {
"label" : "american football"
}
}
'
Run Code Online (Sandbox Code Playgroud)
这是我得到的结果.
{
"ok" : true,
"_index" : "firstindex",
"_type" : "node",
"_id" : "6TXNrLSESYepXPpFWjpl1A",
"_version" : 1
}
Run Code Online (Sandbox Code Playgroud)
到目前为止很好,现在我想使用模糊查询找到这个条目.这是我发送的那个:
bash-3.2$ curl -XGET 'http://localhost:9200/firstindex/node/_search?pretty=true' -d '{
"query" : {
"fuzzy" : {
"label" : {
"value" : "american football",
"boost" : 1.0,
"min_similarity" : 0.0,
"prefix_length" : 0
}
}
}
} …Run Code Online (Sandbox Code Playgroud) 我一直在研究一种基于不完美字符串连接两个数据集的方法,例如公司名称.在过去,我必须匹配两个非常脏的列表,一个列表有名称和财务信息,另一个列表有名称和地址.没有唯一的ID匹配!假设清洁已经应用,并且可能有类型和插入.
到目前为止,AGREP是我发现的最接近的工具.我可以在AGREP包中使用levenshtein距离,它测量两个字符串之间的删除,插入和替换的数量.AGREP将返回距离最小的字符串(最相似).
但是,我一直无法从单个值转换此命令以将其应用于整个数据帧.我粗略地使用了for循环来重复AGREP函数,但是必须有一个更简单的方法.
请参阅以下代码:
a<-data.frame(name=c('Ace Co','Bayes', 'asd', 'Bcy', 'Baes', 'Bays'),price=c(10,13,2,1,15,1))
b<-data.frame(name=c('Ace Co.','Bayes Inc.','asdf'),qty=c(9,99,10))
for (i in 1:6){
a$x[i] = agrep(a$name[i], b$name, value = TRUE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
a$Y[i] = agrep(a$name[i], b$name, value = FALSE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
}
Run Code Online (Sandbox Code Playgroud) 我有一个字符串数据库(任意长度),它拥有超过一百万个项目(可能更多).
我需要将用户提供的字符串与整个数据库进行比较,并检索相同的字符串(如果存在)或以其他方式返回最接近的模糊匹配(60%相似性或更好).理想情况下,搜索时间应小于一秒.
我的想法是使用编辑距离将每个数据库字符串与搜索字符串进行比较,然后根据数据库的长度缩小数据库中的候选项.
但是,因为我需要经常执行此操作,所以我正在考虑构建db字符串的索引以保留在内存中并查询索引,而不是直接查询db.
有关如何以不同方式解决此问题或如何构建内存中索引的任何想法?
我需要自动将来自不同来源的产品名称(相机,笔记本电脑,电视等)与数据库中的规范名称相匹配.
例如"Canon PowerShot a20IS","来自佳能的NEW powershot A20 IS"和"数码相机佳能PS A20IS" 都应该与"佳能PowerShot A20 IS"相匹配.我已经使用了levenshtein距离和一些额外的启发式方法(删除了明显的常用词,为数字更改分配了更高的成本等),这在某种程度上起作用,但遗憾的是不够好.
主要问题是即使相关关键字中的单字母更改也会产生巨大差异,但要检测哪些是相关关键字并不容易.例如,考虑三个产品名称:
联想T400
联想R400
新联想T-400,酷睿2双核
任何标准前两个是可笑的类似字符串(好吧,soundex可能有助于在这种情况下消除T和R,但名称可能同样是400T和400R),第一个和第三个是相互远离的字符串,但是是相同的产品.
显然,匹配算法不能100%精确,我的目标是自动匹配大约80%的名字,具有很高的信心.
非常感谢任何想法或参考
我想在Mongo DB中的特定字段启用文本搜索.我想在python( - > pymongo)中实现这个搜索.当我按照互联网上的说明操作时:
db.foo.ensure_index(('field_i_want_to_index', 'text'), name="search_index")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Traceback (most recent call last):
File "CVE_search.py", line 8, in <module>
db.foo.ensure_index(('field_i_want_to_index', 'text'), name="search_index")
File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 1599, in ensure_index
return self.create_index(key_or_list, cache_for, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 1466, in create_index
index_doc = helpers._index_document(keys)
File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 100, in _index_document
for (key, value) in index_list:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
在pymongo中创建索引有不同/更好的方法吗?
fuzzy-search ×10
algorithm ×2
string ×2
apache-spark ×1
c# ×1
indexing ×1
lucene ×1
mongodb ×1
postgresql ×1
pymongo ×1
pyspark ×1
python ×1
r ×1
search ×1
sql ×1
text-search ×1