/*
* Copyright 1999-2002 Carnegie Mellon University.
* Portions Copyright 2002 Sun Microsystems, Inc.
* Portions Copyright 2002 Mitsubishi Electric Research Laboratories.
* All Rights Reserved. Use is subject to license terms.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*
*/
package edu.cmu.sphinx.linguist.dictionary;
import java.util.List;
import edu.cmu.sphinx.linguist.acoustic.Unit;
/** Provides pronunciation information for a word. */
public class Pronunciation {
public static final Pronunciation UNKNOWN = new Pronunciation(Unit.EMPTY_ARRAY, null, 1.0f);
private Word word;
private final Unit[] units;
private final String tag;
private final float probability;
/**
* Creates a pronunciation
*
* @param units represents the pronunciation
* @param tag a grammar specific tag
* @param probability the probability of this pronunciation occurring
*/
public Pronunciation(Unit[] units,
String tag,
float probability) {
this.units = units;
this.tag = tag;
this.probability = probability;
}
/**
* Creates a pronunciation
*
* @param units represents the pronunciation
* @param tag a grammar specific tag
* @param probability the probability of this pronunciation occurring
*/
protected Pronunciation(List<Unit> units,
String tag,
float probability) {
Unit[] unitsArray = units.toArray(new Unit[units.size()]);
this.units = unitsArray;
this.tag = tag;
this.probability = probability;
}
/**
* Creates a pronunciation with defaults
*
* @param units represents the pronunciation
*/
protected Pronunciation(List<Unit> units) {
this(units, null, 1.0f);
}
/**
* Sets the word this pronunciation represents.
*
* @param word the Word this Pronunciation represents
*/
public void setWord(Word word) {
if (this.word == null) {
this.word = word;
} else {
throw new Error("Word of Pronunciation cannot be set twice.");
}
}
/**
* Retrieves the word that this Pronunciation object represents.
*
* @return the word
*/
public Word getWord() {
return word;
}
/**
* Retrieves the units for this pronunciation
*
* @return the units for this pronunciation
*/
public Unit[] getUnits() {
return units;
}
/**
* Retrieves the tag associated with the pronunciation or null if there is no tag associated with this
* pronunciation. Pronunciations can optionally be tagged to allow applications to distinguish between different
* pronunciations.
*
* @return the tag or null if no tag is available.
*/
public String getTag() {
return tag;
}
/**
* Retrieves the probability for the pronunciation. A word may have multiple pronunciations that are not all equally
* probable. All probabilities for particular word sum to 1.0.
*
* @return the probability of this pronunciation as a value between 0 and 1.0.
* <p>
* TODO: FIX Note that probabilities are currently maintained in the linear domain (unlike just about
* everything else)
*/
public float getProbability() {
return probability;
}
/** Dumps a pronunciation */
public void dump() {
System.out.println(toString());
}
/**
* Returns a string representation of this Pronunication.
*
* @return a string of this Pronunciation
*/
@Override
public String toString() {
StringBuilder result = new StringBuilder().append(word).append('(');
for (Unit unit : units) {
result.append(unit).append(' ');
}
result.append(')');
return result.toString();
}
/**
* Returns a detailed string representation of this Pronunciation.
*
* @return a string of this Pronunciation
*/
public String toDetailedString() {
StringBuilder result = new StringBuilder().append(word).append(' ');
for (Unit unit : units) {
result.append(unit).append(' ');
}
result.append("\n class: ").append(" tag: ").append(tag).append(" prob: ").append(probability);
return result.toString();
}
}