Mallet HierarchicalLDATUI выдает исключение NullPointerException для определенных файлов

В последние несколько дней я начал использовать Маллет. Меня особенно интересует использование иерархической тематической модели, такой как HLDA или HPAM. При импорте образцов файлов данных и запуске их с использованием класса cc.mallet.topics.tui.HierarchicalLDATUI я получаю результаты, никаких проблем.

При запуске того же в статье Википедии о Второй мировой войне после импорта я получаю следующую ошибку:

$ bin/mallet run cc.mallet.topics.tui.HierarchicalLDATUI --input ww2.mallet
    Exception in thread "main" java.lang.NullPointerException 
    at cc.mallet.topics.HierarchicalLDA$NCRPNode.dropPath(HierarchicalLDA.java:637)
    at cc.mallet.topics.HierarchicalLDA.samplePath(HierarchicalLDA.java:164)
    at cc.mallet.topics.HierarchicalLDA.estimate(HierarchicalLDA.java:133)
    at cc.mallet.topics.tui.HierarchicalLDATUI.main(HierarchicalLDATUI.java:109)

Я импортировал данные следующим образом:

$ bin/mallet import-dir --input ww2Wiki --output ww2.mallet --keep-sequence TRUE --skip-html TRUE --remove-stopwords TRUE

Чтобы облегчить вам жизнь, вот код, в котором возникает ошибка в HierarchicalLDA.java (строки 627-640)

public void dropPath() {
    NCRPNode node = this;
    node.customers--;
    if (node.customers == 0) {
        node.parent.remove(node);
    }
    for (int l = 1; l < numLevels; l++) {
        node = node.parent;
        node.customers--;
        if (node.customers == 0) {
            node.parent.remove(node); //line 637 (producing the error)
        }
    }
}

По-видимому, ошибка возникает, когда во время реализации NCRP пытается удалить узел, которым является null. Я не знаю, почему это происходит с некоторыми файлами, но не с другими.

Я проверил, может ли это быть общей проблемой, связанной с тем, что файл запускает тот же файл на cc.mallet.topics.HierarchicalPAM, и при этом файл работает, а HPAM дает разумные результаты. Другие файлы работают в реализации HLDA, поэтому я не думаю, что дело в самом коде.

В этот момент я не знаю, что делать. Кто-нибудь сталкивался и решал эту проблему раньше?

Спасибо!

PS: я чувствую, что должен указать на это сообществу Java. Это не мой код, это программное обеспечение с открытым исходным кодом, которое я скомпилировал на своем компьютере. Мне не хватает времени и обзора, чтобы прочитать весь код, чтобы отследить ошибку.


person MrDeal    schedule 16.01.2018    source источник
comment
Возможный дубликат Что такое исключение NullPointerException и как его исправить?   -  person Zoe    schedule 16.01.2018


Ответы (1)


Это заняло некоторое время, но я нашел ответ на проблему, и это кажется слишком простым.

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

Решение моей личной ситуации заключается в том, что я напишу программу, которая разделит файл .xml, в котором я хочу запустить HLDATUI, на несколько файлов меньшего размера, которые затем можно будет импортировать и проанализировать.

person MrDeal    schedule 25.01.2018