注意事项分拣事件精确集合相似度矩阵器:边界规则、可运行源码与验收

项目编号:20261023-002。公开产品简介只提供需求方向;源码、测试与合成输入独立编写,不依赖对应产品。

场景与问题边界

逐对计算集合交并集和Jaccard分数,用BigInt交叉乘法比较显式分数阈值,只标记复核候选。注意事项分拣事件精确集合相似度矩阵器面向调用者已经持有并脱敏导出的记录,不爬取网站、不访问账户,也不声称兼容某一厂商的私有导出格式。实际目的在于把一个容易被含糊处理的小规则变为可运行、可复查的本地工具:结果必须说明检查了什么、无法判断什么。相似不代表重复,缺号不代表真实丢失,轨迹合法也不代表操作确实发生。输出中的限制并不是免责填充,而是使用这类导出检查器时必须保持的解释边界。

输入契约

集合字段为最多256个唯一非空字符串,记录最多150条。thresholdNumerator/thresholdDenominator是0至1的安全整数分数,分母必须正数;阈值相等也入选。两个空集合的相似度约定为1。

{"id":"string","attentionTags":"strings"}

记录id精确匹配且全批唯一,不自动修剪标识或把字符串数字转换成数值。普通工具最多接受1000条记录,集合成对比较单独限制为150条,避免二次方结果无限膨胀;字符串数组最多256项。错误字段、重复id、负数和不安全整数会明确报错,不能把无效输入默默转成“通过”。所有示例都是可手工复核的小规模合成数据。实际导入前应主动剔除密钥、个人信息与无关字段。

合成样本与实际结果

{"thresholdNumerator":1,"thresholdDenominator":3,"records":[{"id":"a","attentionTags":["one","two"]},{"id":"b","attentionTags":["two","three"]},{"id":"c","attentionTags":[]}]}

当前实际执行的报告为:

{"pairs":[{"left":"a","right":"b","intersection":["two"],"unionSize":3,"score":{"numerator":1,"denominator":3},"meetsThreshold":true},{"left":"a","right":"c","intersection":[],"unionSize":2,"score":{"numerator":0,"denominator":2},"meetsThreshold":false},{"left":"b","right":"c","intersection":[],"unionSize":2,"score":{"numerator":0,"denominator":2},"meetsThreshold":false}],"note":"两个空集合的相似度约定为1。字符串精确匹配,不分词、不归一化、不自动合并记录。"}

核心实现

校验函数负责输入类型和规模,分析函数只实现本项目的一种规则。不同报告不共享不透明的计分器,也不把界面上的标签伪装成真正计算。排序使用明确码元顺序,避免对默认locale的隐含依赖;分析复制数组,不修改调用者记录。需要比较整数分数时用BigInt交叉乘法,不能用可能掩盖边界的浮点近似。以下为压缩包实际核心源码,页面与Node报告脚本直接导入同一个模块。

