import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.*; public class BigramModel { private static final String NORSK_REGEX = "[^abcdefghijklmnopqrstuvwxyz???]"; private TreeMap> bigrams = new TreeMap<>(); private Random random = new Random(); private String setning; private String ord; public void les(String filNavn) throws IOException { BufferedReader leser = new BufferedReader(new FileReader(filNavn)); String linje; while ((linje = leser.readLine()) != null) { String filtrertLinje = linje .toLowerCase() .replaceAll(NORSK_REGEX, " ") .trim(); String[] ordene = filtrertLinje.split("\\s+"); if (ordene.length > 1) { for (int i = 0; i < ordene.length - 1; i++) { leggTil(ordene[i], ordene[i + 1]); } } } leser.close(); } public boolean erTom() { return bigrams.isEmpty(); } private void leggTil(String ord1, String ord2) { bigrams.computeIfAbsent(ord1, k -> new HashSet<>()).add(ord2); } public String hentTilfeldigOrd() { List ordene = new ArrayList<>(bigrams.keySet()); return ordene.get(random.nextInt(ordene.size())); } public List hentNesteOrdListe(int k) { if (bigrams.containsKey(ord)) { List ordene = new ArrayList<>(bigrams.get(ord)); Collections.shuffle(ordene, random); if (k >= ordene.size()) { return ordene; } return ordene.subList(0, k); } ord = hentTilfeldigOrd(); setning += (". " + ord); return null; } public void leggTilSetning(String ord) { setning += (" " + ord); this.ord = ord; } public String hentSetning() { return setning; } public void reset() { ord = hentTilfeldigOrd(); setning = ""; } public String hentOrd() { if (ord == "" || ord == null) reset(); return ord; } }