string txt = "我是能源栏目分类,一会我会变成技术分类。怎么进去呢?"; string keys = "能源"; int tag = 0; string[] arrKey = keys.Split(','); foreach (string key in arrKey) { if (txt.IndexOf(key) >= 0) { tag = 35955; //符合keys1变量的关键词就进入栏目1 } else { tag = 0; //都无法匹配,返回默认栏目 } } Console.WriteLine(tag); Console.ReadKey();
上面代码只能根据关键词对应一个栏目,如果是有多个栏目就无法匹配了?各位攻城狮麻烦给看看,如果解决呢?非常感谢啊!
不明白你的意思,就算有多个关键字,你的tag在同一时间也只能有一个值。再描述一下你的需求吧
我这个代码只是参考。我的初步设想。如果你有好的方案。可以直接改掉我的代码。或者重写
@G善源: 不是说你的代码问题而是说你的需求。如果有多个关键词匹配。例如有"能源"和"技术",这个时候你要达到什么效果?同时打开能源和技术的页面?
@nicky0227: 是这样的。例如一篇文章我是根据文章的标题有某个关键词,我就把这篇文章自动放到对应的网站分类里面去。网站分类是ID的形式的。例如:一篇文章的标题中有【能源】这个关键词我就给他分到56524这个分类中,标题中含有【技术】这个关键词分到56845这个分类中,标题中含有【游戏】这个关键词分到8964这个分类中……,很多关键词对应网站的多个分类。就是这样!
@G善源: 假设你网站的分类ID是提前就设定好了的,那么你可以为每个分类声明一个容器。遍历每个标题,再遍历每个容器的关键字。一旦匹配就把当前文章的ID放入对应的容器。
@nicky0227: 朋友,你能看看我的代码,或者写一段我测试一下吗?我真写不出来了。不然不会来这里发帖了。希望附代码!
@G善源:
Dictionary<int,string> txtDict=new Dictionary<int,string>(); txtDict.Add(1,"我只是能源栏目分类。我的ID是1"); txtDict.Add(2,"我是能源栏目分类,我也是技术分类。我的ID是2"); txtDict.Add(3,"我只是技术分类。我的ID是3"); string keys = "能源,技术"; string[] keyArr = keys.Split(','); Dictionary<string,string> resultDict=new Dictionary<string,string>(); foreach(int id in txtDict.Keys) { foreach (string key in arrKey) { if (txtDict[id].IndexOf(key) >= 0) { if(resultDict.keys.contains(key)) { resultDict[key]+=","+id; } else { resultDict.Add(key,id.ToString); } } } }
代码都是手敲的,可能会有语法或拼写错误。遍历完后resultDict就是根据关键字分类存储的结果了
@nicky0227:
@nicky0227: 谢谢你的代码,不过我测试看不了效果。能有办法看到效果吗?我是控制台程序,返回栏目ID就正确了!
@G善源: 很简单的代码。。你调试看看呀。。栏目ID我里面没有涉及
@nicky0227: 我是新手。辛苦老师了。栏目ID你就随便设置一值就好。主要是能返回到屏幕显示出来!现在我运行直接出错啊。
@nicky0227: 你看我最上面的代码就是为了测试弄出来的效果。能做成那样最好。辛苦老师了啊!
Dictionary<int, string> txtDict = new Dictionary<int, string>(); txtDict.Add(1, "我只是能源栏目分类。我的ID是1"); txtDict.Add(2, "我是能源栏目分类,我也是技术分类。我的ID是2"); txtDict.Add(3, "我只是技术分类。我的ID是3"); string keys = "能源,技术"; string[] keyArr = keys.Split(','); Dictionary<string, string> resultDict = new Dictionary<string, string>(); foreach (int id in txtDict.Keys) { foreach (string key in keyArr) { if (txtDict[id].IndexOf(key) >= 0) { if (resultDict.Keys.Contains(key)) { resultDict[key] += "," + id; } else { resultDict.Add(key, id.ToString()); } } } } foreach (string txt in txtDict.Values) { Console.WriteLine(txt); } foreach (string key in resultDict.Keys) { Console.WriteLine(key + "栏目所对应的消息ID是:" + resultDict[key]); } Console.ReadLine(); }
@nicky0227: 现在代码也不是按关键词分类的啊。我看输出是3个栏目ID都输出了。string keys = "能源";假如这里是能源关键词,输入的话,应该是输入:我是能源栏目分类,我也是技术分类。我的ID是2,这句才对呢!
@G善源: 少年,多看看代码,读懂它。我只能帮到这里了。
@nicky0227: 老师可有qq,我加你。可能跟容易说明需求!
@nicky0227: 有点开始懂了!
@nicky0227: 老师,果然厉害。看明白了。!!!!!!!帅!!
@nicky0227: 老师,我完善了我的需求。在代码的基础上。你现在看看!
@nicky0227:
Dictionary<int, string> txtDict = new Dictionary<int, string>(); txtDict.Add(1, "能源类"); txtDict.Add(2, "技术类"); txtDict.Add(3, "投资类"); txtDict.Add(4, "游戏类"); txtDict.Add(5, "产业类"); txtDict.Add(6, "军事类"); txtDict.Add(7, "社会类"); txtDict.Add(8, "科技类"); txtDict.Add(9, "电影类"); string keys1 = "能源,风电,神华集团,煤炭,风力发电,页岩气"; string keys2 = "技术,创新,最新技术,研发,科研"; string keys3 = "投资,"; string keys4 = "游戏,olo,泡泡堂,魔兽世界,星际争霸,魔兽争霸,dota,DOTA"; string keys5 = "产业,项目报告,投资报告,产业研究,可行性研究,可研"; string keys6 = "军事,武力,普京,国防部"; string keys7 = "社会,郭美美,男子杀,杀死女友,外围女,卖淫,模特,女子"; string keys8 = "科技,苹果处理器,三星,微软,iPhone6s,手机,滴滴打车"; string keys9 = "电影,港囧,豆瓣,第三种爱情,逆转胜,魔镜,墓穴迷城,功夫,煎饼侠,十二公民,碟中谍5"; string[] keyArr = keys1.Split(','); Dictionary<string, string> resultDict = new Dictionary<string, string>(); foreach (int id in txtDict.Keys1) { foreach (string key in keyArr) { if (txtDict[id].IndexOf(key) >= 0) { if (resultDict.Keys1.Contains(key)) { resultDict[key] += "," + id; } else { resultDict.Add(key, id.ToString()); } } } } foreach (string key in resultDict.Keys1) { Console.WriteLine(resultDict[key]); } Console.ReadLine(); }
@nicky0227: 应该说,我回显只会回显一个分类的ID,而不是所有分类的ID的。
@nicky0227: 回显那个分类的ID,取决于当前这条新闻的中所包含的关键词。当然有个前提是,关键词不会重复,就是1分类有的关键词不会在2分类也有。是唯一性的。所以返回来无论怎样都应该是一个栏目ID的!