@Test
  public void testEvaluator() throws IOException, URISyntaxException {
    DictionaryNameFinder nameFinder = new DictionaryNameFinder(createDictionary());
    TokenNameFinderEvaluator evaluator =
        new TokenNameFinderEvaluator(nameFinder, new NameEvaluationErrorListener());
    ObjectStream<NameSample> sample = createSample();

    evaluator.evaluate(sample);
    sample.close();
    FMeasure fmeasure = evaluator.getFMeasure();

    assertTrue(fmeasure.getFMeasure() == 1);
    assertTrue(fmeasure.getRecallScore() == 1);
  }
  public void run(String[] args) {
    Parameters params = validateAndParseParams(args, Parameters.class);

    File testData = new File(params.getCensusData());
    File dictOutFile = new File(params.getDict());

    CmdLineUtil.checkInputFile("Name data", testData);
    CmdLineUtil.checkOutputFile("Dictionary file", dictOutFile);

    FileInputStream sampleDataIn = CmdLineUtil.openInFile(testData);
    ObjectStream<StringList> sampleStream =
        new NameFinderCensus90NameStream(sampleDataIn, Charset.forName(params.getEncoding()));

    Dictionary mDictionary;
    try {
      System.out.println("Creating Dictionary...");
      mDictionary = createDictionary(sampleStream);
    } catch (IOException e) {
      throw new TerminateToolException(
          -1, "IO error while reading training data or indexing data: " + e.getMessage(), e);
    } finally {
      try {
        sampleStream.close();
      } catch (IOException e) {
        // sorry this can fail..
      }
    }

    System.out.println("Saving Dictionary...");

    OutputStream out = null;

    try {
      out = new FileOutputStream(dictOutFile);
      mDictionary.serialize(out);
    } catch (IOException e) {
      throw new TerminateToolException(
          -1, "IO error while writing dictionary file: " + e.getMessage(), e);
    } finally {
      if (out != null)
        try {
          out.close();
        } catch (IOException e) {
          // file might be damaged
          throw new TerminateToolException(
              -1, "Attention: Failed to correctly write dictionary:" + e.getMessage(), e);
        }
    }
  }
 /**
  * Creates a dictionary with all names from the sample data.
  *
  * @return a dictionary
  * @throws IOException
  * @throws URISyntaxException
  */
 private static Dictionary createDictionary() throws IOException, URISyntaxException {
   ObjectStream<NameSample> sampleStream = createSample();
   NameSample sample = sampleStream.read();
   List<String[]> entries = new ArrayList<String[]>();
   while (sample != null) {
     Span[] names = sample.getNames();
     if (names != null && names.length > 0) {
       String[] toks = sample.getSentence();
       for (Span name : names) {
         String[] nameToks = new String[name.length()];
         System.arraycopy(toks, name.getStart(), nameToks, 0, name.length());
         entries.add(nameToks);
       }
     }
     sample = sampleStream.read();
   }
   sampleStream.close();
   Dictionary dictionary = new Dictionary(true);
   for (String[] entry : entries) {
     StringList dicEntry = new StringList(entry);
     dictionary.put(dicEntry);
   }
   return dictionary;
 }
 public void close() throws IOException {
   adSentenceStream.close();
 }