/**
  * This tests the EntityLinker functionality (if the expected Entities are linked)
  *
  * @throws Exception
  */
 @Test
 public void testTaxonomyLinker() throws Exception {
   OpenNlpAnalysedContentFactory acf =
       OpenNlpAnalysedContentFactory.getInstance(openNLP, new TextAnalyzerConfig());
   EntityLinkerConfig config = new EntityLinkerConfig();
   config.setRedirectProcessingMode(RedirectProcessingMode.FOLLOW);
   EntityLinker linker = new EntityLinker(acf.create(TEST_TEXT, "en"), searcher, config);
   linker.process();
   Map<String, List<String>> expectedResults = new HashMap<String, List<String>>();
   expectedResults.put(
       "Patrick Marshall", new ArrayList<String>(Arrays.asList("urn:test:PatrickMarshall")));
   expectedResults.put(
       "geologist",
       new ArrayList<String>(
           Arrays.asList("urn:test:redirect:Geologist"))); // the redirected entity
   expectedResults.put("New Zealand", new ArrayList<String>(Arrays.asList("urn:test:NewZealand")));
   expectedResults.put(
       "University of Otago",
       new ArrayList<String>(
           Arrays.asList("urn:test:UniversityOfOtago", "urn:test:UniversityOfOtago_Texas")));
   for (LinkedEntity linkedEntity : linker.getLinkedEntities().values()) {
     List<String> expectedSuggestions = expectedResults.remove(linkedEntity.getSelectedText());
     assertNotNull(
         "LinkedEntity "
             + linkedEntity.getSelectedText()
             + "is not an expected Result (or was found twice)",
         expectedSuggestions);
     linkedEntity.getSuggestions().iterator();
     assertEquals(
         "Number of suggestions "
             + linkedEntity.getSuggestions().size()
             + " != number of expected suggestions "
             + expectedSuggestions.size()
             + "for selection "
             + linkedEntity.getSelectedText(),
         linkedEntity.getSuggestions().size(),
         expectedSuggestions.size());
     double score = linkedEntity.getScore();
     for (int i = 0; i < expectedSuggestions.size(); i++) {
       Suggestion suggestion = linkedEntity.getSuggestions().get(i);
       assertEquals(
           "Expecced Suggestion at Rank "
               + i
               + " expected: "
               + expectedSuggestions.get(i)
               + " suggestion: "
               + suggestion.getRepresentation().getId(),
           expectedSuggestions.get(i),
           suggestion.getRepresentation().getId());
       assertTrue(
           "Score of suggestion "
               + i
               + "("
               + suggestion.getScore()
               + " > as of the previous one ("
               + score
               + ")",
           score >= suggestion.getScore());
       score = suggestion.getScore();
     }
   }
 }