news 2026/8/25 10:03:20

fuzzball.js API 完整参考手册:TypeScript 类型定义、全部选项与评分函数清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
fuzzball.js API 完整参考手册:TypeScript 类型定义、全部选项与评分函数清单

fuzzball.js API 完整参考手册:TypeScript 类型定义、全部选项与评分函数清单

【免费下载链接】fuzzball.jsEasy to use and powerful fuzzy string matching, port of fuzzywuzzy.项目地址: https://gitcode.com/gh_mirrors/fu/fuzzball.js

fuzzball.js 是一个用于JavaScript 模糊字符串匹配(Fuzzy String Matching)的开源库,是 Python 库 fuzzywuzzy / TheFuzz 的 JS 移植版。本文是它的API 完整参考手册:基于随包附带的 TypeScript 类型定义文件,逐一讲清33 个导出函数全部 options 选项、批量搜索与模糊去重的用法,以及 lite / ultra_lite 轻量版的差异,帮助新手快速选对评分函数、配对口。

一、项目结构与类型定义文件在哪里 📁

写 TypeScript 项目时,IDE 的智能提示全部来自仓库根目录的类型声明文件:

文件说明
fuzzball.d.ts完整版类型定义(入口,package.json"types"指向它)
lite/fuzzball_lite.js轻量版实现
lite/esm/fuzzball_lite.esm.min.d.ts轻量版 ESM 类型定义
ultra_lite/fuzzball_ultra_lite.js极简版实现
ultra_lite/esm/fuzzball_ultra_lite.esm.min.d.ts极简版 ESM 类型定义
jsdocs/fuzzball.md自动生成的 API 文档(每个函数的参数表)

核心源码入口为 fuzzball.js,字符串预处理逻辑在 lib/utils.js,去重逻辑在 lib/process.js。

npm install fuzzball // 安装完整包(含类型定义)

二、评分函数完整清单:10 个打分函数怎么选 🎯

所有评分函数签名一致:函数名(str1, str2, opts?) → number,分数 0~100(distance除外)。类型定义中每个函数对应的选项接口见 fuzzball.d.ts#L198-L210。

函数作用典型场景
ratio整体相似度(默认 Levenshtein 距离计算)两个短语整体打分
distance原始 Levenshtein 编辑距离(0 以上,越小越像)只需要差异大小
partial_ratio长串中的最佳子串 vs 短串查询词是目标串的一部分
token_sort_ratio按字母排序单词后再比词序不同但词相同
token_set_ratio取交集/差值三种组合的最高分一侧多出若干词
token_similarity_sort_ratio按相似度(而非字母)排序单词词首字母不同的近似词
partial_token_sort_ratio子串 + 单词排序组合场景
partial_token_set_ratio子串 + token 集合组合场景
partial_token_similarity_sort_ratio子串 + 相似度排序组合场景
WRatio按两串长度比例自动加权取多个算法的最高分"不知道用哪个"时的通用选择

💡 直觉示例:"fuzzy wuzzy was a bear"vs"wuzzy fuzzy was a bear"ratio只得 91 分,而token_sort_ratio得 100 分——词序混乱就交给 token 系函数。

三、全部 Options 选项速查表 ⚙️

选项通过第三个参数传入,接口继承关系为FuzzballBaseOptions(基础)→ 各函数扩展接口。

3.1 基础选项(FuzzballBaseOptions,所有函数可用)

选项类型 / 默认值说明
full_processboolean /true打分前做清洗:转小写、非字母数字变空格
force_asciiboolean /false清洗时直接删除非 ASCII 字符(需full_process为 true)
collapseWhitespaceboolean /true连续空白合并为一个空格
useCollatorboolean /falseIntl.Collator做 locale 敏感比较(如ä匹配a),有性能开销
wildcardsstring指定通配符字符集(如"*x"),计算编辑距离时这些字符可匹配任意字符
astralboolean /false正确处理 Emoji 等非 BMP(星界)符号,否则会被当成多个字符
normalizeboolean归一化 Unicode 表示;astral: true时默认开启

3.2 各函数专属选项

接口选项默认值说明
FuzzballRatioOptionsratio_alg"levenshtein"改用"difflib"算法(基于匹配字符数,非最短编辑距离)
FuzzballRatioOptionsautojunktruedifflib 的"自动 junk"启发式开关
FuzzballTokenSetOptionstrySimple把 simple/partial ratio 也纳入 token set 的打分组合
FuzzballTokenSetOptionssortBySimilaritytoken 按相似度排序而非字母序(token_set_ratio也可用)
FuzzballExtractOptionsscorerratio自定义打分函数
FuzzballExtractOptionsprocessor从对象候选中提取用于打分的字符串
FuzzballExtractOptionslimit/cutoff0 / 0最多返回条数 / 最低分数门槛
FuzzballExtractOptionsreturnObjectsfalse返回{choice, score, key}对象数组而非元组
FuzzballAsyncExtractOptionsabortController/cancelToken/asyncLoopOffset— / — / 256异步取消控制;两次异步让出之间的循环次数
FuzzballDedupeOptionskeepmapfalse去重结果附带每个唯一项的匹配明细

