Java 如何查看Pocketsphinx字典中是否存在该词?
我只是想看看字典文件中是否存在字符串。(问题底部的词典文件) 我想检查语音识别器是否能识别单词。例如,识别器将无法识别Java 如何查看Pocketsphinx字典中是否存在该词?,java,android,database,voice-recognition,cmusphinx,Java,Android,Database,Voice Recognition,Cmusphinx,我只是想看看字典文件中是否存在字符串。(问题底部的词典文件) 我想检查语音识别器是否能识别单词。例如,识别器将无法识别ahdfojakdlfafiop字符串,因为字典中未定义该字符串。那么,我能检查一下pocktsphinx字典里有没有单词吗? 比如: if(myString.existsInDictionary){ startListeningBecauseExists(); }else( //Doesn't exist in dictionary!!! } 我
ahdfojakdlfafiop
字符串,因为字典中未定义该字符串。那么,我能检查一下pocktsphinx字典里有没有单词吗?
比如:
if(myString.existsInDictionary){
startListeningBecauseExists();
}else(
//Doesn't exist in dictionary!!!
}
我只是想知道识别器是否能听到我想听到的内容
这是字典文件:
谢谢
Ruchir使用
BufferedReader
读取文件,并将所有单词存储在ArrayList
ArrayList<String> dictionary = new ArrayList<>();
String line;
BufferedReader reader = new BufferedReader(new FileReader(dictionaryFile));
while((line = reader.readLine()) != null) {
if(line.trim().length() <= 0 ) {
continue;
}
String word = line.split(" ")[0].trim();
word = word.replaceAll("[^a-zA-Z]", "");
dictionary.add(word);
}
希望对你有所帮助。你可以通过逐行阅读字典,将其加载到arraylist中,只得到单词do
arraylist.add(line.split(\\s+)[0])代码>
然后检查它是否存在
if(arraylist.contains(word))
在C中,有一个函数允许您查找单词:
if (ps_lookup_word(ps, "abc") == NULL) {
// do something
}
在Java包装器中,它是一种方法解码器。lookupford
:
if(decoder.lookupWord("abc") == null) {
// do something
}
在Android中,您可以从识别器
访问解码器:
if(recognizer.getDecoder().lookupWord("abc") == null) {
// do something
}
查看一下将字典文件中的所有单词读入ArrayList
,并始终检查if(list.contains(myString))
@BalwinderSingh我知道如何读取文件,但如果您查看我问题中的链接,就不是那么简单了。每一行旁边都有一个我不在乎的发音。我所关心的是每一行上的单词。我怎么能读这些词呢?@ELITE我知道如何读文件,但如果你看看我问题中的链接,就不是那么直截了当了。每一行旁边都有一个我不在乎的发音。我所关心的是每一行上的单词。我怎么能只读单词呢?我刚刚回复了我的答案,包括阅读从你的字典文件中抽取的一个字典文件。您可以在下面查看,希望有帮助。@Ruchir Baronia Ohh抱歉\s+是一个空白,在字典中有一个单词(您想要的)然后是一个空格,然后是你不想要的东西,所以如果你用空格分割它,得到数组中的第一个字符串,你只会得到单词,所以它会在空格后分割所有内容?@RuchirBaronia它会在字符串数组中将行分割成多个单词,你想要的单词是第一个,因此你会得到第一个字符串并将其添加到列表中。无需浪费内存并再次读取文件,解码器已经对其进行了解析。此外,在文件中的单词旁边,还可以向解码器添加其他单词。不需要浪费内存,也不需要再次读取文件,因为它已经被解码器解析了。另外,可能会在文件中的单词旁边向解码器添加其他单词。在初始化系统之前只读取一次文件,而不是每次都检查工作。我同意它浪费了大量内存,因为它在ArrayList中保存了所有单词…您的代码在性能方面也非常低效,最好使用哈希集
,不ArrayList
。在十万条条目的列表中搜索一个元素不是一个好主意。你不需要制作两个识别器,你需要使用单个识别器并在活动中共享它。你请求识别器服务获取一个单词并返回结果,只需添加另一个请求代码。嘿,Nikolay,我想知道我们是否可以在IOS上使用Pocketsphinx进行连续语音识别。可能吗?谢谢@NikolayShmyrev,你能告诉我,在安卓系统中,这个代码应该放在哪里吗
if(recognizer.getDecoder().lookupWord("abc") == null) {
// do something
}