diff src/de/mpiwg/anteater/events/processors/AEventProcessor.java @ 0:036535fcd179

anteater
author jdamerow
date Fri, 14 Sep 2012 10:30:43 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/mpiwg/anteater/events/processors/AEventProcessor.java	Fri Sep 14 10:30:43 2012 +0200
@@ -0,0 +1,164 @@
+package de.mpiwg.anteater.events.processors;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import de.mpiwg.anteater.events.Applicant;
+import de.mpiwg.anteater.events.Location;
+import de.mpiwg.anteater.events.ResearchEvent;
+import de.mpiwg.anteater.events.Species;
+import de.mpiwg.anteater.ml.PlaceClasses;
+import de.mpiwg.anteater.results.ApplicantResult;
+import de.mpiwg.anteater.results.LocationResult;
+import de.mpiwg.anteater.results.ResultsCarrier;
+import de.mpiwg.anteater.results.SpeciesScientificResult;
+import de.mpiwg.anteater.text.TextInformation;
+import de.mpiwg.anteater.text.TextType;
+
+
+public abstract class AEventProcessor implements IEventProcessor {
+
+	protected List<ApplicantResult> getDistinctApplicants(ResultsCarrier carrier) {
+
+		List<ApplicantResult> applicants = carrier.getApplicantResults();
+
+		// find how many distinct applicants there are
+		List<ApplicantResult> distinctApplicants = new ArrayList<ApplicantResult>();
+		ApplicantLoop: for (ApplicantResult result : applicants) {
+			for (ApplicantResult storedResult : distinctApplicants) {
+				String resultApplicantName = result.getFinding()
+						.getReferenceInText();
+				String storedApplicantName = storedResult.getFinding()
+						.getReferenceInText();
+				if (resultApplicantName.contains(storedApplicantName)
+						|| storedApplicantName.contains(resultApplicantName))
+					continue ApplicantLoop;
+			}
+
+			distinctApplicants.add(result);
+		}
+		
+		// sort by start
+		Collections.sort(distinctApplicants, new Comparator<ApplicantResult>() {
+
+			@Override
+			public int compare(ApplicantResult o1, ApplicantResult o2) {
+				return o1.getFinding().getStart() - o2.getFinding().getStart();
+			}
+		});
+		
+		return distinctApplicants;
+	}
+	
+	protected void sortByTextType(List<ApplicantResult> applicants, List<ApplicantResult> appsInSummary, List<ApplicantResult> appsInSuppleInf) {
+		for (ApplicantResult applicant : applicants) {
+			if (applicant.getResult().getType() == TextType.TYPE_SUMMARY)
+				appsInSummary.add(applicant);
+			else
+				appsInSuppleInf.add(applicant);
+		}
+	}
+	
+	protected void sortLocsByTextType(List<LocationResult> locations, List<LocationResult> locsInSummary, List<LocationResult> locsInSuppleInf) {
+		for (LocationResult applicant : locations) {
+			if (applicant.getResult().getType() == TextType.TYPE_SUMMARY)
+				locsInSummary.add(applicant);
+			else
+				locsInSuppleInf.add(applicant);
+		}
+	}
+	
+	protected void sortSpeciesByTextType(List<SpeciesScientificResult> species, List<SpeciesScientificResult> spInSummary, List<SpeciesScientificResult> spInSuppleInf) {
+		for (SpeciesScientificResult applicant : species) {
+			if (applicant.getResult().getType() == TextType.TYPE_SUMMARY)
+				spInSummary.add(applicant);
+			else
+				spInSuppleInf.add(applicant);
+		}
+	}
+	
+	protected Applicant createApplicant(ApplicantResult applicantResult) {
+		Applicant applicant = new Applicant();
+		applicant.setApplicant(applicantResult.getFinding());
+		applicant.setApplicantResult(applicantResult);
+		applicant.setApplicantInstitution(new ArrayList<Location>());
+		applicant.setLocation(new ArrayList<Location>());
+		return applicant;
+	}
+	
+	protected void setLocations(List<Applicant> applicants,
+			List<LocationResult> locationResults, ResearchEvent event) {
+		for (LocationResult loc : locationResults) {
+
+			Location location = createLocation(loc);
+
+			if (location.getLocationResult().getPrediction() == PlaceClasses.APPLICANT_INSTITUTION) {
+				for (Applicant applicant : applicants)
+					applicant.getApplicantInstitution().add(location);
+			}
+			if (location.getLocationResult().getPrediction() == PlaceClasses.APPLICANT_LOCATION) {
+				for (Applicant applicant : applicants)
+					applicant.getLocation().add(location);
+			}
+
+			if (location.getLocationResult().getPrediction() == PlaceClasses.RESEARCH_LOCATION)
+				event.getResearchLocations().add(location);
+		}
+	}
+	
+	protected Location createLocation(LocationResult locResult) {
+		Location location = new Location();
+		location.setLocation(locResult.getFinding());
+		location.setLocationResult(locResult);
+
+		return location;
+	}
+
+	protected void setSpecies(List<SpeciesScientificResult> speciesResults,
+			ResearchEvent event) {
+		for (SpeciesScientificResult speciesResult : speciesResults) {
+			Species species = createSpecies(speciesResult);
+			event.getResearchedSpecies().add(species);
+		}
+	}
+
+	protected Species createSpecies(SpeciesScientificResult speciesResult) {
+		Species species = new Species();
+		species.setSpeciesName(speciesResult.getFinding());
+		species.setSpeciesResult(speciesResult);
+		return species;
+	}
+
+	protected ResearchEvent createEvent(ApplicantResult applicantResult,
+			TextInformation info, List<LocationResult> locationResults,
+			List<SpeciesScientificResult> speciesResults) {
+		ResearchEvent event = new ResearchEvent();
+		event.setApplicants(new ArrayList<Applicant>());
+		event.setResearchedSpecies(new ArrayList<Species>());
+		event.setResearchLocations(new ArrayList<Location>());
+		event.setTextInformation(info);
+		
+		if (info.getSummaries() != null && info.getSummaries().size() > 0) {
+			event.setDate(info.getSummaries().get(0).getDate());
+		}
+		else if (info.getSupplInfos() != null && info.getSupplInfos().size() > 0) {
+			event.setDate(info.getSupplInfos().get(0).getDate());
+		}
+
+		// set applicant
+		Applicant applicant = createApplicant(applicantResult);
+		List<Applicant> applicants = new ArrayList<Applicant>();
+		applicants.add(applicant);
+
+		setLocations(applicants, locationResults, event);
+
+		event.getApplicants().add(applicant);
+
+		setSpecies(speciesResults, event);
+
+		return event;
+	}
+
+}