marytts.modules.ProsodyGenericFST Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2005 DFKI GmbH. All rights reserved.
*/
package marytts.modules;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
import java.util.Set;
import marytts.datatypes.MaryDataType;
import marytts.fst.FSTLookup;
public class ProsodyGenericFST extends ProsodyGeneric {
public ProsodyGenericFST(MaryDataType inputType, MaryDataType outputType, Locale locale, String tobipredFileName,
String accentPriorities, String syllableAccents, String paragraphDeclination) throws IOException {
super(inputType, outputType, locale, tobipredFileName, accentPriorities, syllableAccents, paragraphDeclination);
}
/**
* Read a list from an external file. This implementation can read from finite state transducer files (filenames ending in
* .fst
).
*
* @param resourceName
* resource file in classpath from which to read the list; suffix identifies list format.
* @return An Object representing the list; checkList() must be able to make sense of this. This implementation returns an
* FSTLookup for .fst files or a Set for .txt files.
* @throws IllegalArgumentException
* if the fileName suffix cannot be identified as a list file format.
*/
@Override
protected Object readListFromResource(String resourceName) throws IOException {
String suffix = resourceName.substring(resourceName.length() - 4, resourceName.length());
if (suffix.equals(".fst")) { // FST file
InputStream resourceStream = this.getClass().getResourceAsStream("prosody/" + resourceName);
// put the external FST on the map
return new FSTLookup(resourceStream, resourceName, "ISO-8859-1");
} else {
return super.readListFromResource(resourceName);
}
}
/**
* Checks if tokenValue is contained in list. This implementation is able to deal with list types represented as FSTLookups or
* as Sets.
*
* @param currentVal
* the condition to check; can be either INLIST:
or !INLIST:
followed by the list name to
* check.
* @param tokenValue
* value to look up in the list
* @return whether or not tokenValue is contained in the list.
*/
@Override
protected boolean checkList(String currentVal, String tokenValue) {
if (currentVal == null || tokenValue == null) {
throw new NullPointerException("Received null argument");
}
if (!currentVal.startsWith("INLIST") && !currentVal.startsWith("!INLIST")) {
throw new IllegalArgumentException("currentVal does not start with INLIST or !INLIST");
}
boolean negation = currentVal.startsWith("!");
String listName = currentVal.substring(currentVal.indexOf(":") + 1);
Object listObj = listMap.get(listName);
if (listObj == null)
return false; // no list found
boolean contains;
if (listObj instanceof Set) {
Set set = (Set) listObj;
contains = set.contains(tokenValue);
} else if (listObj instanceof FSTLookup) {
FSTLookup fst = (FSTLookup) listObj;
contains = fst.lookup(tokenValue).length > 0;
} else {
throw new IllegalArgumentException("Unknown list representation: " + listObj);
}
if (contains && negation || !contains && !negation)
return false;
else
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy