package rainbownlp.machinelearning.examplebuilder.link;
import java.util.ArrayList;
import java.util.List;
import rainbownlp.core.Artifact;
import rainbownlp.core.Phrase;
import rainbownlp.core.PhraseLink;
import rainbownlp.machinelearning.IFeatureCalculator;
import rainbownlp.machinelearning.MLExample;
import rainbownlp.util.FileUtil;
import rainbownlp.util.HibernateUtil;
import rainbownlp.util.ConfigurationUtil;
public class InSentenceExampleBuilder {
public static void main(String[] args) throws Exception
{
// InSentenceExampleBuilder.createExamples(true, "InSentenceExperiment1");
// InSentenceExampleBuilder.createExamples(false, "InSentenceExperiment1");
}
public List<IFeatureCalculator> featureCalculators =
new ArrayList<IFeatureCalculator>();
public void createExamples(boolean is_training_mode, String experimentGroup) throws Exception
{
List<Artifact> sentences =
Artifact.listByType(Artifact.Type.Sentence,is_training_mode);
int counter = 0;
int example_counter = 0;
for(Artifact sentence : sentences)
{
MLExample.hibernateSession = HibernateUtil.clearSession(MLExample.hibernateSession);
List<Phrase> phrases = Phrase.getOrderedPhrasesInSentence(sentence);
if(!possiblyHasLink(sentence, phrases)) continue;
counter++;
HibernateUtil.startTransaction();
for(int i=0; i< phrases.size()-1;i++)
{
Phrase p1 = phrases.get(i);
for(int j=0; j< phrases.size();j++){
Phrase p2 = phrases.get(j);
PhraseLink phrase_link =
PhraseLink.getInstance(p1, p2);
Integer expected_class = phrase_link.getLinkType().ordinal();
ConfigurationUtil.SaveInGetInstance = false;
MLExample link_example =
MLExample.getInstanceForLink(phrase_link, experimentGroup);
link_example.setExpectedClass(expected_class);
link_example.setRelatedPhraseLink(phrase_link);
link_example.setPredictedClass(-1);
if(sentence.getAssociatedFilePath().contains("/train/"))
link_example.setForTrain(true);
else
link_example.setForTrain(false);
MLExample.saveExample(link_example);
ConfigurationUtil.SaveInGetInstance = true;
link_example.calculateFeatures(featureCalculators);
FileUtil.logLine("debug.log","example processed: "+example_counter);
}
}
HibernateUtil.clearLoaderSession();
FileUtil.logLine(null,"LinkExampleBuilder--------Sentence processed: "+counter);
HibernateUtil.endTransaction();
}
}
//<event> in the <event>
//<event> when <event>
/**
* Abstract implementation here, inherit to inject more logics
* @param sentence
* @param phrases
* @return
*/
protected boolean possiblyHasLink(Artifact sentence,
List<Phrase> phrases)
{
boolean hasLink = true;
if(phrases.size()<2) return false;
return hasLink;
}
/**
* Abstract implementation here, inherit to inject more logics
* @param sentence
* @param phrases
* @return
*/
protected boolean isValidLink(Phrase phrase1, Phrase phrase2)
{
boolean hasLink = true;
if(phrase1.equals(phrase2)) return false;
return hasLink;
}
}