Java:字符串的替代品。包含可以返回相似性的
我有三根弦
String a = Hello, how are you doing?
String b = Can I as you something?
String c = Hello, how are you doing? Can I ask you something?
我的目标是评估字符串c是否是字符串a和b的合并。 请注意,字符串b中有一个拼写错误,其中“as”应该是“ask”
当前逻辑为(pesudo代码):
if
String c contains String a AND String b
then
merge = true
我遇到的问题是,如果在合并过程中字符串c发生轻微变化,字符串。contains()不再有效,因为它在检查字符串b时返回false
有没有可能/想法使用另一个有效的例子
我试过使用字符串相似性(Jaccard等),但它们不起作用,因为a、b和c的大小可能会有所不同,所以很容易/可能获得正确的相似性百分比
# 1 楼答案
没有任何内置函数(我发现)可以做到这一点,但我提出了一些东西,希望能满足您的需要。你显然可以改变这一点(我试着让它尽可能干净)
第一步:我们需要一个函数,它接收两个字符串并返回两个字符串中的差异数。我想出了一个非常简单的函数:
简而言之,我们遍历字符串,每次遇到差异时,在差异数上加一。(请注意,在开始时,我计算两个字符串的长度差,因此这也计算大小差)
第2步:我们需要另一个函数,它接收数组中的每个单词,并返回它遇到的所有差异。我想出了另一个超级简单的函数:
在这个函数中,我们只需添加字符串中每个单词之间的所有差异
最后,我们展示:
最后的代码是:
}
请让我知道这是否有帮助:)
# 2 楼答案
如何正确标记注释,必须与
Levenshtein distance
进行比较您希望使用相似性百分比来比较2个字符串,所以我们可以将这个百分比关联为字符串之间的关系距离和引用字符串的长度。所以,如果我们需要100%的相似性,我们的字符串必须是ab完全相等的,字符串之间的距离为0。相反:如果我们要求100%的相似性,我们的字符串必须是绝对不同的,我们的距离几乎和参考字符串的长度一样(或更多)
我把相似性百分比命名为
allowedDiscrepancy
,因为它的信息量更大。所以,我的代码有distance
方法来计算参考字符串和另一个字符串之间的距离,还有compareWithDiscrepancy
方法来计算相关性。看看这个,它能用