识别 java 中具有相同含义的字符串

Identify strings with same meaning in java

我有以下问题。我想识别 java 中具有相似含义的字符串。 我试图用 Stringmetrics 计算字符串之间的相似度。 这按预期工作,但我需要更方便的东西。

例如,当我有以下 2 个字符串(1 个单词)时:

String s1 = "apple";
String s2 = "appel";

那么这2个字符串非常相似。当我使用余弦相似度时,我得到以下结果:

double score = cosine.compare(s1, s2); // 0.0

但是当我使用 damerau-levenshtein 相似度时,我得到以下结果:

double score = damerauLevenshtein.compare(s1, s2); // 0.8

下一个问题是单词有很多同义词。使用 Stringmetrics 时,不考虑这些同义词。

例如,这两个字符串应该被认为是相同的:

String s3 = "purchase 10 bottles of water";
String s4 = "buy 10 waterbottles";

希望大家能帮帮我。

Levenshtein 距离(编辑距离)就像 phone 中的自动更正。以你的例子为例,我们有 appleappel。如果您将 adding/removing/replacing 视为单个字母,那么这些词彼此之间有点接近,我们在这里需要做的就是交换 el(实际上将 e 替换为 lle)。如果您有其他词,例如 applrappee - 这些更接近原始词 apple,因为您需要做的只是替换一个字母。

余弦相似度完全不同 - 它计算单词,计算这些计数的向量并检查计数的相似程度,这里有 2 个完全不同的单词,所以它 returns 0。

您想要的是:这两种技术的组合 + 具有语言知识的计算机 + 另一个同义词词典,这些同义词在使用这些相似性算法之前和之后以某种方式被考虑在内。想象一下,如果你有一个句子,然后你会用同义词替换每个单词(谁记得 Joey 和 Thesaurus?)。句子可能完全不同。此外,每个单词都可以有多个同义词,其中一些同义词只能在特定上下文中使用。你的任务现在根本不可能完成,也许在未来。

P.S。如果你的任务是可能的,我认为翻译软件基本上是完美的,但我不太确定。