我的Android应用中存在问题,它是使用语音识别和Google TTS的应用。它就像一个SIRI客户端。正如您在此处看到的那样,当用户说出数组中给出的单词时:
String[] g = { "hallo", "heey", "hoi", "hey", "he", "hee", "hay" };
for (String strings : g) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "leuk dat je er bent", "heeyy" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
String[] f = { "haha", "hah", "ha" };
for (String strings : f) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "haha leuk grapje", "hiehaho" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
一切正常,但当用户说" hallo"它检测前两个字符" ha"第一。字符串数组中提到了f' f'。所以这很烦人,整个单词都没有被检测到但只有一部分来自它。
当我像这样交换两个字符串数组时:
String[] f = { "haha", "hah", "ha" };
for (String strings : f) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "haha leuk grapje", "hiehaho" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
String[] g = { "hallo", "heey", "hoi", "hey", "he", "hee",
"hay" };
for (String strings : g) {
if (mostLikelyThingHeard.contains(strings)) {
String[] array = { "leuk dat je er bent", "heeyy" };
String randomStr = array[new Random()
.nextInt(array.length)];
tts.speak(randomStr, TextToSpeech.QUEUE_FLUSH, null);
return;
}
}
然后它确实检测到了#hal;"首先而不是" ha"
但是如果我制作超过100个数组这会很烦人,那么我怎样才能让java使用数组中最匹配的单词而不只是一个部分呢?
我知道这很难理解,但如果你们不明白,请看我的来源: http://github.com/gi097/PWS
编辑:
当我改变
contains
到
equals
我解决了这个问题,但现在我又找到了一个新问题:
如果我创建一个像:
这样的数组"I am"
当用户说:"我是Giovanni"我们遇到的问题是"我是"由于等于......所以没有被检测到。
EDIT2
它可以修复我认为分裂大多数喜欢的东西"我是Giovanni"到"我" "是" "乔瓦尼"但是如何?
答案 0 :(得分:0)
而不是
mostLikelyThingHeard.contains(strings)
使用:
Arrays.sort(g);
int index = Arrays.binarySearch(g, mostLikelyThingHeard);
if (index >= 0) {
System.out.println("I heard it properly and its ", g[index]);
}
包含对here所提及的字符串子序列的检查。因此,如果你的字符串是“hallo”,那么"Hallo".contains("ha")
在hallo中搜索ha,是的ha是在hallo中,因此是你的问题。