做毕设(十五)——新闻推荐
来源:互联网 发布:原生js手风琴效果原理 编辑:程序博客网 时间:2024/06/11 17:34
<script type="text/javascript" th:inline="javascript"> /*<![CDATA[*/ $(document).ready(function() { var xmlhttp; xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { var txt = ""; var newsList = JSON.parse(xmlhttp.responseText); for(var i=0;i<newsList.length;i++){ txt += "<div>" + "<div class=\"Fimg\">" + newsList[i].img + "</div>"; txt += "<div class=\"Ftitle\"><a href=\"/" + newsList[i].id + "\">" + newsList[i].title + "</a></div>"; txt += "</div>"; } $("#newsforyou").html(txt); } } xmlhttp.open("GET","/foryou",true); xmlhttp.send(); }); /*]]>*/</script><body><div class="foryou" th:fragment="foryou"> <p class="wnqj">为你推荐</p> <div id="newsforyou"></div></div></body>
推荐页面,在网页载入的时候去调方法,载入数据。
public class StringTool { /** * 特定形式的字符串转化为Map * @param s "label=value,label=value,label=value,···"形式的字符串 * @return */ public Map<String,Integer> StringToMap(String s){ List<Map<String,Integer>> resultlist = new ArrayList<Map<String,Integer>>(); List<String> stringList = Arrays.asList(s.split(",")); Map<String,Integer> map = new HashMap<>(); for(int i=0;i<stringList.size();i++){ List<String> list = Arrays.asList(stringList.get(i).split("=")); map.put(list.get(0),Integer.parseInt(list.get(1))); resultlist.add(map); } return map; } /** * Map加List * @param map {"AAA":1,"BBB":2,"CCC":3} * @param list {BBB,DDD} * @param value 同一个Key加多少 * @return {"AAA":1,"CCC":3,"BBB":3,"DDD":1} */ public Map<String,Integer> MapAddList(Map<String,Integer> map,List<String> list,Integer value){ for(int i = 0;i<list.size();i++){ String label = list.get(i).toString(); if(map.get(label)!=null){ map.put(label,map.get(label)+value); }else{ map.put(label,value); } } return map; } /** * * @param s1 用户喜好字段 * @param s2 新闻类型字段 * @param value 加分 * @return 同类型加分,没有的类型增加。 */ public String typeAdd(String s1,String s2,Integer value){ String s; Map<String,Integer> map = StringToMap(s1); List<String> list = Arrays.asList(s2.split(",")); Map<String,Integer> resultmap = MapAddList(map,list,value); s = resultmap.toString(); //去掉头尾{}和所有空格 s = s.substring(1,s.length()); s = s.substring(0,s.length()-1); s = s.replaceAll(" ",""); return s; }}
写个工具类,处理喜好字符串,以便操作。
在用户点击新闻和评论的方法里加上以下代码
//用户喜好加分if(httpSession.getAttribute("user")!=null){ User user = (User) httpSession.getAttribute("user"); StringTool stringTool = new StringTool(); user.setPreference(stringTool.typeAdd(user.getPreference(),news.getType(),1)); userService.saveUser(user); }
记得在用户注册时给予默认喜好u.setPreference("明星=1,时尚=1,影视=1,宠物=1,生活=1");
@RequestMapping(value = "/foryou")@ResponseBodypublic Object foryou(HttpSession httpSession){ User user = (User)httpSession.getAttribute("user"); StringTool stringTool = new StringTool(); Map<String,Integer> map = stringTool.StringToMap(user.getPreference()); if(map.size()<10) { return "现在还不知道你的喜好,再多看看新闻吧。"; } map.remove("明星"); map.remove("时尚"); map.remove("影视"); map.remove("宠物"); map.remove("生活"); //将Map转化为List集合,List采用ArrayList List<Map.Entry<String, Integer>> list_Data = new ArrayList<Map.Entry<String,Integer>>(map.entrySet()); //通过Collections.sort(List I,Comparator c)方法进行排序 Collections.sort(list_Data,new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return (o2.getValue().compareTo(o1.getValue())); } }); List<News> newsList = new ArrayList<>(); for(int c=0;c<list_Data.size();c++){ newsList.addAll(newsService.getAllNewsHaveLabel(0, 5, list_Data.get(c).getKey()).getContent()); for (int i = 0; i < newsList.size() - 1; i++) { for (int j = newsList.size() - 1; j > i; j--) { if (newsList.get(j).equals(newsList.get(i))) { newsList.remove(j); } } } if(newsList.size()>5){ break; } } PreviewDeal previewDeal = new PreviewDeal(); newsList = previewDeal.Deal(newsList); return newsList;}
至此,网站大致就写完了,等中期检查看看老师有什么问题吧,有改动再更新。
阅读全文
0 0
- 做毕设(十五)——新闻推荐
- 菜鸟好文推荐(十五)——9个基于Java的搜索引擎框架
- 资讯类新闻客户端—数据推荐算法概论
- 做毕设(九)——爬新闻
- 做毕设(十四)——新闻标签
- 菜鸟好文推荐(二十五)——如何编写更棒的代码:11个核心要点
- 新闻,商品推荐
- LDA新闻推荐
- Google新闻推荐系统
- LDA新闻推荐
- Spring核心技术(十五)——BeanFactory
- scala学习(十五)——trait
- angular学习(十五)——Provider
- Q&A——资源管理(十五)
- ConfigReader(十五)—— ReadGuideKillHeroTaskConfig
- ConfigReader(二十五)—— ReadGuideTipTaskConfig
- Effect(十五)—— EffectScript
- (十五)高级排序—划分算法
- Solr学习总结Solr查询参数
- 51nod 1489 蜥蜴和地下室
- WEB安全
- Qt 实现简易的学生信息管理文档
- 一个芯片低能耗的疑问
- 做毕设(十五)——新闻推荐
- 【剑指Offer】二维数组中的查找$2.3.1
- 学以致用——英文姓名高词频分析-使用Excel制作高频词标签云(VBA)
- Spring JDBC-NamedParameterJdbcTemplate模板类
- C语言中插入汇编nop指令
- java中如何将String类型的日期格式为yyyyMMdd转化为date类型的yyyy-MM-dd格式
- [linux] 自动ssh登录
- 2 大数据实战系列-spark shell wordcount
- PAT 甲级 1051. Pop Sequence (25)