Ostatnio dłubie prze androidzie z rozpoznawaniem mowy. Korzystam z usługi rozpoznawania mowy od googla (dołączona do Androida), której jakość jest taka sobie.
Mam jakiś zestaw komend typu: "<komenda> <parametr>" gdzie <komenda> i <parametr> reprezentują kilka słów ze znanego zbioru.
Np: "otwórz plik cienista dolina" "usuń plik niebieskie niebo" itp
Usługa googla zwraca mi około pięciu możliwości o różnej jakości.
No i teraz problem. Jak efektywnie zmierzyć dopasowanie tego czego się z podziewam z tym co dostałem od usługi?
(niestety API androida nie dostarcza wyników pośrednich takich jak zapis fonetyczny tego co zostało rozpoznane).
Problem też jest taki, że dostępne komendy mają synonimy o różnej długości, więc stwierdzenie gdzie się kończy komenda a gdzie zaczyna parametr, nie jest trywialne.
Obecnie po prostu mierzę odległość Levensteina pomiędzy tym czego się spodziewam (generuje wszystkie spodziewane kombinacje), a to co uzyskałem i wyszukuję najbliższego dopasowania. Jeśli najmniejsza odległość Levensteina nie spełnia odpowiedniej relacji z długością spodziewanej komendy, to odrzucam wyniki jako niezadowalające.
Efekt nie jest zły, ale chciałbym to jeszcze poprawić. Czy znane są wam jakieś algorytmy, które lepiej się sprawdzą?
Inna metryka odległości? Na przykład taka, która pozwoli na detekcję prefiksów o rożnej długości.
A może znacie jakaś inną lepszą usługę rozpoznawania mowy, którą łatwo można wykorzystać na androidzie?
Liczę na jakiś feadback, który naprowadzi mnie na odpowiednie "tory".