如何在JavaScript中实现句子间词汇相似度检测及匹配词汇获取?
JavaScript句子词汇相似度检测解决方案
要实现你需要的词汇匹配逻辑,核心是统一大小写+词汇级别的交集检测,之前的方法没成功大概率是没处理大小写和词汇拆分的问题。下面是具体实现:
实现思路
- 统一转换为小写,避免大小写差异导致匹配失败
- 把句子拆分为独立词汇数组(自动过滤标点、多余空格)
- 用集合(Set)快速查找两个句子的共同词汇
- 返回匹配状态和所有匹配的词汇
代码实现
function checkWordSimilarity(mastersentences, keywordsentences) { // 辅助函数:将句子转为小写并拆分为词汇集合 const getWordSet = (sentence) => { // 去除标点、转小写、拆分为词汇数组,再转成Set去重 return new Set( sentence.toLowerCase().split(/\W+/).filter(word => word.trim() !== '') ); }; const masterWords = getWordSet(mastersentences); const keywordWords = getWordSet(keywordsentences); const matchedWords = []; // 遍历关键词集合,找主句子里的共同词汇 for (const word of keywordWords) { if (masterWords.has(word)) { matchedWords.push(word); } } return { isMatch: matchedWords.length > 0, matchedWords: matchedWords }; } // 测试你的示例 let mastersentences = "Gambir, Kecamatan Gambir, Kota Jakarta Pusat, Daerah Khusus Ibukota Jakarta"; let keywordsentences = "DKI JAKARTA"; const result = checkWordSimilarity(mastersentences, keywordsentences); console.log(result.isMatch); // true console.log(result.matchedWords); // ['jakarta']
代码说明
split(/\W+/):用非单词字符(标点、空格等)拆分句子,自动处理逗号、空格分隔的情况filter(word => word.trim() !== ''):过滤拆分后可能出现的空字符串- Set的
has()方法可以快速判断词汇是否存在,效率比数组遍历更高 - 返回结果包含匹配状态和所有匹配的词汇,满足你获取匹配词汇的需求
为什么之前的方法没生效?
includes()/indexOf():是子字符串匹配,且区分大小写,比如原例子中"DKI JAKARTA"的大写"JAKARTA"和主句子里的"Jakarta"大小写不一致,直接用会返回false;而且如果关键词是"arta",也会误判为匹配match()/search():默认也是区分大小写,且需要正则表达式配合才能实现词汇级匹配,单独用无法直接满足需求
内容的提问来源于stack exchange,提问作者riski
相关产品推荐
相关产品推荐

