我试图从我的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/