Обнаружение предложений с использованием opennlp на hadoop

Я хочу распознавать предложения с помощью OPenNLP и Hadoop. Я успешно реализовал то же самое на Java. Хотите реализовать то же самое на платформе Mapreduce. Может кто-нибудь мне помочь?


person user2830876    schedule 22.01.2014    source источник


Ответы (1)


Я сделал это двумя разными способами. Один из способов — передать вашу модель обнаружения предложений каждому узлу в стандартный каталог (т. е. /opt/opennlpmodels/) и на уровне класса в вашем классе картографа прочитать в сериализованной модели, а затем использовать ее соответствующим образом в вашей карте или уменьшить функцию.

Другой способ - поместить модель в базу данных или распределенный кеш (как большой двоичный объект или что-то в этом роде... Раньше я использовал Accumulo для хранения моделей категоризации документов). затем на уровне класса сделать подключение к базе данных и получить модель как bytearrayinputstream.

Я использовал Puppet для выталкивания моделей, но используйте то, что вы обычно используете, чтобы поддерживать актуальность файлов в вашем кластере.

в зависимости от вашей версии hadoop вы можете использовать модель в качестве свойства при настройке задания, и тогда только мастер (или откуда вы запускаете задания) должен иметь на нем фактический файл модели. Я никогда не пробовал это.

Если вам нужно знать, как на самом деле использовать детектор предложений OpenNLP, дайте мне знать, и я опубликую пример. ХТН

import java.io.File;
import java.io.FileInputStream;
import opennlp.tools.sentdetect.SentenceDetector;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.Span;

public class SentenceDetection {

  SentenceDetector sd;

  public Span[] getSentences(String docTextFromMapFunction) throws Exception {

    if (sd == null) {
      sd = new SentenceDetectorME(new SentenceModel(new FileInputStream(new File("/standardized-on-each-node/path/to/en-sent.zip"))));
    }
    /**
     * this gives you the actual sentences as a string array
     */
    // String[] sentences = sd.sentDetect(docTextFromMapFunction);
    /**
     * this gives you the spans (the charindexes to the start and end of each
     * sentence in the doc)
     *
     */
    Span[] sentenceSpans = sd.sentPosDetect(docTextFromMapFunction);
    /**
     * you can do this as well to get the actual sentence strings based on the spans
     */
    // String[] spansToStrings = Span.spansToStrings(sentPosDetect, docTextFromMapFunction);
    return sentenceSpans;
  }
}

HTH... просто убедитесь, что файл на месте. Есть более элегантные способы сделать это, но это работает и просто.

person markgiaconia    schedule 23.01.2014
comment
это также может помочь stackoverflow.com/questions/10592147/ - person markgiaconia; 23.01.2014
comment
Привет, это было бы здорово помочь в понимании, если бы вы могли привести какой-нибудь пример. - person user2830876; 23.01.2014