在 if 语句中预测进入的句子? C#
predicting a incoming sentence in a if statement? c#
我的问题是我试图预测这个字符串 "what is the weather like in" 之后字典中的一个键。所以你可能已经知道那句话之后的 this 是什么了。我正在制作一个带有语音识别功能的天气应用程序。我需要 "what is the weather like in" 是静态的,在那句话之后,一座城市就来了。例如 "what is the weather like in gothenburg"。在我的字典里哥德堡是公认的城市。
我试过
static Dictionary<string, int> cityList = new Dictionary<string, int>();
if (e.PartialResult.ToString() == string.Format("what is the weather like in {0}", cityList.ContainsKey(e.PartialResult.ToString().Trim("what is the weather like in ".ToArray()))))
{
string city = e.PartialResult.ToString();
city = city.Trim("what is the weather like in ".ToArray());
int cityId = cityList[city]; //here is just city the recognized "city" from the voice recognition
}
但是那没有用,例如当我说 "what is the weather like in gothenburg" 时 if 语句不正确。 if 语句末尾的 triming 只是为了让 "said" 城市独立。如果我不想 trim,那将是 "what is the weather like in city" 而不仅仅是 "city"。
这是我尝试"what is the weather like in south park"时得到的认可。 "south park" 在我的字典中,所以我不知道为什么 if 语句中的代码在被识别时不是 运行。我觉得对吗?
基本上 if 语句应该能够预测多个城市。 "what is the weather like in gothenburg","what is the weather like in denmark"。你的名字,我对被识别的城市所做的是,我 trim 沿着整个字符串,这样城市就是独立的。我在字典中通过字符串搜索 int 值。这样我就可以将该 ID 发送到天气 api 服务器,并仅针对已识别的城市返回正确的响应
我正在使用 bing 语音 api 如果这对解决此问题有任何影响。
这是我在评论中谈论的内容的更易读的示例。
- 我们可以做的是首先检查用户是否输入了
.StartsWith
天气查询字符串(以下面的 case-insensitive 方式)。
- 如果这是真的,那么我们可以通过在用户输入上调用
.Substring()
并传入天气查询的长度来获取字符串的城市部分。这将 return 字符串的其余部分。
- 最后我们可以将它传递给
.TryGetValue
method on the cityList
dictionary, which will search the keys for that string and, if found, set the out
parameter 到字典中与该城市关联的 cityId
值。
另请注意,我们应该使用 case-insensitive 比较器来初始化我们的字典,以确保我们不会因为一些大写而遗漏一个键。
例如:
static Dictionary<string, int> cityList =
new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
static void SomeMethod(SomeType e)
{
var weatherQuery = "what is the weather like in";
int cityId;
string userInput = e.PartialResult.ToString().Trim();
if (userInput.StartsWith(weatherQuery, StringComparison.OrdinalIgnoreCase) &&
cityList.TryGetValue(userInput.Substring(weatherQuery.Length).Trim(), out cityId))
{
// We have a weather query and have located the cityId
CallSomeWeatherAPI(cityId);
}
}
我的问题是我试图预测这个字符串 "what is the weather like in" 之后字典中的一个键。所以你可能已经知道那句话之后的 this 是什么了。我正在制作一个带有语音识别功能的天气应用程序。我需要 "what is the weather like in" 是静态的,在那句话之后,一座城市就来了。例如 "what is the weather like in gothenburg"。在我的字典里哥德堡是公认的城市。
我试过
static Dictionary<string, int> cityList = new Dictionary<string, int>();
if (e.PartialResult.ToString() == string.Format("what is the weather like in {0}", cityList.ContainsKey(e.PartialResult.ToString().Trim("what is the weather like in ".ToArray()))))
{
string city = e.PartialResult.ToString();
city = city.Trim("what is the weather like in ".ToArray());
int cityId = cityList[city]; //here is just city the recognized "city" from the voice recognition
}
但是那没有用,例如当我说 "what is the weather like in gothenburg" 时 if 语句不正确。 if 语句末尾的 triming 只是为了让 "said" 城市独立。如果我不想 trim,那将是 "what is the weather like in city" 而不仅仅是 "city"。
这是我尝试"what is the weather like in south park"时得到的认可。 "south park" 在我的字典中,所以我不知道为什么 if 语句中的代码在被识别时不是 运行。我觉得对吗?
基本上 if 语句应该能够预测多个城市。 "what is the weather like in gothenburg","what is the weather like in denmark"。你的名字,我对被识别的城市所做的是,我 trim 沿着整个字符串,这样城市就是独立的。我在字典中通过字符串搜索 int 值。这样我就可以将该 ID 发送到天气 api 服务器,并仅针对已识别的城市返回正确的响应
我正在使用 bing 语音 api 如果这对解决此问题有任何影响。
这是我在评论中谈论的内容的更易读的示例。
- 我们可以做的是首先检查用户是否输入了
.StartsWith
天气查询字符串(以下面的 case-insensitive 方式)。 - 如果这是真的,那么我们可以通过在用户输入上调用
.Substring()
并传入天气查询的长度来获取字符串的城市部分。这将 return 字符串的其余部分。 - 最后我们可以将它传递给
.TryGetValue
method on thecityList
dictionary, which will search the keys for that string and, if found, set theout
parameter 到字典中与该城市关联的cityId
值。
另请注意,我们应该使用 case-insensitive 比较器来初始化我们的字典,以确保我们不会因为一些大写而遗漏一个键。
例如:
static Dictionary<string, int> cityList =
new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
static void SomeMethod(SomeType e)
{
var weatherQuery = "what is the weather like in";
int cityId;
string userInput = e.PartialResult.ToString().Trim();
if (userInput.StartsWith(weatherQuery, StringComparison.OrdinalIgnoreCase) &&
cityList.TryGetValue(userInput.Substring(weatherQuery.Length).Trim(), out cityId))
{
// We have a weather query and have located the cityId
CallSomeWeatherAPI(cityId);
}
}