当前位置:首页 > JavaScript

js实现fuzzywuzzy

2026-04-05 18:48:00JavaScript

JavaScript 实现模糊字符串匹配(FuzzyWuzzy)

使用 fuzzball.js

fuzzball.js 是 Python fuzzywuzzy 的 JavaScript 移植版本,支持多种模糊匹配算法。

安装:

npm install fuzzball

使用示例:

js实现fuzzywuzzy

const fuzzball = require('fuzzball');

const string1 = "hello world";
const string2 = "hello there";

// 简单比率比较
const ratio = fuzzball.ratio(string1, string2);
console.log(`Ratio: ${ratio}`);

// 部分比率比较(子字符串匹配)
const partialRatio = fuzzball.partial_ratio(string1, string2);
console.log(`Partial Ratio: ${partialRatio}`);

// 令牌排序比率(忽略单词顺序)
const tokenSortRatio = fuzzball.token_sort_ratio(string1, string2);
console.log(`Token Sort Ratio: ${tokenSortRatio}`);

// 令牌集比率(匹配重复单词)
const tokenSetRatio = fuzzball.token_set_ratio(string1, string2);
console.log(`Token Set Ratio: ${tokenSetRatio}`);

使用 fast-fuzzy

fast-fuzzy 是另一个高性能的模糊搜索库,支持 Unicode 和多种匹配选项。

安装:

js实现fuzzywuzzy

npm install fast-fuzzy

使用示例:

const { fuzzy } = require('fast-fuzzy');

const options = {
  threshold: 0.6,          // 匹配阈值
  ignoreCase: true,        // 忽略大小写
  normalizeWhitespace: true // 标准化空格
};

const result = fuzzy("hello", "hlelo", options);
console.log(`Match score: ${result}`);

自定义实现(Levenshtein 距离)

如果需要轻量级实现,可以使用 Levenshtein 距离算法:

function levenshteinDistance(a, b) {
  const matrix = [];
  for (let i = 0; i <= b.length; i++) {
    matrix[i] = [i];
  }
  for (let j = 0; j <= a.length; j++) {
    matrix[0][j] = j;
  }
  for (let i = 1; i <= b.length; i++) {
    for (let j = 1; j <= a.length; j++) {
      if (b.charAt(i - 1) === a.charAt(j - 1)) {
        matrix[i][j] = matrix[i - 1][j - 1];
      } else {
        matrix[i][j] = Math.min(
          matrix[i - 1][j - 1] + 1,
          matrix[i][j - 1] + 1,
          matrix[i - 1][j] + 1
        );
      }
    }
  }
  return matrix[b.length][a.length];
}

function similarity(a, b) {
  const distance = levenshteinDistance(a, b);
  return 1 - distance / Math.max(a.length, b.length);
}

console.log(similarity("kitten", "sitting")); // ~0.57

应用场景选择

  • 简单字符串比较:使用 fuzzball.ratio 或 Levenshtein 距离
  • 包含子字符串的匹配:使用 fuzzball.partial_ratio
  • 单词顺序不同的文本:使用 fuzzball.token_sort_ratio
  • 大数据集搜索:使用 fast-fuzzy 的性能优化版本

所有方案都支持处理 Unicode 字符,但需要注意不同库对特殊字符(如标点符号)的处理方式可能不同。

标签: jsfuzzywuzzy
分享给朋友:

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…