Nutch1.2标题关键字高亮的正确方法

从仿真到实物:STM32生成SPWM波驱动单相逆变器的实战避坑指南 本文详细介绍了使用STM32G4系列微控制器生成SPWM波驱动单相逆变器的实战经验,涵盖硬件设计、软件实现和调试技巧。重点解析了定时器配置、栅极驱动电路设计、正弦表生成优化等关键环节,帮助工程师避免常见问题,提升系统效率和可靠性。特别针对SPWM波生成中的精度陷阱和死区时间调整提供了实用解决方案。 阅读详情
最近在弄Nutch1.2,实现关键字高亮,却发现标题关键字高亮的方法,国内网站上的都是错的,最终在nutch.apache.org网站找到了相近的代码,进行修改,终于成功完成
关键字的高亮需要自己再创建一个分词器,关键的类是TokenStream,lucene3.0以上需要用到TermAttribute。

一、内容关键字高亮很简单,修改include/style.html即可:

   .highlight {
          color:#FF0000;
   }

二、标题关键字高亮的方法:

     我们从内容关键字高亮的方法可以得到启发:

     首先来看这一句:

     String summary = summaries[i].toHtml(true);

     这个是调用了org.apache.nutch.searcher.Summary方法
     public String toHtml(boolean encode){...}

     这是标题的获取方法

     String title = detail.getValue("title");

     我们可不可以也像summary一样调用呢,答案是肯定的,但是,nutch本身并未提标题关键字高亮的方法,这里需要我们写类和方法。

     新建Titler.java
    
package org.apache.nutch.searcher;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashSet;

import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
import org.apache.nutch.analysis.NutchDocumentAnalyzer;
import org.apache.nutch.searcher.Summary.Fragment;

public class Titler implements Configurable {

    private int maxLength = 40;
    private Analyzer analyzer = null;
    private Configuration conf = null;

    public Titler(Configuration conf) {
        setConf(conf);
    }

    public Configuration getConf() {
        return conf;
    }

    public void setConf(Configuration conf) {
        this.conf = conf;
        this.analyzer = new NutchDocumentAnalyzer(conf);
        this.maxLength = conf.getInt("searcher.title.maxlength", 40);
    }

    public Summary getSummary(String text, Query query) {
        Token[] tokens = getTokens(text); // parse text to token array

        if (tokens.length == 0)
            return new Summary();

        String[] terms = query.getTerms();
        HashSet highlight = new HashSet(); // put query terms in table
        for (int i = 0; i < terms.length; i++)
            highlight.add(terms[i]);

        Summary s = new Summary();
        
        for (int i = 0; i < tokens.length && i < maxLength; i++) {
            Token token = tokens[i];
            //
            // If we find a term that's in the query...
            //
            if (highlight.contains(token.term())) {
                s.add(new Highlight(token.term()));    
            }else{
                s.add(new Fragment(token.term()));
            }
        }
        return s;
    }

    /** A highlighted fragment of text within a summary. */
    public static class Highlight extends Fragment {
        /** Constructs a highlighted fragment for the given text. */
        public Highlight(String text) {
            super(text);
        }
        /** Returns true. */
        public boolean isHighlight() {
            return true;
        }
    }

