Grammar API

<span style="font-size:24px;">public abstract class Grammar implements Configurable, GrammarInterface
本类实现了创建语法的语法接口。一个语法类内部是当做一个语法节点和语法弧组成的图所表示的。通过调用getInitialNode()方法将会获得在语法图中的第一个节点。为了遍历整个语法图,可以通过调用语法节点的getSuccessors方法,此方法会返回的是一个语法弧的数组,从语法弧数组我们可以达到语法节点的邻居节点。通过一直调用此方法我们就能够遍历整个语法图。注意所有的语法的概率都是在log域中的了。
本类的属性:
@S4Boolean(defaultValue = false)
public final static String PROP_SHOW_GRAMMAR = "showGrammar";属性用来控制是否打印此语法类对象。
@S4Boolean(defaultValue = true)
public final static String PROP_OPTIMIZE_GRAMMAR = "optimizeGrammar";属性是否优化语法对象。
@S4Boolean(defaultValue = false)
public final static String PROP_ADD_SIL_WORDS = "addSilenceWords";属性控制静音字是否被插入语法图中。
@S4Boolean(defaultValue = false)
public final static String PROP_ADD_FILLER_WORDS = "addFillerWords";属性控制填充字是否插入到语法图中。
@S4Component(type = Dictionary.class)
public final static String PROP_DICTIONARY = "dictionary";属性定义了此语法类使用的字典对象。
配置属性:
protected Logger logger;
private boolean showGrammar;十分显示语法图
private boolean optimizeGrammar = true;是否优化语法图。语法类
private boolean addSilenceWords;是否添加静音字
private boolean addFillerWords;是否添加填充字
protected Dictionary dictionary;字典
protected GrammarNode initialNode;初始化节点
private Set<GrammarNode> grammarNodes;节点集
private final static Word[][] EMPTY_ALTERNATIVE = new Word[0][0];空的可选择字
private final Random randomizer = new Random(56); / use fixed initial to make get deterministic random value for testing。随机数生成器。用于选取随机的节点后续弧。
private int maxIdentity;最大节点id
private boolean postProcessed;是否被后处理过
private boolean idCheck;是否进行了id检查。
本类的构造方法:
public Grammar(boolean showGrammar,boolean optimizeGrammar,boolean addSilenceWords, boolean addFillerWords, Dictionary dictionary );给定参数构造对象。
  public Grammar();空的构造方法。
本类的方法:
public void newProperties(PropertySheet ps);用于通过XML来设置属性
public void allocate();为此语法类分配资源
  public void deallocate();为此语法类释放资源。
public GrammarNode getInitialNode();获得语法类即语法图中的初始节点。
protected void newGrammar();为创建一个新的语法做准备。
protected abstract GrammarNode createGrammar();创建一个新的语法,此方法应该有其子类实现。返回的是此语法类的初始化节点。
protected GrammarNode createGrammar(String bogusText);从引用文本来创建类(没有实现);参数:bogusText为 dummy variable
public Dictionary getDictionary();为此语法类获得字典对象。
  public Set<GrammarNode> getGrammarNodes();获得此语法类对象的节点的集合。即grammarNodes属性。
