Невозможно загрузить модель предложения OpenNLP в задании Hadoop map-reduce

Я пытаюсь интегрировать 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, из-за чего я не могу читать из модели?


person Cyranix    schedule 14.05.2012    source источник
comment
Каково значение sentenceModelPath (что печатает информационный оператор регистратора?). Этот путь находится в локальной файловой системе, в банке заданий или где-то в HDFS?   -  person Chris White    schedule 15.05.2012
comment
@ChrisWhite Я установил путь в HDFS (/sandbox/corpus-analysis/nlp/en-sent.bin), а также проверил его с путем в локальной файловой системе (а-ля /home/cyranix/path/to/en-sent.bin). Никаких костей ни с тем, ни с другим.   -  person Cyranix    schedule 15.05.2012


Ответы (1)


person    schedule
comment
Спасибо за подробное объяснение! Все еще знакомлюсь с Hadoop. Поскольку наш проект может в конечном итоге включать отдельные обученные модели, вариант -files, вероятно, будет работать лучше всего (и я успешно загрузил его сегодня утром), но загрузка из HDFS может быть удобной в других областях. - person Cyranix; 15.05.2012