2013-07-31 2 views
3

Я стараюсь, чтобы извлекал объекты как Имена, навыки из документа с использованием API Java OpenNLP. но не извлекает правильные имена. Я использую модель доступна на opennlp sourceforge linkКак создать пользовательскую модель с помощью OpenNLP?

Вот часть Явы код-

public class tikaOpenIntro { 

    public static void main(String[] args) throws IOException, SAXException, 
      TikaException { 

     tikaOpenIntro toi = new tikaOpenIntro(); 
     toi.filest(""); 
     String cnt = toi.contentEx(); 
     toi.sentenceD(cnt); 
     toi.tokenization(cnt); 

     String names = toi.namefind(toi.Tokens); 
     toi.files(names); 

    } 

    public String Tokens[]; 

    public String contentEx() throws IOException, SAXException, TikaException { 
     InputStream is = new BufferedInputStream(new FileInputStream(new File(
       "/home/rahul/Downloads/rahul.pdf"))); 
     // URL url=new URL("http://in.linkedin.com/in/rahulkulhari"); 
     // InputStream is=url.openStream(); 
     Parser ps = new AutoDetectParser(); // for detect parser related to 

     BodyContentHandler bch = new BodyContentHandler(); 

     ps.parse(is, bch, new Metadata(), new ParseContext()); 

     return bch.toString(); 

    } 

    public void files(String st) throws IOException { 
     FileWriter fw = new FileWriter("/home/rahul/Documents/extrdata.txt", 
       true); 
     BufferedWriter bufferWritter = new BufferedWriter(fw); 
     bufferWritter.write(st + "\n"); 
     bufferWritter.close(); 
    } 

    public void filest(String st) throws IOException { 
     FileWriter fw = new FileWriter("/home/rahul/Documents/extrdata.txt", 
       false); 

     BufferedWriter bufferWritter = new BufferedWriter(fw); 
     bufferWritter.write(st); 
     bufferWritter.close(); 
    } 

    public String namefind(String cnt[]) { 
     InputStream is; 
     TokenNameFinderModel tnf; 
     NameFinderME nf; 
     String sd = ""; 
     try { 
      is = new FileInputStream(
        "/home/rahul/opennlp/model/en-ner-person.bin"); 
      tnf = new TokenNameFinderModel(is); 
      nf = new NameFinderME(tnf); 

      Span sp[] = nf.find(cnt); 

      String a[] = Span.spansToStrings(sp, cnt); 
      StringBuilder fd = new StringBuilder(); 
      int l = a.length; 

      for (int j = 0; j < l; j++) { 
       fd = fd.append(a[j] + "\n"); 

      } 
      sd = fd.toString(); 

     } catch (FileNotFoundException e) { 

      e.printStackTrace(); 
     } catch (InvalidFormatException e) { 

      e.printStackTrace(); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
     return sd; 
    } 


    public void sentenceD(String content) { 
     String cnt[] = null; 
     InputStream om; 
     SentenceModel sm; 
     SentenceDetectorME sdm; 
     try { 
      om = new FileInputStream("/home/rahul/opennlp/model/en-sent.bin"); 
      sm = new SentenceModel(om); 
      sdm = new SentenceDetectorME(sm); 
      cnt = sdm.sentDetect(content); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    public void tokenization(String tokens) { 

     InputStream is; 
     TokenizerModel tm; 

     try { 
      is = new FileInputStream("/home/rahul/opennlp/model/en-token.bin"); 
      tm = new TokenizerModel(is); 
      Tokenizer tz = new TokenizerME(tm); 
      Tokens = tz.tokenize(tokens); 
      // System.out.println(Tokens[1]); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

, что я пытаюсь сделать, это:

  • Я использую Apache Тика конвертировать PDF документ в текстовый документ.
  • Я передаю простой текстовый документ для определение границы предложения.
  • После этого токенизации
  • после этого Имя извлечения объекта

Но это экстрагента имена и другие слова. Это не выписка собственных имен. и Как создать Пользовательскую модель для извлечения Навыки из документа, такие как Плавание, Программирование и т. Д.?

Дайте мне представление!

Любая помощь будет принята с благодарностью !?

+0

Вы решили эту проблему? – vashishth

ответ

0

Один из способов сделать это - сохранить список известных имен, которые могут отображаться в документах. Это было бы также хорошим методом для навыков. Когда вы узнаете именованный объект, вы должны проверить, отображается ли он в списке.

Другой способ - написать свой собственный компонент, который извлекает именованные объекты, которые выполняют лучшую работу, чем OpenNLP, но, вероятно, это намного сложнее.

3

Похоже, что вас не устраивает производительность предварительно созданной модели имен для OpenNLP. Но (а) модели никогда не совершенны, и даже лучшая модель пропустит некоторые вещи, которые она должна была поймать и поймать некоторые вещи, которые она должна была пропустить; и (б) модель будет лучше всего работать, если документы, которые была обучена модели, соответствуют документам, которые вы пытаетесь пометить, в жанре и стиле текста (поэтому модель, подготовленная по смешанному текстовому материалу, не будет работать очень хорошо на всех моделях, и текст, подготовленный по новостным статьям, не будет хорошо работать, скажем, в твитах). Вы можете попробовать другие общедоступные инструменты, такие как инструментарий Stanford NE или LingPipe; они могут иметь более эффективные модели. Но никто из них не будет совершенным.

Чтобы создать пользовательскую модель, вам необходимо подготовить некоторые данные обучения.Для OpenNLP, это будет выглядеть как

I have a Ph.D. in <START:skill> operations research <END> 

Для чего-то специфического, как это, вы, вероятно, нужно придумать что данные самостоятельно. И вам нужно многого; в документации OpenNLP рекомендуется около 15 000 примеров предложений. Подробнее см. В документах OpenNLP.

+0

Как только у вас есть 15 000 предложений, как вы превращаете его в модель? –

+1

http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind.training –

+0

@SamBayer: Я пропустил пользовательскую модель с предложениями 50 КБ. Я аннотировал предложения. При тестировании этой модели она возвращает целую входную строку как сущность. Можете ли вы посоветовать, почему это происходит? –

1

этот пост может помочь

OpenNLP: foreign names does not get recognized

Он показывает, как создать модель, используя очень новый OpenNLP аддон под названием «ModelBuilder-аддон»

вы кормите его файл предложений, файл известных имен, и расскажите, где поставить модель. HTH

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