Я занимаюсь синтаксическим анализом с довольно большой грамматикой (1,1 ГБ, это анализ данных).Говорят, что используемый мной синтаксический анализатор (bitpar) оптимизирован для весьма неоднозначных грамматик.Я получаю эту ошибку:
1terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
dotest.sh: line 11: 16686 Aborted bitpar -p -b 1 -s top -u unknownwordsm -w pos.dfsa /tmp/gsyntax.pcfg /tmp/gsyntax.lex arbobanko.test arbobanko.results
Есть ли надежда?Означает ли это, что у него закончилась память?Он использует около 15 ГБ, прежде чем он падает.Машина, которую я использую, имеет 32 ГБ оперативной памяти, а также подкачку.Сбой перед выводом одного дерева разбора;Я думаю, что он вылетает после чтения грамматики, во время попытки построить анализ диаграммы для первого предложения.
Анализатор - эффективный анализатор диаграммы CYK, использующий представления битовых векторов;Я предполагаю, что это уже довольно эффективно для памяти.Если это действительно требует слишком много памяти, я мог бы выбрать из правил грамматики, но это, конечно, снизит точность разбора.
Я думаю, что проблема, вероятно, в том, что у меня очень много нетерминалов,вероятно, попытайтесь найти другой анализатор (какие-либо предложения?)
ОБНОВЛЕНИЕ: ради потомков, я нашел проблему давным-давно.Грамматика была слишком большой из-за ошибки, поэтому парсер не мог справиться с ней с доступной памятью.С правильной грамматикой (которая на порядок меньше) она отлично работает.