【发布时间】:2020-07-02 08:05:54
【问题描述】:
有很多库提供模糊字符串搜索功能,您可以在其中提供输入字符串,然后搜索“足够接近”的字符串。
例如,如果您输入单词cat,您可能会得到:
- 猫 (100%)
- 帽子
- 老鼠
- 猫
- 等
除了对象之外,还有什么功能吗?一种算法,它采用两个对象并比较不是它们是否相似(这很简单并且已经完成),而是而是比较它们的相似程度。相似程度可以是从 0 到 100% 的百分比,其中 100% 是完全匹配,而 0% 根本不相似,或者它可以是一个数字,例如 https://en.wikipedia.org/wiki/Levenshtein_distance,其中 0 是完全匹配,而number 将是“接近度”,没有上限。
例如,如果我有一个对象(javascript):
const a = {
name: 'John Doe',
age: 18
}
如果我将它与另一个对象进行比较:
const b = {
name: 'Some random name',
age: 5
}
你会得到一些不是 0 的分数。我不确定你会得到什么值,这取决于你将使用什么评分系统(0-100% 或 x >= 0)
但是,与将 a 与 b 进行比较相比,将其与完全不同的事物进行比较,例如:
const c = {
foo: 0
}
这里的对象几乎完全不相似。所以这里的分数会更差(对于 0-100%,它会是一个较小的数字,对于 x>=0,它会是一个更高的数字,而不是 a 与 b 相比)。
是否有任何现有的算法或库可以实现这样的目标?特别是在javascript中?
我发现了一些可能与此类似的库,但我添加了批评:
- https://github.com/hath995/fuzzyEqual(javascript,似乎已经过时,可能效率不高)
- https://github.com/intuit/fuzzy-matcher(java,看起来质量很高,但只适用于java)
【问题讨论】:
标签: javascript algorithm fuzzy-search