view src/de/mpiwg/anteater/results/impl/ScientificNameResultFinder.java @ 0:036535fcd179

anteater
author jdamerow
date Fri, 14 Sep 2012 10:30:43 +0200
parents
children dcc35f89dce3
line wrap: on
line source

package de.mpiwg.anteater.results.impl;

import java.util.ArrayList;
import java.util.List;

import de.mpiwg.anteater.places.PlaceInformation;
import de.mpiwg.anteater.places.PlacesExtraction;
import de.mpiwg.anteater.results.IResultFinder;
import de.mpiwg.anteater.results.SpeciesScientificResult;
import de.mpiwg.anteater.species.scientific.ScientificName;
import de.mpiwg.anteater.species.scientific.ScientificNamesExtraction;
import de.mpiwg.anteater.text.TextInformation;

public class ScientificNameResultFinder implements
		IResultFinder<SpeciesScientificResult> {

	@Override
	public List<SpeciesScientificResult> getResults(List<TextInformation> infos) {
		List<SpeciesScientificResult> finalResults = new ArrayList<SpeciesScientificResult>();
		
		for (TextInformation info : infos) {
			
			List<ScientificNamesExtraction> resultsExtractions = info.getScientificNamesExtractions();
			List<PlacesExtraction> placesExtraction = info.getPlacesExtractions();
			
			
			for (ScientificNamesExtraction nameExtraction : resultsExtractions) {
				for (PlacesExtraction placeExtraction : placesExtraction) {
					if (placeExtraction.getType() == nameExtraction.getType() && placeExtraction.getTextIdx() == nameExtraction.getTextIdx()) {
						List<ScientificName> names = nameExtraction.getNames();
						List<PlaceInformation> places = placeExtraction.getPlaceInformation();
						
						// put all indices where there is a place according to placemaker
						// into list
						List<Integer> placeIndices = new ArrayList<Integer>();
						for (PlaceInformation place : places) {
							int start = place.getStart();
							int end = place.getStart() + place.getLength();
							for (int i = start; i < end; i++) {
								placeIndices.add(i);
							}
						}
						
						for (ScientificName name : names) {
							if (!placeIndices.contains(name.getStart()))
							{
								SpeciesScientificResult finalResult = new SpeciesScientificResult();
								finalResult.setFinding(name);
								finalResult.setPrediction(1.0);
								finalResult.setResult(nameExtraction);
								finalResult.setTextInfo(info);
								finalResults.add(finalResult);
							}
						}
					}
				}
			}
		}
		return finalResults; 
	}

}