postlexicalanalyzer.java
来自「这是java 开发的的免费语音播放插件,很值得学习参考!!!!!!!!!!!!1」· Java 代码 · 共 132 行
JAVA
132 行
/** * Portions Copyright 2001 Sun Microsystems, Inc. * Portions Copyright 1999-2001 Language Technologies Institute, * Carnegie Mellon University. * 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 com.sun.speech.freetts.en;import com.sun.speech.freetts.UtteranceProcessor;import com.sun.speech.freetts.Voice;import com.sun.speech.freetts.Utterance;import com.sun.speech.freetts.Item;import com.sun.speech.freetts.Relation;import com.sun.speech.freetts.ProcessException;import com.sun.speech.freetts.PathExtractorImpl;import com.sun.speech.freetts.PathExtractor;/** * Annotates the utterance with post lexical information. */public class PostLexicalAnalyzer implements UtteranceProcessor { private static final PathExtractor wordPath = new PathExtractorImpl("R:SylStructure.parent.parent.name", true); private static final PathExtractor P_PH_VC = new PathExtractorImpl("p.ph_vc", true); private static final PathExtractor N_PH_VC = new PathExtractorImpl("n.ph_vc", true); /** * Constructs a PostLexicalAnalyzer */ public PostLexicalAnalyzer () { } /** * Performs the post lexical processing. * * @param utterance the utterance to process * * @throws ProcessException if an error occurs while * processing of the utterance */ public void processUtterance(Utterance utterance) throws ProcessException { fixApostrophe(utterance); fixTheIy(utterance); } /** * Fixes apostrophe s segments. * * @param utterance the utterance to fix */ private void fixApostrophe(Utterance utterance) { Voice voice = utterance.getVoice(); for (Item item = utterance.getRelation(Relation.SEGMENT).getHead(); item != null; item = item.getNext()) { String word = wordPath.findFeature(item).toString(); if (word.equals("'s")) { String pname = item.getPrevious().toString(); if (("fa".indexOf( voice.getPhoneFeature(pname,"ctype")) != -1) && ("dbg".indexOf( voice.getPhoneFeature(pname, "cplace")) == -1)) { prependSchwa(item); } else if (voice.getPhoneFeature(pname, "cvox").equals("-")) { item.getFeatures().setString("name", "s"); } } else if (word.equals("'ve") || word.equals("'ll") || word.equals("'d")) { if ("-".equals(P_PH_VC.findFeature(item))) { prependSchwa(item); } } } } /** * Prepends a schwa to the given item * * @param item the item to prepend the schwa to. */ private static void prependSchwa(Item item) { Item schwa = item.prependItem(null); schwa.getFeatures().setString("name", "ax"); item.getItemAs( Relation.SYLLABLE_STRUCTURE).prependItem(schwa); } /** * Changes the pronunciation of "the" from 'd ax' to 'd iy' if * the following word starts with a vowel. "The every" is a good * example. * * @param utterance the utterance to process */ private void fixTheIy(Utterance utterance) { Voice voice = utterance.getVoice(); for (Item item = utterance.getRelation(Relation.SEGMENT).getHead(); item != null; item = item.getNext()) { if ("ax".equals(item.toString())) { String word = wordPath.findFeature(item).toString(); if ("the".equals(word) && ("+".equals(N_PH_VC.findFeature(item)))) { item.getFeatures().setString("name", "iy"); } } } } /** * Returns the string representation of the object * * @return the string representation of the object */ public String toString() { return "PostLexicalAnalyzer"; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?