public int getNumNodes();获得的是此语法中的语法节点的数目。即个数。
public void dumpGrammar(String name);打印出整个语法图。即语法类对象。
protected void postProcessGrammar();执行标准的语法后处理过程集。此方法包括插入静音节点和对空节点进行优化处理。
private void addFillerWords();
private Word[] getInterWordFillers();从字典中获得填充字数组。此填充字数组中的填充字是不包括句开始填充字和句结束填充字的。即返回的填充字数组是滤除了那些不能到字中的那些填充字的填充字数组。
private void addSilenceWords();在语法中在每一个非填充非空的语法节点后加一个可选择的静音字语法节点。
private void optimizeGrammar();从语法图中排除那些不必要的节点。此方法会遍历整个语法图,并查找那些没有可选择字,仅有一个单独的出口节点分支节点。然后绕过这些节点。
private void addFillerWords();在语法中的每一个非填充非空的字节点的后加一个可选择的填充字循环。为节点循环。
private void add(GrammarNode node);添加给定的语法节点到此语法的节点集合中。在此方法中检测了此语法节点的id,防止其已经存在此id值的语法节点。
protected GrammarNode createGrammarNode(boolean isFinal);创建一个空的语法节点在此语法中。语法节点的id自动分配。isFinal为true,表示是终止节点。
protected GrammarNode createGrammarNode(int identity, boolean isFinal);在此语法图中创建一语法节点,并把节点加入语法的节点集中。输入参数:identity为语法节点的身份即id。isFinal是否为终止节点。返回的新创建的语法节点。
protected GrammarNode createGrammarNode(String word);返回一个给定单独字的新的语法节点。如果输入的字是不存在于字典中的,则一个空的语法节点被创建,此语法节点的id是自动分配的。返回的是新创建的语法节点。
protected GrammarNode createGrammarNode(int identity, String word);返回一个给定单独字的新语法节点。如果此字是不存在于字典中的,则一个空的节点被创建。输入参数:identity节点id身份。Word为字的字符串表示即字的拼写。创建的节点加入了语法节点集中的。
protected GrammarNode createGrammarNode(int identity, String[][] alts);返回一个给定的可选择集(字的集合)的新的语法节点。输入参数为:identity为其语法节点的id。Alts为新建的语法节点的可选字列表的集合。即alternatives。
  protected abstract GrammarNode createGrammar();创建一个语法节点由此类的子类来实现。
private GrammarNode selectRandomSuccessor(GrammarNode node);给定一个语法节点,从此节点的直接后续弧集合中选择一个随机后续弧,并得到其节点。返回的是一个随机的后续节点。使用了相应的算法。需注意。
  public String getRandomSentence();返回此语法图中的一个随机句,从初始节点开始的。
public void dumpRandomSentences(int count);输入参数:count为打印的次数不可能超过此数。也许会打印少于此数次数,这依赖于在语法中独特句子的数量。在此方法中会继续count获取随机句。即获得count句随机句。打印的是count句随机句中那些没有重复的句。即如果有2句是相同的,则只打印一句。
public void dumpRandomSentences(String path, int count);到此方法的上方法所打印的输出到指定的路径下。即指定的文件中。Path为存储打印句的文件名。
public void dumpStatistics();为此语法打印统计数。包括节点数。弧数。平均弧数。是打印到log中的。</span>
	

在AutoIt中,SAPI(Speech Application Programming Interface)主要用于语音合成和语音识别,而Grammar(语法)是用来定义用户能说出的特定结构化指令。如果要在AutoIt中使用SAPI创建自定义语法,通常需要利用SAPI5的词法分析(Lexical Analysis)功能,但这不是AutoIt的基本功能,所以你需要借助一些技巧或者外部库。 由于AutoIt自身并不支持SAPI Grammar的完全编写和管理,你可能会选择以下几个步骤: 1. **使用外部脚本**:你可以创建一个外部的批处理文件或者用其他语言(如C#)编写一个简单的服务,创建和管理Grammar,然后通过AutoIt的ShellExecute或Run函数调用。 ```autoit ; 使用ShellExecute调用外部C#脚本 Local $cmd = "C:\path\to\your\custom_grammar_generator.exe" ShellExecute($cmd) ``` 注意,这需要你提前准备好C#脚本来生成和安装Grammar。 2. **创建XML Grammar文件**:在C#或其他支持的环境中编写代码生成XML格式的Grammar文件,SAPI能够解析这种格式。然后在AutoIt中使用Shell或系统函数读取并安装。 3. **通过SAPI API注册Grammar**:如果你非常熟悉SAPI API,可以在C#中调用相应方法(如`CoCreateInstance`、`IMSGrammarBuilder`等),生成Grammar后将其设置给SAPI对象。 尽管如此,这都是非常复杂的操作,适合有一定编程经验的开发者。对于普通用户,通常推荐使用更友好的语音控制工具,如Windows自带的语音识别设置或者预装的语音识别应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值