这是我在StackOverflow上的第一篇帖子,如果信息不够完整,请见谅。
场景描述。
我正在从Google天气API转向使用澳大利亚气象局(BOM)的天气服务。我已经成功地通过流读取器等方式从BOM获取了天气数据,但现在卡在了与每日预报匹配的图像图标上。
我之前使用Google天气API的方法非常粗暴但有效。Google天气API只提供了几种不同的预报类型,我可以将它们拼接成一个字符串,然后用作图像URL。
以下是我之前对Google天气API的处理示例…
imageDay1.ImageUrl = “images/weather/” + lbWeatherDay1Cond.Text.Replace(” “, string.Empty) + “.png”;
“大多晴天” = mostlysunny.png
“晴天” = sunny.png
“可能有雨” = chanceofrain.png
“阵雨” = showers.png
“部分多云” = partlycloudy.png
每日预报大约有15种不同的可能选项。
现在我在使用BOM(澳大利亚气象局)时遇到的新问题是…
早上有阵雨的可能
有一两场阵雨,之后转晴
还有成千上万种其他情况…没有标准可循。
我希望这里的聪明人能帮助我从这些字符串中提取关键词来生成新的字符串?比如从”Showers”生成”Showers.png”,或者更复杂一些,识别”Chance of Showers”为”Chanceshowers.jpg”,而将”Shower or two”保持为”Showers.png”。
我对任何想法或解决方案都持开放态度(希望是C#语言)。只要它非常轻量级(因为这个过程需要为五天的预报重复进行)并且能够捕捉到几乎任何情况…
目前,我还在使用String.Replace方法,一次又一次地替换…这暂时可以用,但不能这样投入生产环境。
谢谢大家!
@[隐藏人名]
回答:
我在评论中注意到你正在尝试使用正则表达式查找表,这可能足以解决问题。然而,我将进一步扩展Adriano提到的关于更健壮的贝叶斯解决方案的讨论。
这是一个与机器学习和人工智能相关的问题。它涉及一些自然语言处理,就像Google试图理解用户的提问,或者邮件垃圾邮件过滤器的工作原理一样。
Sebastian Thrun在以下视频中描述了一个简单而有趣的系统,这些视频是他在线课程的一部分。它开始描述了一个基本方法,通过该方法,算法可以学习将一组词(如来自电子邮件的词)分类为“垃圾邮件”或“非垃圾邮件”。
(大多数视频都很短。)
- 垃圾邮件检测 – 测验答案
- 垃圾邮件概率 – 测验答案
- 最大似然 – 测验答案
- 与贝叶斯网络的关系 – 测验答案
- 分类测验 – 测验答案
- 分类2测验 – 测验答案
- 分类3测验,一个人为的例子
- 测验答案与拉普拉斯平滑 – 测验答案
- 平滑分类测验 – 测验答案
- 最终测验 – 测验答案
这种贝叶斯方法对动态输入具有强大的适应性,并且学习速度相当快。然后,在消耗了足够的训练数据后,你只需要保存一个概率查找表,并在运行时进行一系列的算术计算。
有了这个基础,你可以将相同的方法应用于多个分类,例如为每种天气图像进行分类。