package com.ontology2.bakemono.entityCentric; import com.google.common.base.Splitter; import com.google.common.collect.Sets; import com.ontology2.bakemono.primitiveTriples.PrimitiveTriple; import com.ontology2.bakemono.primitiveTriples.PrimitiveTripleCodec; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.Text; import org.apache.log4j.Logger; import java.io.IOException; import java.util.Set; public class EntityIsAReducer extends EntityMatchesRuleReducer<Text,Text> { Set<String> typeList; final static PrimitiveTripleCodec codec=new PrimitiveTripleCodec(); final static String A="<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>"; public static final String IS_A="com.ontology2.bakemono.entityCentric.EntityIsAReducer"; public static final String TYPE_LIST=IS_A+".typeList"; static Logger log= Logger.getLogger(EntityIsAReducer.class); @Override public void setup(Context context) throws IOException, InterruptedException { super.setup(context); Configuration that=context.getConfiguration(); typeList= Sets.newHashSet(Splitter.on(",").split(that.get(TYPE_LIST))); log.info("Initializing type list"); for(String type:typeList) log.info("Accepting type: ["+type+"]"); } @Override protected Text copy(Text text) { return new Text(text); } @Override protected boolean matches(Text subject, Iterable<Text> facts) { for(Text fact:facts) { PrimitiveTriple pt=codec.decode(fact.toString()); if (A.equals(pt.getPredicate()) && typeList.contains(pt.getObject()) ) { return true; } } return false; } }