
morfologik.tools.FSACompile Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of morfologik-tools Show documentation
Show all versions of morfologik-tools Show documentation
Morfologik Command Line Tools
package morfologik.tools;
import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import morfologik.fsa.FSA;
import morfologik.fsa.builders.FSABuilder;
import morfologik.fsa.builders.FSASerializer;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import com.beust.jcommander.ParametersDelegate;
/**
* Build finite state automaton out of text input.
*/
@Parameters(
commandNames = {"fsa_compile"},
commandDescription = "Builds finite state automaton from \\n-delimited input.")
public class FSACompile extends CliTool {
@Parameter(
names = {"-i", "--input"},
description = "The input sequences (one sequence per \\n-delimited line).",
required = true,
validateValueWith = ValidateFileExists.class)
private Path input;
@Parameter(
names = {"-o", "--output"},
description = "The output automaton file.",
required = true,
validateValueWith = ValidateParentDirExists.class)
private Path output;
@Parameter(
names = {"-f", "--format"},
description = "Automaton serialization format.")
private SerializationFormat format = SerializationFormat.FSA5;
@ParametersDelegate
private final BinaryInput binaryInput;
FSACompile() {
binaryInput = new BinaryInput();
}
public FSACompile(Path input,
Path output,
SerializationFormat format,
boolean acceptBom,
boolean acceptCr,
boolean ignoreEmpty) {
this.input = checkNotNull(input);
this.output = checkNotNull(output);
this.binaryInput = new BinaryInput(acceptBom, acceptCr, ignoreEmpty);
}
@Override
public ExitStatus call() throws Exception {
final List sequences = binaryInput.readBinarySequences(input, (byte) '\n');
Collections.sort(sequences, FSABuilder.LEXICAL_ORDERING);
FSA fsa = FSABuilder.build(sequences);
FSASerializer serializer = format.getSerializer();
try (OutputStream os = new BufferedOutputStream(Files.newOutputStream(output))) {
serializer.serialize(fsa, os);
}
return ExitStatus.SUCCESS;
}
public static void main(String[] args) {
main(args, new FSACompile());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy