languagetool-org/languagetool · error · IOException
A separator character (fsa.dict.separator) must be defined i
Error message
A separator character (fsa.dict.separator) must be defined in the dictionary info file.
What it means
Configuration guard during dictionary export: the .info file lacks fsa.dict.separator, so outputSeparatorToTab cannot know which character to convert to tabs when dumping the FSA contents.
Source
Thrown at languagetool-tools/src/main/java/org/languagetool/tools/DictionaryExporter.java:92
System.out.println("Running Morfologik FSADecompile.main with these options: " + Arrays.toString(buildOptions));
FSADecompile.main(buildOptions);
} else {
String[] buildOptions = {"--exit", "false",
"-i", binaryDictFile.toString(),
"-o", tmpOutputFile.toString()
};
System.out.println("Running Morfologik DictDecompile.main with these options: " + Arrays.toString(buildOptions));
DictDecompile.main(buildOptions);
}
outputSeparatorToTab(tmpOutputFile);
System.out.println("Done. The dictionary export has been written to " + getOutputFilename());
}
protected void outputSeparatorToTab(File inputFile) throws RuntimeException, IOException {
File outputFile = new File(getOutputFilename());
String separator = getOption("fsa.dict.separator");
if (separator == null || separator.trim().isEmpty()) {
throw new IOException(
"A separator character (fsa.dict.separator) must be defined in the dictionary info file.");
}
boolean hasFrequency = isOptionTrue("fsa.dict.frequency-included");
String encoding = getOption("fsa.dict.encoding");
try (Scanner scanner = new Scanner(inputFile, encoding);
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), encoding))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] parts = line.split(Pattern.quote(separator));
if (parts.length == 3) {
if (hasFrequency) { // remove frequency data in the last byte
parts[2] = parts[2].substring(0, parts[2].length() - 1);
}
out.write(parts[1] + "\t" + parts[0] + "\t" + parts[2] + "\n");
} else if (parts.length == 2) {
// if (hasFrequency) {
// out.write(parts[1] + "\n");View on GitHub (pinned to 2e990059ce)
Solutions
- Add fsa.dict.separator=<char> to the dictionary .info file
- Ensure the info file passed to DictionaryExporter is the one matching the binary dictionary
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at languagetool-tools/src/main/java/org/languagetool/tools/DictionaryExporter.java:92 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of languagetool-org/languagetool@2e990059ce (2026-09-06).
Data as JSON: /api/errors/62fb90b25aebfa2d.
Report an issue: GitHub.