невозможно обучить location.bin используя opennlp с Java

1

Я пытаюсь подготовить файл en-ner-location.bin с помощью opennlp в java. Дело в том, что я получил учебный текстовый файл в следующем формате. <START:location> Fontana <END> <START:location> Palo Verde <END> <START:location> Picacho <END>

и я подготовил файл, используя следующий код

import java.io.BufferedOutputStream;
  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.FileReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.nio.charset.Charset;
  import java.util.Collections;
  import opennlp.tools.namefind.NameFinderME;
  import opennlp.tools.namefind.NameSample;
  import opennlp.tools.namefind.NameSampleDataStream;
  import opennlp.tools.namefind.TokenNameFinderModel;
  import opennlp.tools.tokenize.Tokenizer;
  import opennlp.tools.tokenize.TokenizerME;
  import opennlp.tools.tokenize.TokenizerModel;
  import opennlp.tools.util.ObjectStream;
  import opennlp.tools.util.PlainTextByLineStream;
  import opennlp.tools.util.Span;

  public class TrainNames {   
@SuppressWarnings("deprecation")
public void TrainNames() throws IOException{
    File fileTrainer=new File("citytrain.txt");
    File output=new File("en-ner-location.bin");
    ObjectStream<String> lineStream = new PlainTextByLineStream(new    FileInputStream(fileTrainer), "UTF-8");
    ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);
    System.out.println("lineStream = " + lineStream);
    TokenNameFinderModel model = NameFinderME.train("en", "location", sampleStream, Collections.<String, Object>emptyMap(), 1, 0);

    BufferedOutputStream modelOut = null;
    try {
        modelOut = new BufferedOutputStream(new FileOutputStream(output));
        model.serialize(modelOut);
    } finally {
        if (modelOut != null)
            modelOut.close();
    }
}
  }

У меня не было никаких ошибок или предупреждений, но когда я пытаюсь получить название города из строки, такой как cnt = "Джон планирует специализироваться на электротехнике в UC Fontana и продолжить карьеру в IBM"; Он возвращает всю строку, которую кто-нибудь может сказать мне, почему...??

Теги:
opennlp

1 ответ

0

Добро пожаловать в SO! Похоже, вам нужно больше контекста вокруг каждой аннотации местоположения. Я считаю, что прямо сейчас openNLP думает, что вы тренируете его, чтобы найти слова (любое слово), потому что ваши данные обучения имеют только одно слово. Вам нужно аннотировать места в целых предложениях, и вам понадобится как минимум несколько сотен проб, чтобы начать видеть хорошие результаты.

См. Также этот ответ: как я тренирую идентификатор распознавателя имен в OpenNLP?

  • 0
    привет, я изменил учебный файл, как вы предложили, и я включил 100 предложений, содержащих название города и пометил их, но также это не сработало .... где вы думаете, что я сделал не так?
  • 0
    попробуйте изменить ваш вызов на .train, приведенный выше: TokenNameFinderModel model = NameFinderME.train ("en", "location", sampleStream, null);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню