feat: implement Main class with methods to read training and evaluation files
This commit is contained in:
82
src/main/java/de/th_luebeck/ws25/Main.java
Normal file
82
src/main/java/de/th_luebeck/ws25/Main.java
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
package de.th_luebeck.ws25;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
static void main(String[] args) {
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<LabeledSequence> readTrainFile(Path path) throws IOException {
|
||||||
|
List<LabeledSequence> outputSequences = new ArrayList<>();
|
||||||
|
List<String> lines = Files.readAllLines(path);
|
||||||
|
for (String line : lines) {
|
||||||
|
line = line.trim();
|
||||||
|
if (line.isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] parts = line.split("\\s+", 2);
|
||||||
|
if (parts.length < 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Label label = Label.NORMAL;
|
||||||
|
if (parts[0].equals("A")) {
|
||||||
|
label = Label.ARRHYTHMIA;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Integer> values = Arrays.stream(parseInts(parts[1])).boxed().toList();
|
||||||
|
outputSequences.add(new LabeledSequence(label, values));
|
||||||
|
}
|
||||||
|
|
||||||
|
return outputSequences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EvalFile readEvalFile(Path path) throws IOException {
|
||||||
|
List<String> lines = Files.readAllLines(path);
|
||||||
|
if (lines.size() < 2) {
|
||||||
|
throw new IOException("Eval file must contain at least two lines");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Integer> sequence = Arrays.stream(parseInts(lines.get(0).trim())).boxed().toList();
|
||||||
|
List<Interval> intervals = parseIntervals(lines.get(1));
|
||||||
|
return new EvalFile(sequence, intervals);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static int[] parseInts(String inputString) {
|
||||||
|
List<Integer> numbers = new ArrayList<>();
|
||||||
|
Scanner scanner = new Scanner(inputString);
|
||||||
|
scanner.useDelimiter("[\\s,\\[\\]]+");
|
||||||
|
while (scanner.hasNext()) {
|
||||||
|
if (scanner.hasNextInt()) {
|
||||||
|
numbers.add(scanner.nextInt());
|
||||||
|
} else {
|
||||||
|
scanner.next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner.close();
|
||||||
|
|
||||||
|
return numbers.stream().mapToInt(i -> i).toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Interval> parseIntervals(String inputString) {
|
||||||
|
int[] numbers = parseInts(inputString);
|
||||||
|
List<Interval> outputIntervals = new ArrayList<>();
|
||||||
|
for (int i = 0; i + 1 < numbers.length; i += 2) {
|
||||||
|
int start = numbers[i], end = numbers[i + 1];
|
||||||
|
if (start <= end) {
|
||||||
|
outputIntervals.add(new Interval(start, end));
|
||||||
|
} else {
|
||||||
|
outputIntervals.add(new Interval(end, start));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return outputIntervals;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user