{"record":{"id":"284ef30956e28f1c","repo":"languagetool-org/languagetool","slug":"unknown-line-format-in-line-linecount-when","errorCode":null,"errorMessage":"Unknown line format in line \" + lineCount + \" when loading manual tagger dictionary, expected three tab-separated fields: '\" + line + \"'","messagePattern":"Unknown line format in line \" \\+ lineCount \\+ \" when loading manual tagger dictionary, expected three tab-separated fields: '\" \\+ line \\+ \"'","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"languagetool-core/src/main/java/org/languagetool/tagging/ManualTagger.java","lineNumber":110,"sourceCode":"      String line;\n      int lineCount = 0;\n      String separator = DEFAULT_SEPARATOR;\n      while ((line = br.readLine()) != null) {\n        line = line.trim();\n        lineCount++;\n        if (line.startsWith(\"#separatorRegExp=\")) {\n          separator = line.replace(\"#separatorRegExp=\", \"\");\n        }\n        if (StringTools.isEmpty(line) || line.charAt(0) == '#') {\n          continue;\n        }\n        if (line.contains(\"\\u00A0\")) {\n          throw new RuntimeException(\"Non-breaking space found in line #\" + lineCount + \": '\" + line + \"', please remove it\");\n        }\n        line = StringUtils.substringBefore(line, \"#\").trim();\n        String[] parts = line.split(separator);\n        if (parts.length != 3) {\n          throw new IOException(\"Unknown line format in line \" + lineCount + \" when loading manual tagger dictionary, \" +\n            \"expected three tab-separated fields: '\" + line + \"'\");\n        }\n        String form = parts[0];\n\n        String lemma = parts[1];\n        if (lemma.equals(form)) lemma = form;\n        lemma = intern(lemma);\n\n        String tag = parts[2].trim();\n        String internedTag = internTags ? tag.intern() : intern(tag);\n        map.computeIfAbsent(form, __ -> new ArrayList<>()).add(new TaggedWord(lemma, internedTag));\n      }\n    }\n    return map;\n  }\n\n  /**\n   * Look up a word's baseform (lemma) and POS information.","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-core/src/main/java/org/languagetool/tagging/ManualTagger.java#L92-L128","documentation":"Format validation in loadMapping for the manual tagger dictionary: after honoring any #separatorRegExp= header, a non-comment line does not split into exactly three fields (inflected form, lemma, POS). Fires on lines with too few/many tabs, wrong separator, or merged columns in added.txt.","triggerScenarios":"Thrown at languagetool-core/src/main/java/org/languagetool/tagging/ManualTagger.java:110 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rewrite the cited line to have exactly three tab-separated fields: word, lemma, POS tag","Check for a #separatorRegExp= header that redefines the expected separator","Remove embedded separator characters from within fields"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}