2015-03-30 2 views
2

Я пытаюсь запустить парсер Stanford в Ubuntu, используя код python. Мой текстовый файл имеет размер 500 Мбайт, который я пытаюсь проанализировать. У меня есть оперативная память 32 ГБ. Я увеличиваю размер JVM, но я не делаю, действительно ли это увеличивается или нет, потому что каждый раз я получаю эту ошибку. Пожалуйста, помогите мнеСтэнфордский парсер из памяти

WARNING!! OUT OF MEMORY! THERE WAS NOT ENOUGH *** 
*** MEMORY TO RUN ALL PARSERS. EITHER GIVE THE *** 
*** JVM MORE MEMORY, SET THE MAXIMUM SENTENCE  *** 
*** LENGTH WITH -maxLength, OR PERHAPS YOU ARE  *** 
*** HAPPY TO HAVE THE PARSER FALL BACK TO USING *** 
*** A SIMPLER PARSER FOR VERY LONG SENTENCES.  *** 
Sentence has no parse using PCFG grammar (or no PCFG fallback). Skipping... 
Exception in thread "main" edu.stanford.nlp.parser.common.NoSuchParseException 
    at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.getBestParse(LexicalizedParserQuery.java:398) 
    at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.getBestParse(LexicalizedParserQuery.java:370) 
    at edu.stanford.nlp.parser.lexparser.ParseFiles.processResults(ParseFiles.java:271) 
    at edu.stanford.nlp.parser.lexparser.ParseFiles.parseFiles(ParseFiles.java:215) 
    at edu.stanford.nlp.parser.lexparser.ParseFiles.parseFiles(ParseFiles.java:74) 
    at edu.stanford.nlp.parser.lexparser.LexicalizedParser.main(LexicalizedParser.java:1513) 
+1

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

+0

огромные строки @TritonMan – rombi

+1

Правильно, вам нужно либо передать имя файла, либо поток или что-то в этом роде. Если вы загрузите весь файл в строку, файл размером 500 МБ, который займет слишком много ОЗУ. –

ответ

6

Вы должны разделить текстовый файл на мелкие кусочки и дать их анализатору по одному за раз. Поскольку синтаксический анализатор создает представление в памяти для целого «документа», оно дается одновременно (что на порядок больше, чем документ на диске), очень плохая идея попытаться дать ему документ на 500 МБ в один глоток.

Вы также должны избегать сверхдлинных «предложений», которые могут легко возникать, если случайный текст или текст с текстом не имеют ограничителей предложений, или вы кормите его большими столами или тарабарщиной. Самый безопасный способ избежать этой проблемы - установить параметр, ограничивающий максимальную длину предложения, например -maxLength 100.

Возможно, вы захотите попробовать анализатор зависимостей нейронной сети, который лучше масштабируется для больших задач: http://nlp.stanford.edu/software/nndep.shtml.

+0

Я не могу избежать длинных предложений, так как я готовлю набор данных. Память не является проблемой, так как у меня 32 ГБ памяти. Это просто, что я не могу ее использовать. Можете ли вы рассказать мне, как увеличить размер JVM. – rombi

+1

Используйте 64-разрядную JVM. Затем 'java -Xmx12g ...'. –

+1

@ChristopherManning, я использую CoreNLP, как я могу указать '-maxLength' в Java-коде? –

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