Как реализовать кросс-платформенную грамматику SRG из .NET в UWP - PullRequest
0 голосов
/ 18 января 2019

У меня есть два приложения, которые общаются друг с другом удаленно. Одно приложение (назовите его «A») должно определить некоторую пользовательскую грамматику для механизма распознавания речи, работающего в удаленном приложении UWP (назовите это одно приложение «B»). Я хотел бы использовать пользовательский класс, который инкапсулирует правила грамматики, а также некоторые другие вспомогательные данные, и, поскольку этот класс должен пересекаться между полной платформой .NET (4.7) и платформой UWP, я собираюсь реализовать ее в .NET Стандартная библиотека классов 2.0, на которую ссылаются оба приложения. Что касается грамматики, то наилучшим способом, по-видимому, являются ограничения SRGS, заданные как XML (https://docs.microsoft.com/en-us/windows/uwp/design/input/define-custom-recognition-constraints), поскольку и приложение A, и B смогут создавать Xml. Я предполагаю, что Xml будет создаваться программно или загружаться из файла Инкапсулированные объекты пользовательской грамматики будут созданы в приложении A, а затем переданы в приложение B и, как правило, будут выглядеть примерно так:

public class MyCustomGrammarStuff()
{
    public Int32 Data1 { get; set; }
    public Int32 Data2 { get; set; }
    public String Stuff { get; set; }
    public XmlDocument GrammarRules {get; set; } // Loaded from file or created in code.
}

Когда приложение A получает этот объект, оно должно затем создать экземпляр объекта «SpeechRecognitionGrammarFileConstraint», используя «GrammarRules» в объекте «MyCustomGrammarStuff». Согласно документации для этого класса (https://docs.microsoft.com/en-us/uwp/api/Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint) конструктор принимает аргумент типа "Windows.Storage.StorageFile".

У меня вопрос, как мне взять объект XmlDocument и использовать его для программной реализации объекта StorageFile? Я бы предпочел не начинать делать такие вещи, как запись / загрузка из временных файлов.

1 Ответ

0 голосов
/ 18 января 2019

Если вы хотите StorageFile, вы можете создать его в какой-то папке и затем записать в него все данные XML следующим образом:

XmlDocument xmlDocument = ...;
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("filename.xml");
await FileIO.WriteTextAsync(file, xmlDocument.ToString());
...