类型定义中这些接口的完整声明见 fuzzball.d.ts#L1-L94。

四、批量搜索 API:extract 三兄弟 🔍

从候选列表里找出最匹配的前 N 名,三个入口(类型签名见 fuzzball.d.ts#L212-L225):

函数风格说明
extract(query, choices, opts)同步候选是字符串数组时返回[choice, score, index];是对象时返回[choice, score, key]
extractAsync(query, choices, opts, callback)回调内部循环非阻塞,适合大列表
extractAsPromised(query, choices, opts)Promise支持abortController中途取消搜索
fuzz.extract("mr. harry hood", ["Hood, Harry", "Mr. Minor", "Mr. Henry Hood"], { scorer: fuzz.token_set_ratio }); // [ ['Hood, Harry', 100, 0], ['Mr. Henry Hood', 85, 2], ['Mr. Minor', 40, 1] ]

五、模糊去重:dedupe 选项与默认值 ✂️

dedupe(contains_dupes, opts)用模糊匹配识别近似重复项,保留每组中最长(信息最全)的一条。关键行为(见 lib/process.js#L49-L62):

  • cutoff未指定时默认 70(extract 的默认是 0);
  • limit在 dedupe 中会被忽略并打印警告;
  • 注意反直觉点:cutoff 越低 → 判定为重复的越多 → 结果列表越短
  • keepmap: true时第三项返回该唯一项对应的全部extract匹配明细。

六、预处理工具函数(性能优化利器)⚡

函数作用
full_process(str, opts?)独立执行清洗,可对候选列表预先处理后设full_process: false提速
process_and_sort(str)分词 + 排序 + 拼接,配合proc_sorted: true复用
unique_tokens(str, opts?)分词去重,配合tokens: [t1, t2]传给 token_set 打分函数

实现细节见 lib/utils.js#L18-L30。

七、lite 与 ultra_lite:类型定义的差异对比 🪶

三个版本压缩后体积约为15.1 kB / 6.3 kB / 4.0 kB。对照各.d.ts可知:

能力完整版liteultra_lite
partial_ratio等 5 个 partial 函数
token_similarity_sort_ratio/WRatio
astral(Emoji 安全)
useCollator排序比较
dedupe
非 ASCII 字母数字检查保留保留会剥离非 ASCII

按需引入即可:fuzzball/litefuzzball/ultra_lite(exports 配置见 package.json#L9-L26)。

八、新手常见问题 FAQ ❓

  1. 默认打分函数是什么?extract未指定scorer时默认ratio;想要"万金油"可显式传WRatio
  2. 打分偏低怎么办?先确认full_process清洗是否帮你/害了你;词序问题换token_sort_ratio,子串场景换partial_ratio,整体拿不准用WRatio
  3. difflib 模式能开通配符吗?不能,ratio_alg: "difflib"wildcardsuseCollator均不支持。
  4. 通配符大小写?默认大小写不敏感;full_process: false时敏感,且astral: true时通配符整体不可用。

📌 本手册与源码同步版本对应package.json中的 v2.2.6;每个函数的完整参数表可查阅自动生成的 jsdocs/fuzzball.md。

【免费下载链接】fuzzball.jsEasy to use and powerful fuzzy string matching, port of fuzzywuzzy.项目地址: https://gitcode.com/gh_mirrors/fu/fuzzball.js

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 10:01:00

UniApp全局字体调节方案:基于Rem与Vuex的跨平台实现

1. 项目概述:为什么我们需要全局字体调节功能?在移动应用开发中,用户体验的细微差别往往决定了产品的成败。最近在做一个面向中老年用户的健康管理类UniApp项目时,我们收到了大量反馈:默认字体太小,阅读起来…

作者头像 李华
网站建设 2026/8/25 9:57:10

如何快速上手Cactus:5分钟用Docker跑通第一次基因组多序列比对

如何快速上手Cactus:5分钟用Docker跑通第一次基因组多序列比对 【免费下载链接】cactus Official home of genome aligner based upon notion of Cactus graphs 项目地址: https://gitcode.com/gh_mirrors/cact/cactus Cactus 是一款基于 Cactus 图的无参考基…

作者头像 李华