// Copyright 2013 Thomas Müller
// This file is part of MarMoT, which is licensed under GPLv3.
package marmot.morph.mapper;
import java.util.Iterator;
import java.util.List;
import marmot.util.LineIterator;
public class SyntaxTreeIterator implements Iterator<SyntaxTree> {
int form_index_;
int lemma_index_;
int pos_index_;
int feat_index_;
int head_index_;
int deprel_index_;
LineIterator iterator_;
boolean lowercase_;
public SyntaxTreeIterator(String filename, int form_index,
int lemma_index, int pos_index, int feat_index, int head_index,
int deprel_index, boolean lowercase) {
form_index_ = form_index;
lemma_index_ = lemma_index;
pos_index_ = pos_index;
feat_index_ = feat_index;
head_index_ = head_index;
deprel_index_ = deprel_index;
iterator_ = new LineIterator(filename);
lowercase_ = lowercase;
}
@Override
public boolean hasNext() {
return iterator_.hasNext();
}
@Override
public SyntaxTree next() {
SyntaxTree tree = new SyntaxTree();
List<String> line = iterator_.next();
while (!line.isEmpty()) {
String form = line.get(form_index_);
if (lowercase_) {
form = form.toLowerCase();
}
String lemma = line.get(lemma_index_);
if (lowercase_) {
lemma = lemma.toLowerCase();
}
Node node = new Node(form,
lemma,
line.get(pos_index_),
line.get(feat_index_), Integer.parseInt(line
.get(head_index_)), line.get(deprel_index_),
tree);
tree.addNode(node);
line = iterator_.next();
}
return tree;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}