Array,

2014-12-09 28 views
5

kelimesinin tamamı yerine bir giriş sözcüğünden sadece bir parça algıladı Android uygulamamda bir sorun var, bu sesli tanımlamayı kullanan bir uygulama ve Google TTS. SIRI müşterisi gibi. kullanıcı dizide verilen bir kelime söylediğinde Burada gördüğünüz gibi:Array,

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; 
    } 
} 

Her şey iyi çalışıyor ancak kullanıcı dediğinde "merhaba" ilk ilk iki karakter "ha" algılar. Dize dizisinde 'f' den bahsedilir. Yani bu sinir bozucu, tüm kelime algılanmadı ama sadece bir kısmı.

böyle iki dize diziler takas zaman:

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; 
    } 
} 

Sonra "merhaba" ilk yerine "ha"

I 100'den fazla diziler yaparsanız Ama bu can sıkıcı olurdu algılar java'nın en iyi eşleşen kelimeyi sadece bir parça yerine bir diziden kullanmasına nasıl izin verebilirim?

Ben bunu anlamak zor biliyorum ama siz anlamıyorum eğer burada benim kaynağını bakın: http://github.com/gi097/PWS

DÜZENLEME: değiştirmek

contains 

için
equals 

Bu sorunu çözüyorum ama şimdi yeni bir tane var. ne: Ben gibi bir dizi oluşturursanız

:

"I am" 

kullanıcı dediğinde: "Ben Giovanni duyuyorum" biz "diye am" eşitler nedeniyle artık algılanmıyor böyle bir sorun ... .

EDIT2

Ben "I" "am" "Giovanni" ama nasıl "Ben Giovanni duyuyorum" mostLikelythingHeard ayrılma ile düşünmek düzeltilebilir? Bunun yerine

mostLikelyThingHeard.contains(strings) 

Kullanım

cevap

0

:

Arrays.sort(g); 
int index = Arrays.binarySearch(g, mostLikelyThingHeard); 
if (index >= 0) { 
    System.out.println("I heard it properly and its ", g[index]); 
} 

here belirtildiği gibi dizesinin alt sıra için kontrol içerir. Dize "hallo" ise, o zaman "Hallo".contains("ha") hallo içinde ha arar ve evet ha hallo içinde ve dolayısıyla senin sorunun.

+0

Bunun işe yarayıp yaramadığını bilmiyorum, örneğin 100 dizim varsa, parça karakter yerine tüm sözcüğü algılayacak mı? –

+0

Evet, tüm kelimeyi karşılaştırır. Yani dizeniniz halloluysa ve dizininizde ha ve hallo olsaydı, hallo bulacak ve ha. Denemek. – SMA

+0

Tamam, evdeyken deneyeceğim: D –