如何在JavaScript中对字符串进行多术语近似匹配搜索?
多模式精确/近似字符串匹配实现方案咨询
我有一个字符串S和一个字符串列表allItems,其中allItems有以下约束:
- 列表中的字符串可能包含共同的"子词"
- 任意元素都不会是另一个元素的扩展(即不存在一个元素是另一个元素的前缀+后缀组合)
约束示例
合理示例:
// 二者均包含Fuzzy,但Fuzzy不在allItems中 const allItems = ["FuzzyBunny", "FuzzyBear"];
不合理示例:
// 因allItems[i] = 任意前缀+allItems[j]+任意后缀 const allItems = ["Fuzzy", "FuzzyBear", "FuzzyBunny", "FuzzyBearBunny"];
需求目标
找到allItems中所有字符串在S中的精确或近似匹配项,并获取以下信息:
- 匹配到的字符串内容
- 该字符串在
allItems中的索引(matchIndex) - 匹配在
S中的起始索引和结束索引
示例
输入:
S = "I love FuzzyBears and FuzzyDucks"; allItems = ["FuzzyBear", "FuzzyDuck"];
输出:
[ { match: "FuzzyBear", matchIndex: 0, startIndex: 7, endIndex: 16 }, { match: "FuzzyDuck", matchIndex: 1, startIndex: 22, endIndex: 31 } ]
当前进展与诉求
我对模式匹配领域比较陌生,原本想使用类似Aho-Corasick的多模式匹配算法,但该算法不支持近似匹配。
后来了解到模糊化Aho-Corasick自动机的相关理论,但不知道如何用JavaScript实现它。另外,这是一次性运行的需求,不介意代码运行速度慢,希望能获得推荐的算法编码资源或实现思路。
内容的提问来源于stack exchange,提问作者Apoqlite
相关产品推荐
相关产品推荐

