solved Task 3
This commit is contained in:
parent
2f8f8df07c
commit
388ac15fcf
|
@ -2,7 +2,6 @@ package ch.zhaw.ads;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -15,11 +14,26 @@ public class FuzzySearchServer implements CommandExecutor {
|
|||
// each name only once (i.e. no doublettes allowed
|
||||
public static void loadNames(String nameString) {
|
||||
// TODO implement
|
||||
String[] names = nameString.split("\n");
|
||||
for (String nameLine : names) {
|
||||
String name = nameLine.split(";")[0];
|
||||
if(! FuzzySearchServer.names.contains(name)){
|
||||
FuzzySearchServer.names.add(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add a single trigram to 'trigrams' index
|
||||
public static void addToTrigrams(int nameIdx, String trig) {
|
||||
// TODO implement
|
||||
List<Integer> actualList = trigrams.get(trig);
|
||||
if(actualList == null){
|
||||
actualList = new ArrayList<>();
|
||||
actualList.add(nameIdx);
|
||||
trigrams.put(trig, actualList);
|
||||
} else {
|
||||
actualList.add(nameIdx);
|
||||
}
|
||||
}
|
||||
|
||||
// works better for flipped and short names if " " added and lowercase
|
||||
|
@ -31,6 +45,11 @@ public class FuzzySearchServer implements CommandExecutor {
|
|||
public static List<String> trigramForName(String name) {
|
||||
name = nomalize(name);
|
||||
// TODO implement
|
||||
List<String> trigrams = new ArrayList<>();
|
||||
for(int i = 0; i < name.length() - 2; i++){
|
||||
trigrams.add(name.substring(i, i + 3));
|
||||
}
|
||||
return trigrams;
|
||||
}
|
||||
|
||||
public static void constructTrigramIndex(List<String> names) {
|
||||
|
@ -52,9 +71,20 @@ public class FuzzySearchServer implements CommandExecutor {
|
|||
// if no trigram/name matches at all then return -1
|
||||
public static int findIdx(String name) {
|
||||
counts.clear();
|
||||
int maxIdx = -1;
|
||||
final int[] maxIdx = {-1};
|
||||
// TODO implement
|
||||
return maxIdx;
|
||||
List<String> trigrams = trigramForName(name);
|
||||
trigrams.forEach(trigram -> {
|
||||
if(FuzzySearchServer.trigrams.get(trigram) != null){
|
||||
FuzzySearchServer.trigrams.get(trigram).forEach(nameIndex -> {
|
||||
incCount(nameIndex);
|
||||
if (maxIdx[0] == -1 || counts.get(nameIndex) > counts.get(maxIdx[0])) {
|
||||
maxIdx[0] = nameIndex;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return maxIdx[0];
|
||||
}
|
||||
// finde Namen gebe "" zurück wenn gefundener Name nicht grösser als verlangter score ist.
|
||||
public static String find(String searchName, int scoreRequired) {
|
||||
|
|
Loading…
Reference in New Issue