سؤال

أحتاج إلى إنشاء مكافئ برنامجي باستخدام لغة Delphi ... أو هل يمكن لشخص ما نشر رابط حول كيفية القيام بالقواعد في Peech التعرف باستخدام Delphi. أو أي أمثلة من قواعد XML التي لديها ما يعادل برمجي في دلفي. اسف للغتى الانجليزيه.

**Programmatic Equivalent ** 

المرجع: http://msdn.microsoft.com/en-us/library/MS723634(V=Vs.85).aspx

        SPSTATEHANDLE hsHelloWorld;
        hr = cpRecoGrammar->GetRule(L"HelloWorld", NULL,
                        SPRAF_TopLevel | SPRAF_Active, TRUE,
                        &hsHelloWorld);
        hr = cpRecoGrammar->AddWordTransition(hsHelloWorld, NULL,
                L"hello world", L" ",
                SPWT_LEXICAL, NULL, NULL);
        hr = cpRecoGrammar->AddWordTransition(hsHelloWorld, NULL,
                L"hiya|there", L"|",
                SPWT_LEXICAL, NULL, NULL);
        hr = cpRecoGrammar->Commit(NULL);

عينة (عينة) XML:

    <GRAMMAR>
        <!-- Create a simple "hello world" rule -->
        <RULE NAME="HelloWorld" TOPLEVEL="ACTIVE">
            <P>hello world</P>
        </RULE>
        <RULE NAME="HelloWorld_Disp" TOPLEVEL="ACTIVE">
            <P DISP="Hiya there!">hello world</P>
        </RULE>
        <RULE NAME="Question_Pron" TOPLEVEL="ACTIVE">
            <P DISP="I don't understand" PRON="eh">what</P>
        </RULE>
        <RULE NAME="NurseryRhyme" TOPLEVEL="ACTIVE">
            <P>hey</P>
            <P MIN="2" MAX="2">diddle</P>
        </RULE>
        <RULE NAME="UseWeights" TOPLEVEL="ACTIVE">
            <LIST>
                <P WEIGHT=".95">recognize speech</P>
                <P WEIGHT=".05">wreck a nice beach</P>
            </LIST>
        </RULE>
        <RULE NAME="UseProps" TOPLEVEL="ACTIVE">
            <P PROPNAME="NOVALUE">one</P>
            <P PROPNAME="NUMBER" VAL="2">two</P>
            <P PROPNAME="STRING" VALSTR="three">three</P>
        </RULE>
    </GRAMMAR>
هل كانت مفيدة؟

المحلول 2

الرجل الذي تمكنت أخيرًا من الحصول على الإجابة ....
قد يكون هذا مفيدًا للآخرين ... :)

هذا هو المكون الفعلي الذي أنشأته. فقط قم بتعديله لاحتياجاتك.

Function TSRRule.AddWord (Word : String; Value : string = ''; Separator : char = '|') : integer;
var
  OleValue : OleVariant;
begin
  result := 0;
  if Fwordlist.IndexOf(Word) = -1 then
     begin
       OleValue := Value;
       Fwordlist.Add(Word);
       FRule.InitialState.AddWordTransition(nil,  word, Separator, SPWT_LEXICAL, FRuleName+'_value',Fwordlist.Count, OleValue, 1.0);
       FWordCount := Fwordlist.Count;
       result := FWordCount;
     end;
end;

وظيفة الاتصال ...

FSpRunTimeGrammar := SpInProcRecoContext.CreateGrammar(2); // we assign  another grammr on index 2

   SrRule1 := TSRRule.Create(1,'Rule1',FSpRunTimeGrammar);
   with SrRule1 do
      begin
         AddWord('Maxtor');
         AddWord('Open NotePad','Notepad.exe');
         AddWord('Maxtor Dexter TrandPack','',' ');
         commit;
      end;
   SrRule2 := TSRRule.Create(2,'Rule2',FSpRunTimeGrammar);
   with SrRule1 do
      begin
         AddWord('the box');
         AddWord('WeLcOmE SaPi');
         AddWord('Halo World');
         commit;
      end;
   FSpRunTimeGrammar.CmdSetRuleState('Rule1',SGDSActive);
   FSpRunTimeGrammar.CmdSetRuleState('Rule2',SGDSActive);

يرجى ترك التعليق للتوضيحات .... حظا سعيدا!

نصائح أخرى

هناك غلاف مباشر لواجهة برمجة تطبيقات الكلام التي قام بها فريق Jedi ، يجب أن تكون قادرًا على العثور على الرمز من هنا http://www.delphi-jedi.org/apilibrary.html ومع ذلك ، فقد راجعت للتو ، ويبدو أن الرابط إلى ملف sapi.zip قد تم كسره ، وربما سيتم تشغيل بريد إلكتروني لفريق Jedi لك.

إذا حصلت على غلاف ، وبالنظر إلى أن هذا هو التفاف المباشر من واجهة برمجة التطبيقات ، فإن مستندات MDSN هي ما تريد ، فقط استبدال جملة Delphi لـ C ++ Syntax 99 ٪ سيكون مستقيمًا للأمام ، وهذا ليس ، فقط اسأل فقط السؤال المحدد هنا (أو على مجموعات أخبار Embarcadero)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top