首页 > 解决方案 > 如何在javascript中找到两个文本之间的相似序列

问题描述

我正在尝试比较两个不同的文本以存储相似的序列。但是,我很难找到一种方法来做到这一点。我正在寻找的是这样的:

假设我们有两个文本:

文本 1:“Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in "

文本 2:“嗨,我正在寻找学习编程的课程。Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。Exceptioneur sint occaecat idk 我应该在这里写下什么。

我想在两个文本中获得相似的序列。在这种情况下,它是:

“Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。”

但是有两个规则:

1 - 相似性应该由一组句子组成(所以他们必须至少造一个句子);任何不能构成完整句子的内容都应该被忽略。

例如,这应该存储:“Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。”

但不是紧随其后的三个单词序列:“Excepteur sint occaecat”

2 - 日常表达应该被忽略。(例如:“希望尽快收到您的来信”、“上帝保佑您”等)

我该如何编程这个算法,有什么办法吗?

标签: javascriptalgorithmsimilarity

解决方案


请使用此代码。

//You can add more expressions
const everyday_expressions = ["Hello.", "Hope to hear from you soon", "God bless you"];

const text1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est here.";
const text2 = "Hi, I'm looking for a course to learn programming. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat idk what I'm supposed to write down here.";

const arr_text1 = text1.split(".").map(val=>val.trim()+".");
const arr_text2 = text2.split(".").map(val=>val.trim()+".");

const result = arr_text1.filter(val => (val.length > 1 && arr_text2.indexOf(val) > -1) && everyday_expressions.indexOf(val) == -1);
console.log(result);

推荐阅读