2014-01-22 4 views

ответ

1

Я сделал это двумя разными способами. Один из способов - вывести модель определения Sentence на каждый узел в стандартный каталог (т. Е./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; 
    } 
} 

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

+1

это может помочь, а http://stackoverflow.com/questions/10592147/unable-to-load-opennlp-sentence-model-in-hadoop-map-reduce-job?rq=1 – markg

+0

Привет, это будет большой помощью в понимании того, можно ли разместить сайт на каком-то примере. – user2830876

 Смежные вопросы

  • Нет связанных вопросов^_^