Я хочу распознавать предложения с помощью OPenNLP и Hadoop. Я успешно реализовал то же самое на Java. Хотите реализовать то же самое на платформе Mapreduce. Может кто-нибудь мне помочь?
Обнаружение предложений с использованием opennlp на hadoop
Ответы (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... просто убедитесь, что файл на месте. Есть более элегантные способы сделать это, но это работает и просто.