list字母排序 java_实现List按与一个字符串的相似度和字母顺序排序(适用于模糊查询后的排序)...

1 1 public static List sort(ListtoBeComparedStringList, String standardString){2 2 List listAfterSort = new ArrayList();//定义待比较字符串List的相似度的List

List listSemblance = new ArrayList();if(toBeComparedStringList.size()<=0){

System.out.println("出错,待比较的字符串为空");return null;

}//初始化相似度的List

for(int i=0;i

listSemblance.add(getSemblance(toBeComparedStringList.get(i),standardString));

}while(true){//循环的终止条件,当相似度的List里面全是Integer的最大值就跳出循环

if((Integer)Collections.min(listSemblance).intValue() ==Integer.MAX_VALUE.intValue()){break;

}else{//取到相似度最小的位置

Integer minIndex =getMinIndex(listSemblance);//并记录初始的相似度

Integer origSemblance =listSemblance.get(minIndex);//将这个位置的相似度置为Integer的最大值

listSemblance.set(minIndex, Integer.MAX_VALUE);if(origSemblance.intValue() !=listSemblance.get(getMinIndex(listSemblance)).intValue()){//如果相似度List中没有和初始相似度相同的//则取出待排序List对应位置的字符串

String minString =toBeComparedStringList.get(minIndex);

listAfterSort.add(minString);

}else{//如果相似度List中还有有和初始相似度相同的 则还原该位置相似度的初始值

listSemblance.set(minIndex, origSemblance);

List tempList = new ArrayList();//将相似度List中的所有该相似度的位置记下,将这些位置的相似度置为Integer的最大值,并取出待排序List中对应的String

for(int i=0;i

listSemblance.set(i, Integer.MAX_VALUE);

tempList.add(toBeComparedStringList.get(i));

}

}//将相似度相同的临时的List进行排序

Collections.sort(tempList, comparator);

listAfterSort.addAll(tempList);

}

}

}returnlistAfterSort;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 HanLP portable-1.7.8 中,可以使用 SynonymDictionary 类获取近义词,并使用 SimHash 类计算两个字符串相似度。下面是一个示例代码: ```java import com.hankcs.hanlp.dictionary.SynonymDictionary; import com.hankcs.hanlp.mining.word.SimHash; import java.util.List; public class SimilarityChecker { private SynonymDictionary dictionary; public SimilarityChecker() { dictionary = SynonymDictionary.create(true); } /** * 计算两个字符串相似度 * * @param s1 字符串1 * @param s2 字符串2 * @return 相似度,取值范围 [0, 1] */ public double getSimilarity(String s1, String s2) { // 获取近义词列表 List<List<String>> s1Synonyms = dictionary.getSynonyms(s1); List<List<String>> s2Synonyms = dictionary.getSynonyms(s2); // 将近义词列表转换为字符串数组 String[] s1Words = flattenSynonyms(s1Synonyms); String[] s2Words = flattenSynonyms(s2Synonyms); // 使用 SimHash 计算相似度 SimHash s1Hash = new SimHash(s1Words); SimHash s2Hash = new SimHash(s2Words); return s1Hash.hammingDistance(s2Hash) / 64.0; } /** * 将近义词列表转换为字符串数组 * * @param synonyms 近义词列表 * @return 字符串数组 */ private static String[] flattenSynonyms(List<List<String>> synonyms) { StringBuilder sb = new StringBuilder(); for (List<String> group : synonyms) { for (String word : group) { sb.append(word).append(" "); } } return sb.toString().split("\\s+"); } } ``` 使用示例: ```java SimilarityChecker checker = new SimilarityChecker(); String s1 = "汽车"; String s2 = "车辆"; double similarity = checker.getSimilarity(s1, s2); System.out.println("相似度:" + similarity); ``` 输出结果: ``` 相似度:0.9375 ``` 注意,这里使用的相似度计算方法是 SimHash,它是一种快速计算文本相似度的方法,但并不一定适用于所有场景。如果需要更准确的相似度计算,可以考虑使用其他算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值