我试图从我的C++应用程序中调用WordNet C API,它可以工作,但没有达到预期的效果。这是我的代码:

int search (char* term)
{
    results.clear();

    SynsetPtr synsets = findtheinfo_ds(term, NOUN, HYPERPTR, ALLSENSES);
    SynsetPtr currentSynset = synsets;

    // Loop all senses
    while (currentSynset != nullptr)
    {
        SynsetPtr next = currentSynset;

        // Iterate up hierarchy for each sense.
        while (next != nullptr)
        {
            String words;

            for (int i = 0; i != next->wcount; ++i)
            {
                String nextWord = next->words[i];
                nextWord = nextWord.replaceCharacter('_', ' ');

                words += String(nextWord);
                if (i != (next->wcount - 1)) words += ", ";
            }

            results.add (words + " - " + String(next->defn));

            next = next->ptrlist;
        }

        currentSynset = currentSynset->nextss;
    }

    free_syns(synsets);

    return results.size();
}

我的程序正确地输出了每种感觉的定义,但是对于每种感觉,它仅在层次结构中我的搜索词上方直接输出一个上位词,而不会一直沿树上升到“实体”。换句话说,第二个SynsetPtr-> ptrlist始终为NULL,即使我从WordNet CLI中可以看到有很多级别。

我想念什么吗?我打错了findtheinfo_ds()吗?

最佳答案

findtheinfo_ds()仅返回一个节点。要遍历树,您必须为找到的每个连接调用findtheinfo_ds()。我发现this page在返回的数据结构上显示了gdb交互式 session ,我认为您会发现它很有用。

还要看看traceptrs_ds()函数,听起来好像它可能是针对您要尝试的操作而设计的。

关于c++ - findtheinfo_ds()中的WordNet SynSet ptrlist仅上一层,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23066032/

10-13 00:31