2015-02-04 2 views
2

Я пытаюсь использовать Apache OpenNLP POSTagger пример кода, и я пришел с ошибкой, а ниже кодApache OpenNLP ошибка не загружается ан-поз-maxent.bin

public String[] SentenceDetect(String qwe) throws IOException 
{ 

POSModel model = new POSModelLoader().load(new File("/home/jebard/chabacano/Chabacano1/src/en-pos-maxent.bin")); 
PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent"); 
POSTaggerME tagger = new POSTaggerME(model); 

String input = "Hi. How are you? This is Mike."; 
ObjectStream<String> lineStream = new PlainTextByLineStream(
     new StringReader(input)); 
perfMon.start(); 
String line; 
while ((line = lineStream.read()) != null) { 

    String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE 
      .tokenize(line); 
    String[] tags = tagger.tag(whitespaceTokenizerLine); 

    POSSample sample = new POSSample(whitespaceTokenizerLine, tags); 
    System.out.println(sample.toString()); 

    perfMon.incrementCounter(); 
} 
perfMon.stopAndPrintFinalResult(); 

Ошибка в этой строке

.load (новый файл ("/ главная/jebard/chabacano/Chabacano1/SRC/ан-полюсная-maxent.bin")

метод загрузки (Java .io.File) в типе ModelLoader не применим для аргументов (org.apache.tomcat.jni.File)

ответ

1

На самом деле это не ошибка в OpenNLP. Это ошибка в коде, поскольку вы загружаете класс File из пакета (aka namespace) org.apache.tomcat.jni.File.

Тем не менее, API of OpenNLP просит вас использовать класс File из стандартного пакета JDK java.io, то есть вы должны импортировать java.io.File вместо этого.

В целом, это должно устранить вашу проблему.

Важный намек

Вы должны перенести код, так как модели не должны быть загружены через POSModelLoader

загружает POS Tagger модель для инструментов командной строки.

Примечание: Не используйте этот класс, внутреннее использование только!

Вместо этого вы можете использовать конструктор POSModel(InputStream in), чтобы загрузить файл модели с помощью InputStream ссылающегося фактический файл модели.

Кроме того, класс POSModelLoader был представлен только в предыдущих выпусках OpenNLP (версии < = 1.5.x). В последней версии OpenNLP версии 1.6.0 она была полностью удалена. Вместо этого вы можете и должны теперь использовать конструктор POSModel class для загрузки/инициализации нужной вам модели.

0

Существует некоторая проблема с разбором XML. Попытайтесь, это сработало для меня.

System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver"); 
    try { 
     AssetFileDescriptor fileDescriptor = 
     context.getAssets().openFd("en_pos_maxent.bin"); 
     FileInputStream inputStream = fileDescriptor.createInputStream(); 
     POSModel posModel = new POSModel(inputStream); 
     posTaggerME = new POSTaggerME(posModel); 
    } catch (Exception e) {} 
Смежные вопросы