package edu.stanford.nlp.trees.international.arabic;
import java.io.Reader;
import java.io.Serializable;
import edu.stanford.nlp.trees.FilteringTreeReader;
import edu.stanford.nlp.trees.LabeledScoredTreeFactory;
import edu.stanford.nlp.trees.PennTreeReader;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.TreeNormalizer;
import edu.stanford.nlp.trees.TreeReader;
import edu.stanford.nlp.trees.TreeReaderFactory;
import java.util.function.Predicate;
/** Reads ArabicTreebank trees. See {@link ArabicTreeNormalizer} for the
* meaning of the constructor parameters.
*
* @author Roger Levy
* @author Christopher Manning
* @author Spence Green
*/
public class ArabicTreeReaderFactory implements TreeReaderFactory, Serializable {
private static final long serialVersionUID = 1973767605277873017L;
private final boolean retainNPTmp;
private final boolean retainNPSbj;
private final boolean retainPRD;
private final boolean retainPPClr;
private final boolean changeNoLabels;
private final boolean filterX;
private final boolean noNormalization;
public ArabicTreeReaderFactory() {
this(false, false, false, false, false, false, false);
}
public ArabicTreeReaderFactory(boolean retainNPTmp, boolean retainPRD,
boolean changeNoLabels, boolean filterX,
boolean retainNPSbj,
boolean noNormalization, boolean retainPPClr) {
this.retainNPTmp = retainNPTmp;
this.retainPRD = retainPRD;
this.changeNoLabels = changeNoLabels;
this.filterX = filterX;
this.retainNPSbj = retainNPSbj;
this.noNormalization = noNormalization;
this.retainPPClr = retainPPClr;
}
public TreeReader newTreeReader(Reader in) {
TreeReader tr = null;
if(noNormalization) {
tr = new PennTreeReader(in, new LabeledScoredTreeFactory(), new TreeNormalizer(), new ArabicTreebankTokenizer(in));
} else
tr = new PennTreeReader(in, new LabeledScoredTreeFactory(), new ArabicTreeNormalizer(retainNPTmp,retainPRD,changeNoLabels, retainNPSbj, retainPPClr), new ArabicTreebankTokenizer(in));
if (filterX)
tr = new FilteringTreeReader(tr, new XFilter());
return tr;
}
static class XFilter implements Predicate<Tree>, Serializable {
private static final long serialVersionUID = -4522060160716318895L;
public XFilter() {}
public boolean test(Tree t) {
return ! (t.numChildren() == 1 && "X".equals(t.firstChild().value()));
}
}
public static class ArabicRawTreeReaderFactory extends ArabicTreeReaderFactory {
private static final long serialVersionUID = -5693371540982097793L;
public ArabicRawTreeReaderFactory() {
super(false, false, true, false, false, false, false);
}
public ArabicRawTreeReaderFactory(boolean noNormalization) {
super(false, false, true, false, false, noNormalization, false);
}
}
}