Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.84.18.52] |
|
Сообщ.
#1
,
|
|
|
Добрый день!
Я пытаюсь составить грамматику вида : <тип объекта> <уровень> <имя объекта> , но никак не могу понять как)) Грамматику <тип объекта> <уровень> я сделал: <?xml version="1.0" encoding="utf-8" ?> <grammar version="1.0" xml:lang="ru-RU" mode="voice" root="objects" xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0"> <rule id="objects"> <one-of> <item>тип1</item> <item>тип2</item> </one-of> <ruleref uri="Levels.grxml"/> <item repeat="0-1"> баллов </item> </rule> </grammar> <?xml version="1.0" encoding="utf-8" ?> <grammar version="1.0" xml:lang="ru-RU" mode="voice" root="levels" xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0"> <rule id="levels" scope="public"> <one-of> <item>5</item> <item>10</item> <item>150</item> <item>20</item> </one-of> </rule> </grammar> Далее, я могу составить список "имен объектов", которые удовлетворяют условиям фильтра : тип1 5, тип1 10, тип2 15 и тд. Но как мне эти отфильтрованные грамматики вставить? То есть мне нужна проверка- if(тип1 и 10)-то ruleref grType1_10 и тд. Как ее сделать? Спасибо. |
Сообщ.
#2
,
|
|
|
В грамматиках one-of это и есть if.
<rule id="objects"> <one-of> <rule> <item>тип1</item> <one-of> <item> объект1 </item> <item> объект2 </item> <item> объект3 </item> </one-of> </rule> <rule> <item>тип2</item> <one-of> <item> объект4 </item> <item> объект5 </item> <item> объект6 </item> </one-of> </rule> </one-of> <rule id="levels"> ... </rule> <item repeat="0-1"> баллов </item> </rule> В чём проблема-то? |
Сообщ.
#3
,
|
|
|
Цитата nsh @ В грамматиках one-of это и есть if. Тут фишка в том, что мне нужно как-то отфильтровать по уровню. У меня получился только такой вариант: составить список отфильтрованных по правилу слов (тип и уровень 10 , тип1 и уровень 20 и тд)- и запихнуть в грамматику. <rule id="objects"> <one-of> <item>тип1 </item> <item>тип2</item> </one-of> <ruleref uri="Levels.grxml"/> <item repeat="0-1">баллов</item> <one-of> <item> <ruleref uri="тип1_уровень_10.grxml"/> </item> <item> <ruleref uri="тип1_уровень_20.grxml"/> </item> <item> <ruleref uri="тип2_уровень_10.grxml"/> </item> </one-of> </rule> Вопрос такой- как движок будет переходить по таким правилам? Например: распознал слово "тип1"- затем "уровень 10" ,затем "слово,которое находится в грамматике тип1_уровень_10" ,а затем он последовательно проходит по грамматикам "тип1_уровень_10", "тип1_уровень_20" и ищет совпадени?Так? Я к тому,можно ли сделать так, что при распознавании первых фраз -"тип1 уровень 10"- движок бы заходил сразу в грамматику "тип1_уровень_10"? П.С. пользуюсь Microsoft Speech Platform 11. Спасибо. |
Сообщ.
#4
,
|
|
|
Цитата Я к тому,можно ли сделать так, что при распознавании первых фраз -"тип1 уровень 10"- движок бы заходил сразу в грамматику "тип1_уровень_10"? Можно, но для этого сложное правило где сначала идёт "уровень 10" потом "тип1 уровень 10" нужно поместить внутрь one-of, а не после него. one-of можно вложенные делать, как я написал в примере выше. |
Сообщ.
#5
,
|
|
|
Цитата nsh @ Можно, но для этого сложное правило где сначала идёт "уровень 10" потом "тип1 уровень 10" нужно поместить внутрь one-of, а не после него. one-of можно вложенные делать, как я написал в примере выше. Хи.Я тут немного доработал вашу грамматику и у меня такое получилось: <?xml version="1.0" encoding="utf-8" ?> <rule id="objects"> <one-of> <rule> <item>тип1></item> <one-of> <rule> <item>уровень_10</item> <one-of> объект1_который_входит_в_тип1_уровень10</one-of> //или ruleref на нужную грамматику со списком подготовленных слов? </rule> <rule> <item>уровень_20</item> <one-of>объект1_который_входит_в_тип1_уровень_20</one-of> </rule> </one-of> </rule> <rule> <item>тип2</item> <one-of> <rule> <item>уровень10</item> <one-of>объект1_который_входит_в_тип2_уровень10</one-of>//или ruleref? </rule> <rule> <item>уровень_20</item> <one-of>объект1_который_входит_в_тип2_уровень20</one-of> </rule> </one-of> </rule> </one-of> </rule> Такую грамматику Вы имели ввиду? П.С. - добавил конструкцию one-of в самом начале грамматики. То есть мы выбираем один из типов (тип1,тип2). Затем когда пользователь сказал тип-мы выбираем из правил тип_уровень_10,тип_уровень_20. И уже если пользователь сказал фразу: тип1 уровень 10 - то идем в соответствующий список слов и пытаемся распознать там. |
Сообщ.
#6
,
|
|
|
П.С. запустил такую грамматику- микрософтовский движок не принял ее.
В состав тулов входит GrammarValidator.exe - он мне пишет,что "под элементов one-of не может быть элемента rule@". |
Сообщ.
#7
,
|
|
|
Цитата Simplevolk @ В состав тулов входит GrammarValidator.exe - он мне пишет,что "под элементов one-of не может быть элемента rule@". Поместите item внутри one-of, а внутри item уже сложное правило. <?xml version="1.0" encoding="utf-8" ?> <rule id="objects"> <one-of> <item> <rule> <item>тип1></item> <one-of> <item> <rule> <item>уровень_10</item> <one-of> объект1_который_входит_в_тип1_уровень10</one-of> </rule> </item> </one-of> </rule> </item> </one-of> </rule> |
Сообщ.
#8
,
|
|
|
Уф... Пришлось допилить эту грамматику так,чтобы валидатор пропускал ее.
У меня получилась такая штука: <?xml version="1.0" encoding="utf-8" ?> <grammar version="1.0" xml:lang="ru-RU" mode="voice" root="objects" xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0"> <rule id="objects"> <one-of> <item> <ruleref uri="#Type1"/> </item> <item> <ruleref uri="#Type2"/> </item> </one-of> </rule> <rule id="Type1"> <item>Тип1</item> <one-of> <item> <ruleref uri="#Type1_Level10"/> </item> <item> <ruleref uri="#Type1_Level20"/> </item> </one-of> </rule> <rule id="Type2"> <item>тип2</item> <one-of> <item> <ruleref uri="#Type2_Level10"/> </item> </one-of> </rule> <rule id="Type1_Level10"> <item>10 уровень</item> <one-of> <item>объект 10-го уровня(и это не ММОРПГ!)</item> </one-of> </rule> <rule id="Type1_Level20"> <item>20-й уровень</item> <one-of> <item>объект 20-го уровня</item> </one-of> </rule> <rule id="Type2_Level10"> <item>10 уровень</item> <one-of> <item>объект 10-го уровня</item> </one-of> </rule> </grammar> Вопрос- получается, когда пользователь скажет фразу - тип1 уровень10 объект_10го_уровня - то движок зайдет в правило Type1,затем в Type1_Level10 и уже там он пойдет по вариантам? Это мне нужно для того, чтобы в каждой грамматике нижнего уровня - Type1_Level10 - количество элементов было максимальным для данного движка (1500-2000 слов). Соответственно, на каждую грамматику по 2к слов- а нижних грамматик у меня будет достаточное количество. И общая мощность будет вычисляться как 2000слов*N? Такой финт пройдет? П.С. просто надо распознать достаточно большое количество наименований из БД. Спасибо. |
Сообщ.
#9
,
|
|
|
Цитата Такой финт пройдет? Чего стесняться-то? Попробуйте и узнаем. |
Сообщ.
#10
,
|
|
|
nsh попробовал. Грамматика работает.
|