如何比较Java中几乎相似的字符串?(弦距离测量)

如何比较Java中几乎相似的字符串?(弦距离测量),java,string,comparison,levenshtein-distance,string-metric,Java,String,Comparison,Levenshtein Distance,String Metric,我想比较两个字符串,得到它们有多相似的分数。 例如“句子几乎相似”和“句子相似” 我不熟悉Java中现有的方法,但对于PHP,我知道最基本的方法 Java中有更好的方法吗?是的,这是一个很好的度量标准,您可以从apache commons中使用它来衡量字符串的相似程度。或者,更准确地说,需要做多少改动才能使它们保持一致 维基百科上提供了伪代码。将其转换为Java应该不是什么大问题,但它不是内置于基类库中的 还有一些算法可以度量字符串的相似性。以下Java库提供了多种比较算法(Levenshtei

我想比较两个字符串,得到它们有多相似的分数。 例如“句子几乎相似”和“句子相似”

我不熟悉Java中现有的方法,但对于PHP,我知道最基本的方法


Java中有更好的方法吗?

是的,这是一个很好的度量标准,您可以从apache commons中使用它来衡量字符串的相似程度。或者,更准确地说,需要做多少改动才能使它们保持一致

维基百科上提供了伪代码。将其转换为Java应该不是什么大问题,但它不是内置于基类库中的


还有一些算法可以度量字符串的相似性。

以下Java库提供了多种比较算法(Levenshtein、Jaro Winkler等):

  • Apache Commons Lang 3
  • Simmetrics
  • 两个库都有一个java文档(,)


    您可以在上找到Levenshtein和其他字符串相似性/距离度量的实现

    如果您的项目使用maven,安装非常简单

    <dependency>
      <groupId>info.debatty</groupId>
      <artifactId>java-string-similarity</artifactId>
      <version>RELEASE</version>
    </dependency>
    

    无耻的插件,但我也写了一个库:

    它具有所有这些功能,加上一些语音相似性功能(如果一个单词“听起来像”另一个单词,则返回true或false,而其他模糊相似性是0-1之间的数字)

    还包括dna测序算法,如Smith Waterman和Needleman Wunsch,它们是Levenshtein的广义版本


    我计划,在不久的将来,使这项工作与任何数组,而不仅仅是字符串(字符数组)。

    你说的“相似”是什么意思?发音相似?视觉上相似吗?@Astor,从这个例子来看,我认为视觉上和发音上的相似性都不是这里想要的衡量标准。这是一个“好问题”的好例子,但是那些想解决stackoverflow上所有问题的人。。。问题很清楚。为什么要关闭它?Java Mobile Edition中没有,是吗?但是谢谢你的回复!你可以和我一起使用它,只需添加jar.hmmm,不,我不太确定它是否完全适用于J2ME,它是用J2SEit编译的,它没有使用我不支持的任何东西。你可以在罐子里制作和复制。非常感谢你让我了解这个图书馆。它的功能和易用性非常有用!超级库,易于使用,效果良好。它现在在Apache commons lang中可用:GitHub上现在有一个基于它的库。它也可以在Maven Central上获得
    <dependency>
      <groupId>info.debatty</groupId>
      <artifactId>java-string-similarity</artifactId>
      <version>RELEASE</version>
    </dependency>
    
    import info.debatty.java.stringsimilarity.*;
    
    public class MyApp {
    
      public static void main (String[] args) {
        Levenshtein l = new Levenshtein();
    
        System.out.println(l.distance("My string", "My $tring"));
        System.out.println(l.distance("My string", "My $tring"));
        System.out.println(l.distance("My string", "My $tring"));
      }
    }