    private Token[] getTokens(String text) {
        ArrayList result = new ArrayList();
        TokenStream ts = analyzer.tokenStream("title", new StringReader(text));

        TermAttribute termAtt = (TermAttribute) ts
                .getAttribute(TermAttribute.class);
        TypeAttribute typeAtt = (TypeAttribute) ts
                .getAttribute(TypeAttribute.class);

        try {
            while (ts.incrementToken()) {
                Token token = new Token();
                token.setTermBuffer(termAtt.term());
                result.add(token);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return (Token[]) result.toArray(new Token[result.size()]);
    }
}


     然后在NutchBean.java,添加
     
     private Titler titler;

     public Summary getTitle(HitDetails hit, Query query) throws IOException {
    return titler.getSummary(hit.getValue("title"), query);
     }

     public NutchBean(Configuration conf, Path dir) throws IOException {
        ...
        this.titler = new Titler(conf);
     }

     我这里测试的JSP页面是新建s.jsp.如果要在原来的search.jsp页面内调用,需要修改相应的代码。

<%@ page
  session="false"
  contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"

  import="java.io.*"
  import="java.util.*"
  import="java.net.*"
  import="javax.servlet.http.*"
  import="javax.servlet.*"

  import="org.apache.nutch.html.Entities"
  import="org.apache.nutch.metadata.Nutch"
  import="org.apache.nutch.searcher.*"
  import="org.apache.nutch.plugin.*"
  import="org.apache.nutch.clustering.*"
  import="org.apache.hadoop.conf.*"
  import="org.apache.nutch.util.NutchConfiguration"
%>
<jsp:include page="/show/include/style.html"/>
<%

        String keyword = "贵阳pep艺术中心― 中心简介";
        String crawl = "/home/961a/workspace/test/Nutch1.2Web/ROOT/crawl";
        String summarylength = "120";

        final Configuration conf = NutchConfiguration.create();
        conf.set("searcher.dir", crawl);
        conf.set("searcher.summary.length", summarylength);

        final NutchBean bean = new NutchBean(conf);
        try {
            final Query query = Query.parse(keyword, conf);
            query.getParams().setMaxHitsPerDup(0);
            final Hits hits = bean.search(query);

            out.println("Total hits: " + hits.getTotal() + "  keyword:贵阳pep艺术中心― 中心简介;<BR>");

            final int length = (int) Math.min(hits.getLength(), 10);
            final Hit[] show = hits.getHits(0, length);
            final HitDetails[] details = bean.getDetails(show);
            final Summary[] summaries = bean.getSummary(details, query);

            for (int i = 0; i < hits.getLength(); i++) {
                String url = Entities.encode(details[i].getValue("url"));
                String title = bean.getTitle(details[i], query).toHtml(true);
                String summary = summaries[i].toHtml(true);
                %>
                <p>
                <span class="title"><a href="<%=url%>"><%=title%></a></span>
                <br>
                <span class="bodytext"><%=summary%></span>
                <br>
                <span class="url"><%=Entities.encode(details[i].getValue("url"))%></span>
                </p>
                <%
            }
        } catch (Throwable t) {
        }%>


使用Lucene的highlight包高亮显示检索关键字 在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。 使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。 需要的包有lucene-core-3.4.0.jar,IKAnalyzer3.2.8.jar,lucene-highlight 阅读详情

相关推荐

【电力负荷预测】项目介绍 MATLAB实现基于BO-Transformer-LSTM贝叶斯优化算法(BO)优化Transformer-LSTM组合模型进行居民用户多步电力负荷预测(含模型描述及部分示例

内容概要:本文介绍了一个基于BO-Transformer-LSTM的组合模型,用于实现居民用户多步电力负荷预测的完整项目实例。该模型融合Transformer的全局注意力机制与LSTM的局部时序记忆能力,构建能够捕捉长时依赖与周期性特征的深度学习架构,并引入贝叶斯优化(BO)自动搜索最优超参数组合,提升预测精度与训练效率。项目涵盖从原始数据清洗、特征工程、滑动窗口样本构建、模型设计到超参数优化、反归一化及多步误差评估的全流程,强调时间顺序划分以防止信息泄露,并通过周期编码、外生变量融合等方式增强数据表达能力。文中提供了详细的MATLAB代码示例,包括数据预处理、网络搭建、贝叶斯优化配置和预测结果评估等关键步骤。 适合人群:具备一定机器学习和时间序列分析基础,熟悉MATLAB编程环境,从事电力系统预测、智能电网、负荷管理等相关领域的研究人员、工程师及研究生。 使用场景及目标:①应用于居民级或多用户聚合负荷的短期至中期多步预测(如未来24小时);②服务于配电系统运行调度、需求响应基线设定、家庭能源管理系统优化、分布式能源协调控制等实际工程场景;③为科研提供可复现的深度学习+贝叶斯优化的技术路线参考。 阅读建议:此资源以实际项目为导向,建议读者结合提供的代码逐步实现并调试模型,重点关注数据质量控制、时间特征编码、组合网络结构设计与贝叶斯优化稳定性之间的协同关系,在实践中深入理解多步预测中的误差累积机制与超参数敏感性问题。

nutch 高亮和增加索引长度

 高亮显示比较简单,网上也有很多介绍代码。修改如下:将 org.apache.nutch.searcher.Summary 第 54行 代码 修改为: public String toString() { return "" + super.toString() + ""; }增加索引长度花了我比较长的时间 , 不过后来发现原来有两个参数是专门调整索引长度的 ,刚看代码的时候没有注意到

吴楚狂生 1916

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

nutch1.2标题关键词高亮方法

根据下面这个链接教程编码后试验发现标题只是加上了标签,并没有实现标签的效果。不知道作者用的是那个版本的nutch,我用1.2版没效果。 http://hi.baidu.com/conquer84/blog/item/50bc43eea1a147fdb2fb959a.html   链接的教程:   在org.apache.nutch.searcher.HitDetails这个类中

云端分布式搜索技术 2559

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

Lucene关键字高亮显示

在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。 有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。 高亮显示,就是根据用户输入的检索关键字,检索找到该关键字对应的检索结...

pavel0的专栏 730

【项目分享】RailTracker: 火车票务数据采集与分析

从12306使用爬虫爬取火车站及车次信息、火车票价 通过本项目,我们将带领访问者手把手完成火车票数据采集、数据清洗、数据集成、可视化的一整个流程!

zhushatong的博客 3344

Nutch 二次开发需要修改的东西

nutch 里的页面,是通过xslt 里编写的,在源码src/web/style/nutch-page.xsl 编写,这里有一个xsl格式的源码。这里你应该要读懂它的基本结构,不然会build.xml失败的。指明了一些文件的位置,可以很方便的在此进行修改。参考该文 Nutch:

TJT999 9413

抖音风控参数逆向实战:从bd-ticket-guard-client-data到x-tt-session-dtrait的完整攻防解析

本文深入解析抖音风控参数逆向实战,重点剖析bd-ticket-guard-client-data和x-tt-session-dtrait的生成机制与破解方法。通过抓包调试、ECDH密钥生成、RSA与AES双层加密等技术手段,揭示抖音风控系统的核心逻辑,并提供实用的对抗策略与维护建议,助力开发者突破抖音风控限制。

weixin_30335575的博客 676

完整指南:从基础到高级使用 Semantic Kernel

通过本文的学习,你已经掌握了从基础到高级的使用方法。安装并配置。使用简单的文本生成和自然语言处理任务。利用任务链和工具扩展构建复杂的工作流。通过记忆管理上下文,创建更智能的应用。扩展多模态处理能力,集成图像和音频分析。将应用部署到云端,并通过 Azure Functions 提供智能服务。无论是构建简单的对话应用,还是创建多模态智能服务,都提供了强大的工具和灵活的扩展机制。希望这篇文章能帮助你更好地理解并运用这个框架,构建出更加智能和高效的应用。

net core ,前端 ,python 全栈开发 2805

Nutch1-1搜索页面高亮关键字的显示

Nutch1-1 高亮关键字

fanlu319的专栏 547

解密Android相机框架:从HAL到应用层的全链路解析

本文深入解析Android相机框架的全链路架构,从应用层到硬件抽象层(HAL)再到驱动层,详细介绍了CamX-CHI架构的设计哲学与实战应用。通过HAL3接口、V4L2交互机制及Camera2 API的最佳实践,帮助开发者优化相机性能,解决多摄切换、预览卡顿等常见问题,提升成像效率与稳定性。

weixin_29238147的博客 408

Nutch -0.8.1 摘要高亮出错分析

Nutch-0.8.1中summary出错报告出错问题描述:Nutch-0.8.1中,中文分词采用的单字分法。搜索时返回的摘要以字为单位显示高亮。如搜索“媒体”,摘要中所有的单独的“媒”和“体”都会高亮。搜索引擎中已经加入了中文分词后,不会出现Nutch-0.8.1中的高亮错误。但有时会出现返回的摘要中无关键字的错误。如搜索“东西”,会返回如下条目,题目和摘要中都没有出现“东西”。点击

dingding1984的专栏 717

Vue3+Vite+Electron桌面应用开发:从零到打包的完整避坑指南

本文是一份详尽的Vue3+Vite+Electron桌面应用开发实战指南。文章从项目初始化、环境配置、主进程构建、Vite深度优化,到最终的打包配置与优化,系统性地讲解了使用现代前端技术栈开发跨平台桌面应用的完整流程,并重点分享了开发与打包过程中的常见“坑点”与解决方案,旨在帮助开发者高效构建稳定可交付的桌面端应用。

hh234的博客 107

基于AOD-Net与GAN的深度学习去雾算法开发

本文提出一种结合AOD-Net与GAN的深度学习去雾算法。通过改进的AOD-GAN网络架构,集成风格迁移模块,设计包含对抗损失、内容损失和风格损失的复合目标函数。实验表明,该方法在PSNR(24.67)、SSIM(0.92)和FID(32.15)指标上优于传统方法,实现了端到端的物理模型引导图像去雾。未来将优化多尺度特征融合和轻量化部署。

huanghm88的专栏 594

Lucene查询并高亮显示

1.导入jar包2.创建实体Beanpackagecom.zhishang.lucene; /** *CreatedbyAdministratoron2017/7/8. */ publicclassHtmlBean{ privateStringtitle; privateStringcontent; privateSt...

weixin_33943347的博客 344

【AUTOSAR-Nm】-2.2-通过CAN/Lin...信号报告Nm状态机的跳转

如何通过Can/Lin/Fr/Udp/J1939信号,获取每个通道对应状态机的跳转信息:“前一次状态”和“当前状态”。

「汽车电子助手」的博客 2463

Unity ECS 架构设计

当游戏同时存在1万个单位时,传统OOP架构因内存不连续、缓存命中率低、单线程瓶颈导致性能暴跌。ECS(实体-组件-系统)通过将数据按类型连续存储,实现高缓存命中率;逻辑与数据分离,支持多线程并行处理。本文以Unity DOTS为例,详解ECS原理、内存布局、Job System与Burst优化,并提供万级单位实战代码与纯C#手写ECS实现,助开发者从“听说过”到“能设计”,彻底掌握高性能游戏架构核心。

sNameNo的博客 324

BES2810_best1702_best1702_ibrt_三者关系深度解析

一颗芯片的三个名字:BES2810、best1702 与 best1702_ibrt 关系深度解析

weixin_42162924的博客 349

linux libxml2-2.6.26

XML toolkit from the GNOME projectFull documentation is available on-line at http://xmlsoft.org/This code is released under the MIT Licence see the Copyright file.To build on an Unixised setup: ./configure ; make ; make installTo build on Windows: see instructions on win32/Readme.txtTo assert build quality: on an Unixised setup: run make tests otherwise: There is 3 standalone tools runtest.c runsuite.c testapi.c, which should compile as part of the build or as any application would. Launch them from this directory to get results, runtest checks the proper functionning of libxml2 main APIs while testapi does a full coverage check. Report failures to the list.To report bugs, follow the instructions at: http://xmlsoft.org/bugs.htmlA mailing-list xml@gnome.org is available, to subscribe: http://mail.gnome.org/mailman/listinfo/xmlThe list archive is at: http://mail.gnome.org/archives/xml/All technical answers asked privately will be automatically answered onthe list and archived for public access unless pricacy is explicitelyrequired and justified.Daniel Veillard$Id: README,v 1.13 2005/07/10 21:38:25 veillard Exp $

【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化

看似简单,但每次 Instantiate 都在托管堆上分配内存,几秒钟后 GC 就会触发一次回收,造成明显卡顿。用集合池(ListPool、DictionaryPool)后,这些临时集合全部可复用,热路径零分配。零分配(Zero Allocation)优化的核心思路是:在热路径(Update、FixedUpdate、每帧执行的逻辑)中完全避免堆内存分配,让 GC 几乎无工可做,自然就不会产生卡顿。核心原因:对象池 + 集合池 + 零分配代码改造后,运行时几乎不产生新的垃圾,GC 自然就没活干了。

crystal_WJT的博客 416

增强黄瓜好坏检测数据集1980张VOC+YOLO格式.zip

重要说明:此数据集为增强数据集,其中图片有较多的重复或者角度变换后标注数据,介意的请勿购买!数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1981标注数量(xml文件个数):1981标注数量(txt文件个数):1981标注类别数:2标注类别名称:["fresh cucumber","rotten cucumber"]每个类别标注的框数:fresh cucumber 框数 = 2933rotten cucumber 框数 = 1344总框数:4277使用标注工具:labelImg标注规则:对类别进行画矩形框重要说明:暂无特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注

【搜索引擎】Lucene查询语法

Lucene 查询语法是 Elasticsearch 的底层查询语言,Kibana 的 Lucene 模式和 ES 的查询都基于此语法。

沉梦听雨的博客 104

Umi-OCR 批量图片转文字工具离线批量文字识别(图片转文字)软件.rar

简介本软件用于批量导入本地图片,识别图片中的文本,输出到软件面板或本地txt文件/md文件。除了能批量识别普通图片,本软件还有忽略指定区域的特殊功能。本软件使用离线OCR模块 PaddleOCR-json 图片转文字程序 ,使用过程中无需联网。支持更换Paddle官方模型(v2.x版本)或自己训练的模型,支持修改PaddleOCR参数。通过添加不同的语言模型,软件可识别多国语言。

rtm_matlab_RTMmatlab_rtm偏移_RTM_逆时偏移_RTM逆时偏移_源码.rar

rtm_matlab_RTMmatlab_rtm偏移_RTM_逆时偏移_RTM逆时偏移_源码.rar

上一篇: IE下点击事件触发window.onbeforeunload 事件的解决办法
下一篇: Nutch 遇见hits.getHits()出现java.lang.ArrayIndexOutOfBoundsException解决办法
j2mvc
博客等级 码龄15年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值