exportconstMETA={"id":"20261023-002","title":"注意事项分拣事件精确集合相似度矩阵器","focus":"逐对计算集合交并集和Jaccard分数,用BigInt交叉乘法比较显式分数阈值,只标记复核候选"};exportconstCFG={"kind":"jaccard","amount":"reviewUnits","tokens":"attentionTags","hit":"reviewedEvents","total":"allEvents","path":"triageStates","stream":"attentionStream"};exportconstSCHEMA={"id":"string","attentionTags":"strings"};exportconstSAMPLE={"thresholdNumerator":1,"thresholdDenominator":3,"records":[{"id":"a","attentionTags":["one","two"]},{"id":"b","attentionTags":["two","three"]},{"id":"c","attentionTags":[]}]};functionvalidated(input){constmaximum=CFG.kind==='jaccard'?150:1000;if(!input||typeofinput!=='object'||Array.isArray(input)||!Array.isArray(input.records)||input.records.length>maximum)thrownewTypeError('必须提供records数组,当前上限'+maximum+'条');constseen=newSet();returninput.records.map(r=>{if(!r||typeofr!=='object'||Array.isArray(r))thrownewTypeError('记录必须是对象');for(const[k,t]ofObject.entries(SCHEMA)){constv=r[k];if(t==='strings'||t==='path'){if(!Array.isArray(v)||v.length>256||v.some(s=>typeofs!=='string'||!s.trim())||(t==='strings'&&newSet(v).size!==v.length)||(t==='path'&&v.length===0))thrownewTypeError('字符串数组字段错误:'+k);}elseif(typeofv!==t||(t==='string'&&!v.trim())||(t==='number'&&(!Number.isSafeInteger(v)||v<0)))thrownewTypeError('字段错误:'+k);}if(seen.has(r.id))thrownewRangeError('重复id:'+r.id);seen.add(r.id);returnr;}).slice().sort((a,b)=>a.id<b.id?-1:a.id>b.id?1:0);}exportfunctionanalyze(input){constrows=validated(input),p=input.thresholdNumerator,q=input.thresholdDenominator;if(!Number.isSafeInteger(p)||!Number.isSafeInteger(q)||p<0||q<=0||p>q)thrownewRangeError('阈值必须为0至1的非负整数分数');constpairs=[];for(leti=0;i<rows.length;i++)for(letj=i+1;j<rows.length;j++){consta=newSet(rows[i][CFG.tokens]),b=newSet(rows[j][CFG.tokens]);constintersection=[...a].filter(x=>b.has(x)).sort(),unionSize=newSet([...a,...b]).size,n=unionSize?intersection.length:1,d=unionSize||1;pairs.push({left:rows[i].id,right:rows[j].id,intersection,unionSize,score:{numerator:n,denominator:d},meetsThreshold:BigInt(n)*BigInt(q)>=BigInt(p)*BigInt(d)});}return{pairs,note:'两个空集合的相似度约定为1。字符串精确匹配,不分词、不归一化、不自动合并记录。'};}

运行与测试结果

使用Node.js 18或以上版本,无第三方运行依赖。在project目录执行npm test,实际调用node --test;执行npm run report,生成dist/report.json与dist/report.html。浏览器演示应先运行python3 -m http.server 8080,再访问http://localhost:8080并点击“运行分析”。直接双击HTML可能触发file协议的模块限制,不应据此把服务端未启动误报成算法故障。

本次执行8项自动化测试通过,包含样本的具体数值与结构结果、算法专属边界、非法顶层、缺失字段、错误字段类型、重复id、输入不可变性,以及换序后结果一致。测试源码位于test/,实际命令输出在docs/测试输出.txt。这些证据证明列出的合成案例通过,不证明所有业务数据都正确。尤其状态配置来自调用者,工具不会把一份错误的规则表变成正确的真实业务规范。

真实截图如何核验

浏览器通过本地静态服务打开项目,点击运行后将页面#output中的JSON与Node生成的报告逐项比较,再截取screenshots/运行效果.jpg。画面包含项目编号、输入与实际分析结果,不是绘制的总结图片,也不是第三方官方截图。browser-evidence.json保存捕获时刻和源码、图片的SHA-256;更改源码后应重跑并重新截图,旧证据不能为修改后的文件背书。

限制与扩展

顺序切批不会重新优化任务顺序,集合相似只衡量精确字符串交并关系,状态迁移只检查显式轨迹,分数核验不代表统计显著性,断号检测也无法判断上游采集是否完整。程序不发送请求、不执行部署、不变更流程状态、不合并记录、不实施业务筛选。不能将候选列表、通过标识或数学比例冒充平台官方结论或效果承诺。

所有分析在内存中执行,未做生产压力测试,不提供访问控制、持久存储或多人权限。页面使用textContent显示结果,离线HTML报告进行基础转义,但这不等于完整安全审计。若要扩展CSV导入或可变字段映射,应先补一个预期失败的反例,明确规模与单位,再实现功能。输出格式改变时同步修订测试、README和截图,避免文章与可运行代码逐渐脱节。

源码资源与授权

配套原创源码资源采用独立提交轨道。目前因资源作者认证及已知付费上传额度门禁,尚未获得平台正式接受,不能声称已进入审核;门禁解除后再提交。当前没有可核验的公开下载地址,不虚构链接。平台资源可用后才回填官方URL,并尝试原生资源卡。每包包含README、MIT LICENSE、原创授权声明、合成数据、自动化测试和真实运行截图,不包含热点产品的代码、权重、品牌素材、官方截图或受限内容。

标签:JavaScript、JSON、集合算法