gpt4 book ai didi

javascript - 如何模糊地检查字符串中的子字符串?

转载 作者:行者123 更新时间:2023-11-29 23:19:31 25 4
gpt4 key购买 nike

我有一个字符串 akstr = My name is khan 我想知道 akstr 是否包含 My name 我可以轻松做到但是如果我想检查 akstr 是否包含 My nama 且拼写错误很小,我希望将 True 作为输出。可以使用 javascript 完成吗?

最佳答案

如果你使用node.js,你可以使用npm包natural .它用于自然语言处理应用程序。它有一套计算字符串距离的方法。这意味着 My name 的 94% 等于 My nama。您可以基于此创建模糊算法。一个例子:

const natural = require('natural');
let distance = natural.JaroWinklerDistance("My name", "My nama");
console.log(distance);

打印 0.9428571428571428

您可能还会在其中发现其他有趣的内容,例如拼写检查和近似字符串匹配。

我只使用 javascript 编写了一个简单的模糊包含方法,其中包含三个输入。第一个是完整字符串,第二个是子字符串,第三个是允许的错误。在错误 2 的这种情况下,您允许子字符串有 2 个不同的字符。使用 0 您将获得正常的 contains 方法。您还可以更改计算错误的方式(可能是基于子字符串长度的百分比)。我从这里使用了 levenstein 方法的代码:https://gist.github.com/andrei-m/982927

function levenstein(a, b) {
var m = [], i, j, min = Math.min;

if (!(a && b)) return (b || a).length;

for (i = 0; i <= b.length; m[i] = [i++]);
for (j = 0; j <= a.length; m[0][j] = j++);

for (i = 1; i <= b.length; i++) {
for (j = 1; j <= a.length; j++) {
m[i][j] = b.charAt(i - 1) == a.charAt(j - 1)
? m[i - 1][j - 1]
: m[i][j] = min(
m[i - 1][j - 1] + 1,
min(m[i][j - 1] + 1, m[i - 1 ][j] + 1))
}
}

return m[b.length][a.length];
}
function fuzzyContains(a, b, error) {
var matchLength = a.length - b.length;
var distanceToMatch = levenstein(a, b) - matchLength;
if(distanceToMatch - error > 0) {
return false;
} else {
return true;
}
}
console.log(fuzzyContains("hello world entire", "worlf", 1))

关于javascript - 如何模糊地检查字符串中的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com