- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有很多库提供模糊字符串搜索功能,您可以在其中给出输入字符串,然后搜索“足够接近”的字符串。
例如,如果您输入单词cat
,您可能会得到:
除了对象之外,还有什么功能吗?一种算法,它采用两个对象并比较不是它们是否相似(这很简单并且已经完成),而是比较它们的相似程度。相似度可以是从 0 到 100% 的百分比,其中 100% 是完全匹配,0% 根本不相似,也可以是一个数字,例如 https://en.wikipedia.org/wiki/Levenshtein_distance其中 0 表示完全匹配,数字表示“接近度”,没有上限。
例如,如果我有一个对象(javascript):
const a = {
name: 'John Doe',
age: 18
}
如果我将它与另一个对象进行比较:
const b = {
name: 'Some random name',
age: 5
}
你会得到一些不会是 0 的分数。我不确定你会得到什么值,这取决于你将使用什么评分系统(0-100% 或 x >= 0)
但是,与将 a 与 b 与完全不同的东西进行比较相比,比较 a 和 b 的结果会更接近,例如:
const c = {
foo: 0
}
这里的对象几乎一点也不相似。所以这里的分数会更差(对于 0-100%,它会是一个较低的数字,对于 x>=0,它会是一个比 a 和 b 更高的数字)。
是否有任何现有的算法或库可以实现这样的目标?特别是在 JavaScript 中?
我发现了一些可能与此类似的库,但加上了我的批评:
最佳答案
如果对象最终由可序列化的值组成(没有类实例或函数),一种选择是将它们字符串化,然后对这些字符串使用相同类型的“模糊搜索”算法:
const a = {
name: 'John Doe',
age: 18
};
const b = {
name: 'Some random name',
age: 5
};
const c = {
foo: 0
};
// https://gist.github.com/andrei-m/982927
const getEditDistance = ((t,n)=>{if(0==t.length)return n.length;if(0==n.length)return t.length;var h,e,r=[];for(h=0;h<=n.length;h++)r[h]=[h];for(e=0;e<=t.length;e++)r[0][e]=e;for(h=1;h<=n.length;h++)for(e=1;e<=t.length;e++)n.charAt(h-1)==t.charAt(e-1)?r[h][e]=r[h-1][e-1]:r[h][e]=Math.min(r[h-1][e-1]+1,Math.min(r[h][e-1]+1,r[h-1][e]+1));return r[n.length][t.length]});
const diff = (obj1, obj2) => {
const str1 = JSON.stringify(obj1);
const str2 = JSON.stringify(obj2);
const dist = getEditDistance(str1, str2);
const peakDist = Math.max(str1.length, str2.length);
return (peakDist - dist) / peakDist;
}
console.log(diff(b, b));
console.log(diff(b, a));
console.log(diff(b, c));
如果您只想比较对象形状,而不是基础值,则可以在调用 JSON.stringify
时使用替换函数,将所有原始值替换为空字符串。例如,您的 a
和 b
对象都将变为 {"name":"","age":""}
,但是您的c
对象将变为 {"foo":""}
。
const a = {
name: 'John Doe',
age: 18
};
const b = {
name: 'Some random name',
age: 5
};
const c = {
foo: 0
};
// https://gist.github.com/andrei-m/982927
const getEditDistance = ((t,n)=>{if(0==t.length)return n.length;if(0==n.length)return t.length;var h,e,r=[];for(h=0;h<=n.length;h++)r[h]=[h];for(e=0;e<=t.length;e++)r[0][e]=e;for(h=1;h<=n.length;h++)for(e=1;e<=t.length;e++)n.charAt(h-1)==t.charAt(e-1)?r[h][e]=r[h-1][e-1]:r[h][e]=Math.min(r[h-1][e-1]+1,Math.min(r[h][e-1]+1,r[h-1][e]+1));return r[n.length][t.length]});
const stringify = obj => JSON.stringify(obj, (key, val) => (
typeof val === 'object' && val !== null
? val
: ''
));
const diff = (obj1, obj2) => {
const str1 = stringify(obj1);
const str2 = stringify(obj2);
const dist = getEditDistance(str1, str2);
const peakDist = Math.max(str1.length, str2.length);
return (peakDist - dist) / peakDist;
}
console.log(diff(b, b));
console.log(diff(b, a));
console.log(diff(b, c));
关于javascript - 模糊字符串搜索但针对对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60786813/
我正在学习 Javascript,我正在尝试创建一个简单的下拉菜单。我想要的功能的示例可以在 Google 主页的顶部菜单中看到,其中包含“更多”和“设置”下拉菜单。 我有一个使用 onclick()
我尝试捕捉 tinyMce 编辑器的模糊和焦点事件。 我为此找到了以下方法。 ed.onInit.add(function(ed) { tiny
这里完全被难住了。尝试一些很简单的东西,但它不起作用: $("input.input1, textarea.input1").focus(function(){ $(this).addClas
我有以下 jQuery 函数: 提交表单 $(".content").delegate('.entryButton','click', function() {var form = $(this).c
如何使用 jQuery 在焦点/模糊上切换元素的 CSS? $('.answerSpace').bind('blur', function(){ $('.normProf').toggleClass(
在我的 iPhone 应用程序中,我有一个黑白 UIImage。我需要模糊该图像(高斯模糊即可)。 iPhone 显然知道如何模糊图像,如 it does that when it draws sha
这个问题已经有答案了: Blurring an image via CSS? (6 个回答) 已关闭 7 年前。 我有一个场景。我想随着循环的进行模糊我的图像。我怎样才能做到这一点?这是我的代码。
这个错误是在子字符串方法上抛出的,我发现很多线程都在处理这个问题,但我遇到的问题似乎有所不同。我知道如果您的字符串短于子字符串(开始,结束)大小,它会抛出此错误,但在任何内容传递到方法调用之前都会抛出
是否有简单的解决方案可以在 Qt 中为图像添加运动模糊?还没有找到任何关于模糊的好教程。我需要一些非常简单的东西,我可以理解,如果我可以改变模糊角度,那就太好了。 最佳答案 Qt 没有运动模糊过滤器。
我的搜索框在正常状态下很小。焦点对准时,它会展开,并显示一个提交按钮。这样做是为了节省空间。现在,在模糊时,搜索框再次缩小,提交按钮消失。 问题是,通过使提交按钮成为“竞赛”以在正确的位置单击它,对提
您好,我正在使用 PngBitmapEncoder 从 Canvas 在内存中创建图像。 public void CaptureGraphic() { Canvas canvas = new
我已经搜索过谷歌、这个和其他论坛,但无济于事……太棒了,有没有可能有像 onMiddleClick="blur();"这样的东西?在单击鼠标中键时隐藏链接的焦点边框? 最佳答案 $('a').clic
我无法在我的应用程序中正确渲染我的纹理。我使用的艺术品是精确的,并且已经缩放且尺寸合适,但是当我在手机上渲染它时,我的纹理突然不如原始艺术品清晰/精确,我不明白为什么。 有人遇到过这个问题吗? 最佳答
这里有与上述主题相同的问题但没有得到答复 我这里有布局 我需要在底部布局中使用与顶部布局相同的图像,但使用模糊样式 设置 alpha 没有帮助 - TextView 也会影响 如何虚化down布局的背
我已经搜索了一段时间,但到目前为止没有找到适合我需要的东西。 ( This was helpful, but not convincing ) 从两个不同的来源,我得到两个不同的字符串。我想检查较短的
我有这样的代码: var passwordTextBox = angular.element("#password"); passwordTextBox.blur(function()
设置此 JQuery 函数无法正常工作。有时,如果我单击元素,什么也没有发生,并且它会触发隐藏可折叠菜单的功能,如果单击文档上的任意位置,则不会重定向到正确的 href。有什么更好的方法吗? HTML
尝试通过将坐标列表保存到数组来在多个位置裁剪我的图像后,裁剪区域中的字母变得非常模糊,我无法弄清楚原因。 原图看起来像 裁剪后的图像看起来像 题中代码如下: import numpy as np im
我知道我们可以调暗/模糊屏幕,如 this post 所示. 我应该怎么做才能使它的一部分变暗/模糊,使单个(或多个) View 没有任何效果,从而使整个屏幕具有突出显示 View 的效果? 此外,即
如果有人曾经向 digg 提交过故事,它会检查该故事是否已经提交,我假设是通过模糊搜索。 我想实现类似的东西,想知道他们是否使用开源的 php 类? Soundex 不这样做,句子/字符串的长度可达
我是一名优秀的程序员,十分优秀!