/*
* 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;
/** Represents a word, its spelling and its pronunciation. */
public class Word implements Comparable<Word> {
/** The Word representing the unknown word. */
public static final Word UNKNOWN;
static {
Pronunciation[] pros = {Pronunciation.UNKNOWN};
UNKNOWN = new Word("<unk>", pros, false);
Pronunciation.UNKNOWN.setWord(UNKNOWN);
}
private final String spelling; // the spelling of the word
private final Pronunciation[] pronunciations; // pronunciations of this
// word
private final boolean isFiller;
/**
* Creates a Word
*
* @param spelling the spelling of this word
* @param pronunciations the pronunciations of this word
* @param isFiller true if the word is a filler word
*/
public Word(String spelling, Pronunciation[] pronunciations,
boolean isFiller) {
this.spelling = spelling;
this.pronunciations = pronunciations;
this.isFiller = isFiller;
}
/**
* Returns the spelling of the word.
*
* @return the spelling of the word
*/
public String getSpelling() {
return spelling;
}
/**
* Determines if this is a filler word
*
* @return <code>true</code> if this word is a filler word, otherwise it
* returns <code>false</code>
*/
public boolean isFiller() {
return isFiller;
}
/**
* Returns true if this word is an end of sentence word
*
* @return true if the word matches Dictionary.SENTENCE_END_SPELLING
*/
public boolean isSentenceEndWord() {
return Dictionary.SENTENCE_END_SPELLING.equals(this.spelling);
}
/**
* Returns true if this word is a start of sentence word
*
* @return true if the word matches Dictionary.SENTENCE_START_SPELLING
*/
public boolean isSentenceStartWord() {
return Dictionary.SENTENCE_START_SPELLING.equals(this.spelling);
}
/**
* Retrieves the pronunciations of this word
*
* @return the pronunciations of this word
*/
public Pronunciation[] getPronunciations() {
return pronunciations;
}
/**
* Get the highest probability pronunciation for a word
*
* @return the highest probability pronunciation
*/
public Pronunciation getMostLikelyPronunciation() {
float bestScore = Float.NEGATIVE_INFINITY;
Pronunciation best = null;
for (Pronunciation pronunciation : pronunciations) {
if (pronunciation.getProbability() > bestScore) {
bestScore = pronunciation.getProbability();
best = pronunciation;
}
}
return best;
}
@Override
public int hashCode() {
return spelling.hashCode();
}
@Override
public boolean equals(Object obj) {
return obj instanceof Word && spelling.equals(((Word) obj).spelling);
}
/**
* Returns a string representation of this word, which is the spelling
*
* @return the spelling of this word
*/
@Override
public String toString() {
return spelling;
}
public int compareTo(Word other) {
return getSpelling().compareTo(other.getSpelling());
}
}