package edu.berkeley.cs.nlp.ocular.data.textreader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author Dan Garrette (dhgarrette@gmail.com)
*/
public class FlipUVTextReader implements TextReader {
private double flipRate;
private TextReader delegate;
private Random rand = new Random(0);
public FlipUVTextReader(double flipRate, TextReader delegate) {
this.flipRate = flipRate;
this.delegate = delegate;
}
public List<String> readCharacters(String line) {
List<String> chars = new ArrayList<String>();
for (String c : delegate.readCharacters(line)) {
if (c.equals("u")) {
if (rand.nextDouble() < flipRate) {
chars.add("u");
} else {
chars.add("v");
}
} else if (c.equals("U")) {
if (rand.nextDouble() < flipRate) {
chars.add("U");
} else {
chars.add("V");
}
} else if (c.equals("v")) {
if (rand.nextDouble() < flipRate) {
chars.add("v");
} else {
chars.add("u");
}
} else if (c.equals("V")) {
if (rand.nextDouble() < flipRate) {
chars.add("V");
} else {
chars.add("U");
}
} else {
chars.add(c);
}
}
return chars;
}
public String toString() {
return "FlipUVTextReader(" + flipRate + ", " + delegate + ")";
}
}