diff src/de/mpiwg/anteater/results/filter/ApplicantLocWithoutApplicantFilter.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/results/filter/ApplicantLocWithoutApplicantFilter.java	Fri Sep 14 10:30:43 2012 +0200
@@ -0,0 +1,74 @@
+package de.mpiwg.anteater.results.filter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import de.mpiwg.anteater.ml.PlaceClasses;
+import de.mpiwg.anteater.persons.APerson;
+import de.mpiwg.anteater.places.PlaceInformation;
+import de.mpiwg.anteater.results.ApplicantResult;
+import de.mpiwg.anteater.results.LocationResult;
+import de.mpiwg.anteater.results.SpeciesScientificResult;
+import de.mpiwg.anteater.text.Paragraph;
+import de.mpiwg.anteater.text.TextInformation;
+import de.mpiwg.anteater.text.TextPart;
+import de.mpiwg.anteater.text.TextType;
+
+/**
+ * This filter removes all applicant location that are not in a paragraph where
+ * there is also an applicant.
+ * 
+ * @author Julia Damerow
+ * 
+ */
+public class ApplicantLocWithoutApplicantFilter implements IResultFilter {
+
+	@Override
+	public void filterElements(TextInformation info,
+			List<ApplicantResult> applicantResults,
+			List<SpeciesScientificResult> speciesResults,
+			List<LocationResult> locationResults) {
+
+		List<TextPart> summaries = info.getSummaries();
+		List<TextPart> suppleInfs = info.getSupplInfos();
+
+		List<LocationResult> toBeRemoved = new ArrayList<LocationResult>();
+		LocationLoop: for (LocationResult locResult : locationResults) {
+			PlaceInformation placeCandidate = locResult.getFinding();
+			if (locResult.getPrediction() != PlaceClasses.APPLICANT_LOCATION)
+				continue;
+
+			TextPart text = null;
+			if (locResult.getResult().getType() == TextType.TYPE_SUMMARY) {
+				text = summaries.get(locResult.getResult().getTextIdx());
+			} else
+				text = suppleInfs.get(locResult.getResult().getTextIdx());
+
+			Paragraph paragraphOfLocation = text
+					.getParagraphOfIndex(placeCandidate.getStart());
+
+			for (ApplicantResult appResult : applicantResults) {
+				APerson applicant = appResult.getFinding();
+
+				if (appResult.getResult().getType() == locResult.getResult()
+						.getType()
+						&& appResult.getResult().getTextIdx() == locResult
+								.getResult().getTextIdx()) {
+					// if the paragraph where the applicant is in is the same as
+					// the paragraph of the location
+					// all good
+					if (paragraphOfLocation == text
+							.getParagraphOfIndex(applicant.getStart()))
+						continue LocationLoop;
+				}
+			}
+
+			// if there can be no applicant found in same paragraph remove
+			// applicant location
+			toBeRemoved.add(locResult);
+		}
+
+		locationResults.removeAll(toBeRemoved);
+	}
+
+}