Я пытаюсь интегрировать OpenNLP в работу по уменьшению карты в Hadoop, начиная с некоторого базового разделения предложений. В функции карты выполняется следующий код:
public AnalysisFile analyze(String content) {
InputStream modelIn = null;
String[] sentences = null;
// references an absolute path to en-sent.bin
logger.info("sentenceModelPath: " + sentenceModelPath);
try {
modelIn = getClass().getResourceAsStream(sentenceModelPath);
SentenceModel model = new SentenceModel(modelIn);
SentenceDetectorME sentenceBreaker = new SentenceDetectorME(model);
sentences = sentenceBreaker.sentDetect(content);
} catch (FileNotFoundException e) {
logger.error("Unable to locate sentence model.");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (modelIn != null) {
try {
modelIn.close();
} catch (IOException e) {
}
}
}
logger.info("number of sentences: " + sentences.length);
<snip>
}
Когда я запускаю свою работу, я получаю сообщение об ошибке в журнале, говорящее: «in не должен быть нулевым!» (источник ошибки создания класса), что означает, что каким-то образом я не могу открыть InputStream для модели. Другие тонкости:
- Я убедился, что файл модели существует в месте, на которое ссылается
sentenceModelPath
. - Я добавил зависимости Maven для opennlp-maxent:3.0.2-incubating, opennlp-tools:1.5.2-incubating и opennlp-uima:1.5.2-incubating.
- Hadoop просто работает на моей локальной машине.
Большая часть этого шаблона из Документация OpenNLP. Есть ли что-то, что мне не хватает либо на стороне Hadoop, либо на стороне OpenNLP, из-за чего я не могу читать из модели?
sentenceModelPath
(что печатает информационный оператор регистратора?). Этот путь находится в локальной файловой системе, в банке заданий или где-то в HDFS? - person Chris White   schedule 15.05.2012/sandbox/corpus-analysis/nlp/en-sent.bin
), а также проверил его с путем в локальной файловой системе (а-ля/home/cyranix/path/to/en-sent.bin
). Никаких костей ни с тем, ни с другим. - person Cyranix   schedule 15.05.2012