2017-04-21 84 views
2

我正在研究一个将比较两个字符串并挑选出类似短语和单词的项目。如何在Java中搜索相似的单词和短语?

例如,请阅读以下两个问题。

问题1:这本小说的主角经常在Celeste经营的咖啡馆吃饭。它开始与主角参加​​他的母亲的葬礼,并没有表现出悲伤的迹象。对于10分,Meursault在阿尔伯特加缪的小说中在沙滩上射击阿拉伯人?

问题2:本书中的角色与他的朋友Emmanuel一起在消防车上跳跃,经常在Celeste's吃午餐。它开始于主角的母亲的葬礼,他不哭。对于10分,请将这部小说命名为Meursault因阿尔伯特加缪而被无辜地射杀阿拉伯人而死的故事。

我想让程序挑出“Celeste”以及小说“从葬礼开始”的事实。我怎么做到这一点?我只是寻找一些资源的一些指针。 (我正在使用Java)。

+1

结帐Levenshtein算法,这是对这个职位描述:http://stackoverflow.com/questions/6087281/similarity-score-levenshtein –

+1

你描述的被称为“近似字符串匹配”或“模糊搜索”。这可能指向你在正确的方向:) https://en.wikipedia.org/wiki/Approximate_string_matching –

回答

0

希望能适用于您的情况。试试看:

public void pringCompare(){ 

    String s = "This is a sample sentence."; 
    String s2 = "This is not the previous, but similar"; 
    String[] words = s.split("\\s+"); 
    for (int i = 0; i < words.length; i++) { 
     // You may want to check for a non-word character before blindly 
     // performing a replacement 
     // It may also be necessary to adjust the character class 
     words[i] = words[i].replaceAll("[^\\w]", ""); 
    } 

    List result = Arrays.asList(words).stream().filter(x->{ 
     System.out.println(s2+" "+x); 
     return s2.contains(x); 
     }).collect(Collectors.toList()); 
    result.forEach(System.out::println); 
} 
+0

这是确切的单词匹配,这不是什么OP要求。 –

相关问题