2016-11-19 9 views
-1

필자는 Microsoft Speech API (SAPI, 5.3)를 사용하여 내 응용 프로그램 (Windows, 분명히 C++, Win8 SDK)에 음성 인식 지원을 추가하고 문법로드와 관련된 몇 가지 후프 점프를 제외했습니다 파일이 꽤 잘 작동하고 있습니다.SAPI 규칙 열거

그러나 파일에서로드 된 문법의 규칙을 열거하는 방법을 알아내는 데 어려움이 있습니다 (또는 가능한 경우). 분명히 수동/동적으로 문법을 작성할 때 규칙을 직접 작성하게됩니다. 그러나 은 파일에서로드 된 문법의 규칙을 열거하는 방법으로으로 표시되지 않습니다. IspRecoGrammar :: GetRule()은 규칙을 쿼리 할 수있는 가장 가까운 것으로 보이지만 알려진 단일 규칙 (규칙 이름 또는 ID가 필요함)을 검색하기위한 것입니다.

당분간 나는 XML을 간단히 파싱하고 규칙 이름을 뽑아 내고 있지만 실제로는 완벽한 해결책은 아닙니다. XML 바이너리 문법 구성 파일을 모두 지원해야하는데, 후자는 내 현재 해결 방법을 회피합니다.

SAPI 경험이있는 사람이라면 누구든지이 작업을 어떻게 수행 할 수 있는지 알고 있습니까?

+0

여기에서 달성하고자하는 상위 목표는 무엇입니까? (일명 - 왜 SAPI 규칙을 열거해야한다고 생각하십니까?) –

+0

답장을 보내 주셔서 감사합니다, Eric. 즉,로드 된 문법의 규칙에 대해 가지고있는 다른 데이터를 사전에 검증해야합니다. 이 다른 데이터는 이름으로 규칙을 참조하므로이 다른 데이터의로드시에는 데이터 참조가 실제로 유효한 문법 규칙 (이름)을 검증하고자합니다. – SBD

+0

앞서 언급 한 XML 처리 외에도 SAPI 인식 콜백을 통해 발생하는 "알려진 세트"에 규칙을 검증하지 않고 단순히 추가하는 것만으로도 얻을 수 있습니다.하지만 이는 매우 강력한 솔루션이 아닙니다. 잡기 데이터 오류. – SBD

답변

0

IspRecoGrammar::GetRule()은 여전히 ​​필요한 것을 수행 할 것으로 보입니다. 알려진 규칙 이름 집합을 가지고 있고 다른 데이터를로드 할 때 IspRecoGrammar::GetRule()을 사용하여 규칙 이름이 알려진 좋은 이름 집합에 포함되어 있지 않은 경우 규칙 이름의 유효성을 검사합니다. 그것이 유효하면 세트에 추가하십시오. (또한 나쁜 이름으로 알려진 집합을 가질 수도 있습니다.)

+0

좋은 제안, 그 방향에서 그것에 가야한다는 생각이 들지 않았습니다. 그것은 분명히 현재의 문제를 해결할 것입니다 (기존의 데이터 검증). 앞으로 생각해 보면, 참조하는 데이터를 저작하기위한 알려진 규칙의 목록을 제시하면 규칙 열거에서 사각 형태로 되돌릴 수 있습니다. 나는 당신이 아는 한, 규칙을 열거 할 길이 없다고 생각한다. 내 자신의 상당히 깊은 인터넷 검색은 비슷한 것을 시도하는 사람이나 사람을 찾지 못했습니다. – SBD

+0

@SBD 몇 가지 확인을했고 대부분의 문법 컴파일 작업은 SAPI 인터페이스의 엔진 측에서 수행되었습니다. 이는 문법 컴파일 중에 수행 된 모든 규칙 열거가 내부 문제에서 수행되고 규칙 열거를위한 다른 클라이언트 측 인터페이스가 없음을 의미합니다. –

+0

감사합니다. 분명히이 점에 대한 명확한 필요는 아직 없습니다. 아마도 미래 버전이 시설을 제공 할 것입니다 (노출하기 쉬운 것 같습니다). 지금은 제안대로 유효성을 검사하고 다른 다리를 건너면됩니다. 다시 한번 감사드립니다. – SBD