我有一个名称接近845k行的csv文件。
我想比较模糊名称字符串匹配。 我使用了着名的Python模糊算法的Java fuzzy string matching实现。
在下面的代码中实现它对我来说非常适合。 问题是处理时间太长。 每条线与其他线的比较时间接近15秒。 这是240线一小时,整个过程将近6000行。 所有流程都将在几个月内完成。 这是不可接受的工作时间。
我需要一种优化技术或方法。 我需要一些建议而不是解决方案。
您对以下代码的建议是什么?
BufferedReader br = new BufferedReader(new FileReader("data/names.csv"));
BufferedWriter bw = new BufferedWriter(new FileWriter("data/similars.csv"));
ConcurrentHashMap<Integer,String> map = new ConcurrentHashMap<Integer,String>();
String lines;
while( (lines = br.readLine()) != null ){
String[] line = lines.split("\\t",-1);
Integer nameId = Integer.parseInt(line[0]);
String name = line[1];
map.put(nameId, name);
}
for (Map.Entry<Integer, String> entry1 : map.entrySet()) {
Integer nameId1 = entry1.getKey();
String name1 = entry1.getValue();
for (Map.Entry<Integer, String> entry2 : map.entrySet()) {
Integer nameId2 = entry2.getKey();
if (nameId1 == nameId2) {
continue;
}
String name2 = entry2.getValue();
int ratio = FuzzySearch.ratio(name1,name2);
if(ratio > 95){
bw.write(nameId1 + "," + nameId2 + "\n");
}
}
// For to prevent matching same pairs again
map.remove(nameId1);
}
答案 0 :(得分:3)
nameId1.intValue() == nameId2