我们今天在课堂上设置了一个算法问题,作为"如果你找到一个你不必做这个主题的解决方案".当然,我们都认为我们会试一试.
基本上,我们提供了100个单词和10个类别的DB.单词或类别之间不匹配.所以它基本上是100个单词和10个类别的列表.
我们必须将单词"放置"到正确的类别中 - 也就是说,我们必须"弄清楚"如何将单词放入正确的类别中.因此,我们必须"理解"这个词,然后将其置于最合适的类别中.
即其中一个词是"钓鱼"类别"运动" - >所以这将属于这一类.单词和类别之间存在一些重叠,因此某些单词可能会进入多个类别.
如果我们弄明白,我们必须增加样本大小,并且匹配率"最佳"的人获胜.
有没有人知道如何开始这样的事情?还是任何资源?最好是在C#中?
即使是关键字DB或其他东西可能会有所帮助?有人知道任何免费的吗?
seb*_*seb 17
首先,您需要分析样本文本,以获得单词的关系.以A分类潜在语义分析 中描述潜在语义分析接近分类.
一种不同的方法是天真的贝叶斯文本分类.需要具有指定类别的示例文本.在学习步骤中,程序会学习不同的类别以及在分配给类别的文本中出现单词的可能性,请参阅bayes垃圾邮件过滤.我不知道单词的效果如何.
Mar*_*ell 11
真的很差的答案(没有表现出"理解") - 但作为一个疯狂的刺,你可以点击谷歌(通过代码)(例如)"+钓鱼+运动","+钓鱼+烹饪"等(即交叉加入每个单词和类别) - 让谷歌战斗赢!即选择最多"命中"的组合......
例如(结果第一):
weather: fish
sport: ball
weather: hat
fashion: trousers
weather: snowball
weather: tornado
Run Code Online (Sandbox Code Playgroud)
使用代码(TODO:添加线程;-p):
static void Main() {
string[] words = { "fish", "ball", "hat", "trousers", "snowball","tornado" };
string[] categories = { "sport", "fashion", "weather" };
using(WebClient client = new WebClient()){
foreach(string word in words) {
var bestCategory = categories.OrderByDescending(
cat => Rank(client, word, cat)).First();
Console.WriteLine("{0}: {1}", bestCategory, word);
}
}
}
static int Rank(WebClient client, string word, string category) {
string s = client.DownloadString("http://www.google.com/search?q=%2B" +
Uri.EscapeDataString(word) + "+%2B" +
Uri.EscapeDataString(category));
var match = Regex.Match(s, @"of about \<b\>([0-9,]+)\</b\>");
int rank = match.Success ? int.Parse(match.Groups[1].Value, NumberStyles.Any) : 0;
Debug.WriteLine(string.Format("\t{0} / {1} : {2}", word, category, rank));
return rank;
}
Run Code Online (Sandbox Code Playgroud)
也许你们都在努力做到这一点.
显然,你需要某种外部参考来排列X在Y类中的概率.他是否有可能测试你的"开箱即用"思维并且你可能是外部参考?也就是说,该算法是通过每个类别和每个字运行,问你一个简单的事情(或谁坐在终端)字X是否是在显示的类别Y.有关于这一主题的一些简单的改变,但是他们都涉及通过简单地切割它来吹过过去的结.
或者不......取决于老师.