【问题标题】:Find closet string in java在java中查找最近的字符串
【发布时间】:2020-06-05 21:46:39
【问题描述】:

我正在尝试从一个文本文件中查找另一个文本文件中存在的字符串。我有 2 个文本文件,file1.txtfile2.txt,其内容如下:

file1.txt

Hello
Second Line
Text line
Final Line

file2.txt

Final Linee
Text llline
line 3 of file2
Helloo

我的代码如下:

public class Regex {
public static void main (String[] args) throws IOException{
    BufferedReader inputFile= new BufferedReader(new FileReader("file1.txt"));

    String line;
    String pattern;

    while((line = inputFile.readLine()) != null){
        System.out.println(line);
        BufferedReader patternsFile = new BufferedReader(new FileReader("file2.txt"));
        while ((pattern = patternsFile.readLine()) != null){

            Pattern r = Pattern.compile(pattern);
            System.out.println(r);

            Matcher m = r.matcher(line);

            if (m.find()){
                System.out.println("Line corresponding to pattern in file1.txt : " + line);
            }
        }
    }
}

但是,上面的代码返回 file1.txt 中与 file2.txt 中的 some 模式匹配的所有行。但是,我想找到编辑距离为 n 个字母的最接近的字符串。例如,如果 n=1,那么输出应该是:

Hello
Final Line

如果 n=2 那么它应该输出

Hello
Final Line
Text line

我是从 Java 开始的,完全没有这方面的经验。因此,我们将不胜感激。

谢谢

【问题讨论】:

  • @ArvindKumarAvinash 我认为这个问题可以使用 levenshtein 距离来解决,其中 levenshtein 是 n 如上所述。我并没有将自己限制在 RegEx,任何其他可能有用的算法都可以。正如下面提到的Snix,我可以使用余弦距离不会那么容易使用。

标签: java


【解决方案1】:

好的,我可以给两个建议。

  • 首先,如果您正在编写文本分析器或类似的东西,或者您需要一些强大的匹配功能,您可能需要查看Apache Lucene
  • 其次,如果您正在寻找更“最小”的东西,您可以实现一个 Cosine Similarity 算法,它真的很有趣,应该好好看看。
    然后您可以重新实现它并适应您的代码。
    你可以在Apache Common Text 找到一个实现

【讨论】:

  • 我已经下载并导入了包含 LevenshteinDistance 类的 apcahe.commons jar 文件,但无法在我的代码中调用它。我该如何使用它?任何想法
  • 是的,LevenshteinDistance.getDefaultInstance().apply(str1, str2); 这是一个单例类,你不应该在它上面创建一个实例:D
  • 谢谢。我想通了,尽管我使用 DID 的网站创建了它的一个实例,这让我感到困惑。我大约 2 小时前删除了我的评论,但我想它没有被删除。无论如何感谢您的帮助。虽然我不得不说使用 Apache Lucene 是一个巨大的痛苦,因为我找不到 jar 文件或导入它。 Python 对我来说使用起来非常容易,这对我来说真的很令人沮丧。但仍然是一种独特的体验:)
  • @SteviG 很高兴能帮上忙!如果您觉得我的回答对您有用,请随时接受。 :-)
猜你喜欢
  • 1970-01-01
  • 2019-12-10
  • 2014-02-04
  • 1970-01-01
  • 2017-07-13
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多