做毕设(十三)——改首页,设置类型

本文介绍了一个新闻网站从初期设计到优化的过程,重点讨论了如何通过正则表达式提取新闻图片和简介以增强用户体验,同时利用HanLP工具包进行关键词提取,以实现更精准的内容推荐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始版面是照着优快云极客头条做的,后来发现是做娱乐新闻网站,明显不适合了,就改一下。
效果图
这里写图片描述
在新闻实体类中加入img(预览图),preview(简介)
写个工具类

/**
 * 预览图文工具
 */
public class PreviewDeal {

    public List<News> Deal(List<News> newsList){
        for(int i=0;i<newsList.size();i++){
            Pattern imgPattern = Pattern.compile("(<img.*?\"(>| />))");
            Matcher imgMatcher = imgPattern.matcher(newsList.get(i).getContext());
            if(imgMatcher.find()){
                newsList.get(i).setImg(imgMatcher.group(1));
            }else {
                newsList.get(i).setImg("<img src=\"/image/logo.png\"/>");
            }
            Pattern prePattern = Pattern.compile("(?<=<p>)(.*?)(?=</p>)");
            Matcher preMatcher = prePattern.matcher(newsList.get(i).getContext());
            if(preMatcher.find()){
                newsList.get(i).setPreview(preMatcher.group());
            }else {
                newsList.get(i).setPreview("点击查看详情。");
            }
        }
        return newsList;
    }
}
/**
     * 初始获取20条新闻
     * @param
     * @return
     */
    @RequestMapping(value = "",method = RequestMethod.GET)
    public String showNews(ModelMap map) {
        Page<News> newsPage = newsService.getAllNewsTypeIsNotNull(0,20);
//        List<News> newsList = newsPage.getContent();
        PreviewDeal previewDeal = new PreviewDeal();//预览图文工具
        List<News> newsList = previewDeal.Deal(newsPage.getContent());//设置预览图文
        map.addAttribute("News",newsList);
        int totalPages = newsPage.getTotalPages()-1;
        map.addAttribute("totalPages",totalPages);
        return "index";
    }

这里要提一下,我抓的网站是花边新闻,他的新闻内容是这样的

<p ><img src="//p0.ifengimg.com/a/2017_39/c2065a8ffc2705a_size80_w565_h531.jpg"   alt="" /></p>
<p ><span>刘涛与老公王珂</span></p>
<p>凤凰网娱乐讯 近日,刘涛与老公王珂在云南丽江参加综艺节目录制,刘涛多次被拍到素颜逛街、前往菜市场买菜,十分随性。</p>
<p ><img src="//p2.ifengimg.com/a/2017_39/c6adead6cc63488_size71_w569_h555.jpg"   alt="" /></p>
<p ><span>刘涛与老公王珂</span></p>
<p>9月25日,又有网友在云南丽江泸沽湖景区偶遇刘涛和王珂,并拍照记录下偶遇瞬间。照片中,刘涛头戴黑色帽子,上身穿牛仔外套,下身穿条纹裙子;刘涛老公王珂则头戴灰色鸭舌帽,上身穿灰色T恤,下身穿黑色休闲裤。两人穿着随性走在大街上,走路动作神同步,十分默契。夫妻二人同框很是低调,也很悠闲甜蜜。</p>

注意到正文的段落标签是<p>的,而其他的是<p > 的,多了个空格,所以(?<=<p>)(.*?)(?=</p>) 可以直接抓到正文而不会抓到图片,学到了一招。


我的新闻推荐是根据关键字来的,所以要先提取新闻的关键字。找个工具包。
HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理 在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时 新、可自定义的特点。
https://github.com/hankcs/HanLP

newsPage = newsService.getAllNewsTypeIsNull(pageNum,10);
editNews = newsPage.getContent();
//抓关键字
for(int i=0;i<editNews.size();i++){
    String content = "";//储存标题和无图正文
    Pattern txtPattern = Pattern.compile("[\\u4e00-\\u9fa5]");//中文字符
    Matcher txtMatcher = txtPattern.matcher(editNews.get(i).getContext());
    content += editNews.get(i).getTitle();
    while(txtMatcher.find()){
        content += txtMatcher.group(0);
    }
    //System.out.println(content);
    List<String> keywordList = HanLP.extractKeyword(content,5);//HandLP工具包,找关键词
    String keyword = StringUtils.collectionToDelimitedString(keywordList,",");//List转化为以逗号分隔的字符串
    editNews.get(i).setType(keyword);
}

    <script type="text/javascript">
        /*<![CDATA[*/
        $(document).ready(function(){
            $(".tag").bind("input propertychange","textarea",function(){
                var tag = $(this).val();
                var alist = $(this).parent().next().children();
                $.each(alist,function () {
                    $(this).attr("href",$(this).next().val() +tag);
                })
            });
        });
        /*]]>*/
    </script>

    <table style="table-layout:fixed" class="table table-condensed table-bordered table-hover table-striped">
        <tr>
            <th width="20%">标题</th>
            <th width="6%">作者</th>
            <th>内容</th>
            <th width="20%">TAG(用英文“,”间隔多类型)</th>
            <th width="14%">操作</th>
        </tr>
        <tr th:each="news:${editNews}">
            <td th:text="${news.title}"></td>
            <td th:text="${news.author}"></td>
            <td style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" th:text="${news.context}"></td>
            <td><textarea class="tag" style="resize: none;width:100%;" th:text="${news.type}"></textarea></td>
            <td th:if="${session.switch==null}" valign="top">
                <a th:href="@{'/edit/'+${news.id}+'?type=明星,'+${news.type}}">明星</a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type=明星,'">
                <a th:href="@{'/edit/'+${news.id}+'?type=时尚,'+${news.type}}">时尚</a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type=时尚,'">
                <a th:href="@{'/edit/'+${news.id}+'?type=影视,'+${news.type}}">影视</a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type=影视,'">
                <a th:href="@{'/edit/'+${news.id}+'?type=宠物,'+${news.type}}">宠物</a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type=宠物,'">
                <a th:href="@{'/edit/'+${news.id}+'?type=生活,'+${news.type}}">生活</a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type=生活,'">
                <a th:href="@{'/edit/'+${news.id}+'?type=删除'}"><p class="text-danger">删除</p></a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type=删除,'">
            </td>
            <td th:if="${session.switch!=null}" valign="top">
                <a th:href="@{'/edit/'+${news.id}+'?type='+${news.type}}">更改</a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type='">
                <a th:href="@{'/edit/'+${news.id}+'?type=删除'}"><p class="text-danger">删除</p></a>
                <input type="hidden" th:attr="value='/edit/'+${news.id}+'?type=删除,'">
            </td>
        </tr>
    </table>

这里是修改文本域中的值,会直接影响超链接的传参。input用来放id和基本类型,不然a一改就变了,input可以保持前面不变只改后面加的类型。如果用点击是在获取文本域中的值组合超链接可能不会这么麻烦,不过写都写了。
之后做完推荐就完成了,大概。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值