2013-03-31 3 views
8

Я только что реализовал программу, использующую теггер Stores Stanford в Java.Увеличение производительности программы на основе Stanford-tagger

Я использовал входной файл размером в несколько КБ, состоящий из нескольких сотен слов. Я даже установил размер кучи до 600 МБ.

Но он все еще медленный и иногда заканчивается из памяти кучи. Как увеличить скорость выполнения и производительность памяти? Я хотел бы иметь возможность использовать несколько МБ в качестве входных данных.

public static void postag(String args) throws ClassNotFoundException 

    { 

    try 

    { 

    File filein=new File("c://input.txt"); 

    String content = FileUtils.readFileToString(filein); 

    MaxentTagger tagger = new MaxentTagger("postagging/wsj-0-18-bidirectional-distsim.tagger"); 

    String tagged = tagger.tagString(content); 

     try 
     { 
      File file = new File("c://output.txt"); 
      if (!file.exists()) 
      { 
       file.createNewFile(); 
      } 

      FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
      BufferedWriter bw = new BufferedWriter(fw); 
      bw.write("\n"+tagged); 
      bw.close(); 

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

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

} 

ответ

7

Основной первый совет является использование wsj-0-18-left3words-distsim.tagger (или, возможно, лучше, english-left3words-distsim.tagger в последних версиях, для общего текста), а не wsj-0-18-bidirectional-distsim.tagger. В то время как эффективность тегов двунаправленного теггера составляет , а фракция лучше, она примерно в 6 раз медленнее и использует примерно вдвое больше памяти. Фигура FWIW: на MacBook Pro 2012 года, когда при наличии достаточного текста «разогреться», теггер left3words теряет текст со скоростью около 35000 слов в секунду.

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

+0

спасибо. Будет использовать Left3words :) – Ameer

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