NodeJs文本相似度去重脚本
25-04-07
slbcun
826℃
0
文本相似度去重,是指对一批文本进行去重,只保留相似度较高的文本。相似度的度量方法有很多种,这里以编辑距离(Edit Distance)作为衡量标准。 编辑距离是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。常见的编辑距离算法有Levenshtein距离、Damerau-Levenshtein距离、Jaro距离、Jaro-Winkler距离等。 编辑距离算法的实现,可以使用动态规划算法,也可以使用暴力搜索算法。
下面是用NodeJs实现的文本相似度去重脚本
安装依赖
pnpm add natural cosine-similarity
脚本代码
const fs = require("fs"); const natural = require("natural"); const cosineSimilarity = require("cosine-similarity"); const tokenizer = new natural.WordTokenizer(); // 计算文本的词袋模型 const getVector = text => { const tokens = tokenizer.tokenize(text.toLowerCase()); const frequency = tokens.reduce((acc, token) => { acc[token] = (acc[token] || 0) + 1; return acc; }, {}); return frequency; }; // 计算两个文本的相似度 // threshold 为重复率,范围 0-1,自由设置 const isSimilar = (text1, text2, threshold = 0.2) => { const vector1 = getVector(text1); const vector2 = getVector(text2); const similarity = cosineSimilarity(vector1, vector2); return similarity >= threshold; }; // 去重函数 const deduplicateArray = arr => { const result = []; for (const item of arr) { let isDuplicate = false; for (const uniqueItem of result) { if (isSimilar(item, uniqueItem)) { isDuplicate = true; break; } } if (!isDuplicate) { result.push(item); } } return result; }; const txt = ["文本1", "文本2", "文本......", "文本999999"]; const uniqueArray = deduplicateArray(txt); // 将去重后的数据写入文件 fs.writeFile("./dataRes.txt", uniqueArray.join("\n"), err => { if (err) throw err; console.log("数据已成功写入 ./data.txt"); });