package edu.stanford.nlp.trees; import java.io.Serializable; import java.util.regex.Pattern; import edu.stanford.nlp.ling.Label; import java.util.function.Predicate; /** * A location for general implementations of Filter<Tree>. For * example, we provide a tree which filters trees so they are only * accepted if it has a child with a label that matches a particular * regex. * * @author John Bauer */ public class TreeFilters { public static class HasMatchingChild implements Predicate<Tree>, Serializable { TreebankLanguagePack tlp; Pattern pattern; public HasMatchingChild(TreebankLanguagePack tlp, String regex) { this.pattern = Pattern.compile(regex); this.tlp = tlp; } public boolean test(Tree tree) { if (tree == null) { return false; } for (Tree child : tree.children()) { Label label = child.label(); String value = (label == null) ? null : label.value(); if (value == null) { continue; } if (pattern.matcher(value).matches()) { return true; } String basic = tlp.basicCategory(value); if (pattern.matcher(basic).matches()) { return true; } } return false; } private static final long serialVersionUID = 1L; } private TreeFilters() {} }