{"record":{"id":"7805da370dcd01ad","repo":"stanfordnlp/CoreNLP","slug":"doesn-t-do-k-best-yet","errorCode":null,"errorMessage":"Doesn't do k best yet","messagePattern":"Doesn't do k best yet","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/parser/lexparser/ExhaustiveDependencyParser.java","lineNumber":820,"sourceCode":"    iPossibleByR = new boolean[length + 1][length + 1][tagNum];\n    oPossibleByL = new boolean[length + 1][length + 1][tagNum];\n    oPossibleByR = new boolean[length + 1][length + 1][tagNum];\n    headScore = new float[dg.numDistBins()][length][tagNum][length][tagNum];\n    headStop = new float[length + 1][tagNum][length + 1];\n    rawDistance = new int[length + 1][length + 1];\n    binDistance = new int[length + 1][length + 1];\n  }\n\n  /** Get the exact k best parses for the sentence.\n   *\n   *  @param k The number of best parses to return\n   *  @return The exact k best parses for the sentence, with\n   *         each accompanied by its score (typically a\n   *         negative log probability).\n   */\n  @Override\n  public List<ScoredObject<Tree>> getKBestParses(int k) {\n    throw new UnsupportedOperationException(\"Doesn't do k best yet\");\n  }\n\n  /** Get a complete set of the maximally scoring parses for a sentence,\n   *  rather than one chosen at random.  This set may be of size 1 or larger.\n   *\n   *  @return All the equal best parses for a sentence, with each\n   *         accompanied by its score\n   */\n  @Override\n  public List<ScoredObject<Tree>> getBestParses() {\n    throw new UnsupportedOperationException(\"Doesn't do best parses yet\");\n  }\n\n  /** Get k good parses for the sentence.  It is expected that the\n   *  parses returned approximate the k best parses, but without any\n   *  guarantee that the exact list of k best parses has been produced.\n   *  If a class really provides k best parses functionality, it is\n   *  reasonable to also return this output as the k good parses.","sourceCodeStart":802,"sourceCodeEnd":838,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/parser/lexparser/ExhaustiveDependencyParser.java#L802-L838","documentation":"ExhaustiveDependencyParser implements the ParserQuery interface but does not support extracting the exact k best parses. getKBestParses(int) is a stub that unconditionally throws UnsupportedOperationException. The parser only computes a single Viterbi-style best parse.","triggerScenarios":"Calling getKBestParses(k) on a ParserQuery produced by ExhaustiveDependencyParser, e.g. via parserQuery.getKBestParses(10) after a successful parse.","commonSituations":"Code written against a shared ParserQuery/BiLexiconizedParser interface that assumes k-best support, but configured with a dependency grammar / ExhaustiveDependencyParser factory instead of ExhaustivePCFGParser.","solutions":["Use ExhaustivePCFGParser (or another k-best capable parser) instead of ExhaustiveDependencyParser when k-best output is needed.","Wrap the call in a try-catch for UnsupportedOperationException and degrade to getBestParse().","Check interface capability before calling; call getBestParse() for the single best dependency parse."],"exampleFix":"// before\nList<ScoredObject<Tree>> parses = pq.getKBestParses(10);\n// after\nList<ScoredObject<Tree>> parses;\ntry {\n  parses = pq.getKBestParses(10);\n} catch (UnsupportedOperationException e) {\n  parses = Collections.singletonList(new ScoredObject<>(pq.getBestParse(), pq.getBestScore()));\n}","handlingStrategy":"try-catch","validationCode":"// k-best capability check\nif (query.getClass().getSimpleName().contains(\"ExhaustiveDependencyParser\")) {\n  throw new IllegalArgumentException(\"k-best not supported by this parser\");\n}","typeGuard":null,"tryCatchPattern":"try { parses = pq.getKBestParses(k); } catch (UnsupportedOperationException e) { parses = Collections.singletonList(new ScoredObject<>(pq.getBestParse(), pq.getBestScore())); }","preventionTips":["Know which ParserQuery implementation your parser factory produces before using k-best APIs.","Document at call sites that k-best requires a k-best-capable parser.","Centralize parse-list retrieval in a helper that degrades gracefully."],"tags":["java","nlp","parsing","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}