[转]Lucene 中文分词的 highlight 显示

6-3 分词并显示 (16分) 程序的功能是:调用Input函数读入一个长度不超过81的字符串,字符串中只含字母和空格,遇到读满或者回车结束读入字符,空格用于分隔单词。请将字符串中用空格分隔的单词在屏幕上输出来。 要求用指针完成函数中各参数的传递与访问,自定义函数头和函数体中不得出现数组下标形式的表示法。 void Input ( char *str ) { char x; x = getchar(); int i = 1; while(x != '\n' && i < 81) { 阅读详情
Lucene 中文分词的 highlight 显示
1 、问题的来源

增加分词以后结果的准确度提高了,但是用户反映返回结果的速度很慢。原因是, Lucene 做每一篇文档的相关关键词的高亮显示时,在运行时执行了很多遍的分词操作。这样降低了性能。

2 、解决方法

在 Lucene1.4.3 版本中的一个新功能可以解决这个问题。 Term Vector 现在支持保存 Token.getPositionIncrement() 和 Token.startOffset() 以及 Token.endOffset() 信息。利用 Lucene 中新增加的 Token 信息的保存结果以后,就不需要为了高亮显示而在运行时解析每篇文档。通过 Field 方法控制是否保存该信息。修改 HighlighterTest.java 的代码如下:

// 增加文档时保存 Term 位置信息。

private void addDoc(IndexWriter writer, String text) throws IOException

{

Document d = new Document();

//Field f = new Field(FIELD_NAME, text, true, true, true);

Field f = new Field(FIELD_NAME, text ,

Field.Store.YES, Field.Index.TOKENIZED,

Field.TermVector.WITH_POSITIONS_OFFSETS);

d.add(f);

writer.addDocument(d);

}

// 利用 Term 位置信息节省 Highlight 时间。

void doStandardHighlights() throws Exception

{

Highlighter highlighter =new Highlighter(this,new QueryScorer(query));

highlighter.setTextFragmenter(new SimpleFragmenter(20));

for (int i = 0; i < hits.length(); i++)

{

String text = hits.doc(i).get(FIELD_NAME);

int maxNumFragmentsRequired = 2;

String fragmentSeparator = "...";

TermPositionVector tpv = (TermPositionVector)reader.getTermFreqVector(hits.id(i),FIELD_NAME);

// 如果没有 stop words 去除还可以改成 TokenSources.getTokenStream(tpv,true); 进一步提速。

TokenStream tokenStream=TokenSources.getTokenStream(tpv);

//analyzer.tokenStream(FIELD_NAME,new StringReader(text));

String result =

highlighter.getBestFragments(

tokenStream,

text,

maxNumFragmentsRequired,

fragmentSeparator);

System.out.println("/t" + result);

}

}

最后把 highlight 包中的一个额外的判断去掉。对于中文来说没有明显的单词界限,所以下面这个判断是错误的:

tokenGroup.isDistinct(token)

这样中文分词就不会影响到查询速度了。
 
6-2 分词并显示 void Input ( char *str ) int Split_Count ( char *str,char **pStr ) 题目要求: 调用Input函数读入一个长度不超过81的字符串,字符串中只含字母和空格,遇到读满或者回车结束读入字符,空格用于分隔单词。请将字符串中用空格分隔的单词在屏幕上输出来。要求用指针完成函数中各参数的传递与访问,自定义函数头和函数体中不得出现数组下标形式的表示法。 裁判测试程序样例: #include <stdio.h> /* userCode(<80字符): 自定义函数之原型声明 */ void Input ( char *str ); int Split_Count ( char 阅读详情

相关推荐

Keil AC6编译器独立安装与配置指南:不升级Keil MDK也能用上新工具链

本文详细介绍了如何在不升级Keil MDK的情况下独立安装和配置Arm Compiler 6(AC6),帮助嵌入式开发者充分利用AC6的编译速度、代码密度和现代语言支持优势。通过零侵入式解决方案,开发者可以在现有环境中灵活切换编译器版本,提升开发效率。

weixin_30872157的博客 552

分词并显示

pta 6-6分词并显示

m0_64335501的博客 531

逆向解析喜马拉雅新版xm-sign算法:从dws.1.6.8.js到签名生成

本文详细解析了喜马拉雅新版xm-sign算法的逆向破解方法。通过定位核心JS文件dws.1.6.8.js,构建本地Node.js模拟执行环境,并解密关键参数cid与appKey,最终实现签名算法的本地化稳定生成,为数据采集提供可靠解决方案。

weixin_29250403的博客 211

【PTA】6-8 分词并显示

程序的功能是:调用Input函数读入最多80个字符,要求字符串中只保留字母和空格,遇到读满或者回车结束读入字符,空格用于分隔单词。请将字符串中用空格分隔的单词在屏幕上输出来。 要求用指针完成函数中各参数的传递与访问,自定义函数头和函数体中不得出现数组下标形式的表示法。

Agcsdn的博客 2053

保姆级教程:用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信(附完整代码)

本文详细介绍了如何利用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信,涵盖硬件连接、寄存器配置、时序优化及FPGA接口设计等关键步骤。通过实例代码和调试技巧,帮助开发者快速掌握高效数据交互技术,提升嵌入式系统设计能力。

weixin_26918763的博客 226

Win10系统下海思SS928开发板烧写工具ToolPlatform-1.0.11安装避坑指南

本文详细介绍了在Windows 10系统下安装和配置海思SS928开发板烧写工具ToolPlatform-1.0.11的完整流程与避坑指南。核心解决了JVM内存配置导致的界面卡顿、闪退问题,并提供了驱动安装、硬件连接、镜像烧写的实战步骤,帮助嵌入式开发新手快速搭建稳定的烧写环境。

kite3的博客 454

lucene学习--分词和高亮显示

首先在E:\TestLucene\workspaceSE路径下,建立文件夹indexdocs和3个txt文件:L1.txt,L2.txt,L3.txt. L1.txt内容: 111111111111111111111111111111111111111111111111111111111111111111111111111 信息检索就是从信息集合中找出与用户需求相关的信息。 被检索

Coder Jiang 693

LearningToRank(LTR)排序算法LGBMRanker的原理和使用

1. 写在前面 在最近新闻推荐的比赛中, 接触到了一个排序模型LGBMRanker, 该模型与普通的分类模型LGBMClassifier不太一样, 普通的分类模型在进行推荐的时候, 往往是先预测某个商品或者文章用户会不会点击, 也就是它的目标是预测用户点击某篇文章或者某个商品的概率, 然后根据这个概率值进行排序, 排完之后,把最靠前的几个返回回来给用户进行推荐。 而LGBRanker模型, 它不关心用户点击某篇文章的概率, 而是根据用户点击或者不点击的这个行为, 直接去预测最后商品或者文章的一个相对顺序,

Miracle8070 1万+

Lucene 中文分词的 highlight 显示

1 、问题的来源 增加分词以后结果的准确度提高了,但是用户反映返回结果的速度很慢。原因是, Lucene 做每一篇文档的相关关键词的高亮显示时,在运行时执行了很多遍的分词操作。这样降低了性能。 2 、解决方法 在 Lucene1.4.3 版本中的一个新功能可以解决这个问题。 Term Vector 现在支持保存 Token.getPositionIncrement() 和 Token.st...

lihaiyan 421

Python爬虫实战:用最新技术高效下载摄影网站图片

本文将深入探讨如何利用Python最新技术栈构建一个功能完整的摄影网站图片爬虫。我们将使用异步编程、智能反爬策略和现代化工具,实现高效、可靠的图片下载系统。高性能异步架构:使用asyncio实现高并发下载智能反爬策略:支持多种反爬措施和浏览器模拟多网站适配:可解析多种摄影网站结构数据管理:完整的下载记录和统计功能扩展性强:支持代理、分布式等高级功能用户友好:提供进度显示和详细日志。

2201_76125261的博客 1644

《SAP FICO系统配置从入门到精通共40篇》030、集成配置:FI与生产计划(PP)的自动科目确定

FI和PP的自动科目确定,本质上是把生产业务翻译成会计语言。翻译规则就藏在那些配置表里。配的时候多想一步:这个业务动作,在财务眼里是什么?是材料消耗?是产出入库?还是工费分摊?想清楚这个,再看配置界面,那些代码就不是天书了。最好的测试方式,是月底关账前,让生产部门跑一遍所有类型的生产订单。配置对不对,业务最知道。

985大学毕业,前某大厂员工,啥都会点的程序员! 574

Lucene中文分词的highlight显示

1 、问题的来源 增加分词以后结果的准确度提高了,但是用户反映返回结果的速度很慢。原因是, Lucene 做每一篇文档的相关关键词的高亮显示时,在运行时执行了很多遍的分词操作。这样降低了性能。 2 、解决方法 在 Lucene1.4.3 版本中的一个新功能可以解决这个问题。 Term Vector 现在支持保存 Token.getPositionIncrement() 和 Toke

在水一方 835

【Power Compiler手册】4.saif文件

功耗计算的准确性取决于切换活动数据的准确性。这些数据是通过使用RTL仿真或门级仿真生成的,并存储在SAIF文件中。在执行功耗优化和分析之前,应该使用SAIF文件来反标设计对象上的切换活动信息。SAIF是由Synopsys支持的ASCII格式,用于促进不同Synopsys工具之间的信息交换(参见IEEE 1801标准,附录J)。使用`read_saif`命令读取SAIF文件,使用`write_saif`命令写出SAIF文件。有关更多信息,请参见`read_saif`和`write_saif`命令的手册页。

QRBQ 2186

lucene4.9之highlight

测试高亮 import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; import or...

w62268458的博客 196

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Lucene的高亮

1.加入高亮的架包<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ma

jsaber的博客 524

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

lucene第一步---5.中文分词IKAnalyzer和高亮highlighter的使用

最近工作比较忙,一直没有更新,还请见谅。 最近lucene已经更新到lucene 3.0版本了 2.X版本的一些用法已经彻底不在支持了。 下面的例子主要是介绍中文分词器IKAnalyzer的使用和Lucene高亮显示。 lucene 3.x版本中有些2.x方法已经完全被剔除了,这里会捎带一下3.x的用法,当然我这里用的还是2.X的版本。 lucene自带的分词方式对中文分词十分的不友好,基...

llying 221

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

提高Lucene中带Highlighter查找的效率

1、问题的来源 增加分词以后结果的准确度提高了,但是用户反映返回结果的速度很慢。原因是, Lucene 做每一篇文档的相关关键词的高亮显示时,在运行时执行了很多遍的分词操作。这样降低了性能。   2 、解决方法      在 Lucene1.4.3 版本中的一个新功能可以解决这个问题。 Term Vector 现在支持保存 Token.getPositionIncrement() 和 To

waltertan1988的博客 551

nutch开源搜索引擎的高亮和增加索引长度

高亮显示比较简单,网上也有很多介绍代码。修改如下: 将 org.apache.nutch.searcher.Summary 第 54行 代码 修改为:  public String toString() { return "&lt;span style='color:red'&gt;" + super.toString() + "&lt;/span&gt;"; } 增加索引长度花了我比较长...

nhy520 127

solr

(一)什么是solr? 概要简介: solr是一个独立的企业级搜索应用服务器,对外提供类似web-service的API接口。是一个高性能,基于Lucene(开源搜索引擎框架)的全文搜索服务器。实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。 全文检索是指是计算机索引程序扫描文章中的每一个词,对每个词都建立索引,指明该...

baidu_41814738的博客 302

Spring Cloud 学习与实践(16):Elasticsearch 商品搜索、中文分词与索引一致性

当前 已经具备: 商品数据目前保存在 MySQL: 如果只按主键查询商品,MySQL 足够完成: 但当需求变成: 继续只用: 会逐渐遇到几个问题: 本章最终建立: 同时解决: 2、先理解 Elasticsearch 的核心概念 2.1 Elasticsearch 是什么 Elasticsearch 是一个面向搜索和分析的分布式文档数据库。本章最关心的能力是: 它不是为了替代当前 MySQL,而是承担不同职责:本章始终坚持: 因此: 不能简单处理为: 正确方向是: 2.2 Elasticsearch 与

作为一个长者,有必要记录下人生经验 903

Elasticsearch 2025/3/7

Elasticsearch 2025/3/7 黑马笔记

yesyesyes_yes的博客 1451

从零构建全文检索系统:倒排索引、IK分词与BM25排序实战

全文检索是处理海量文本数据、实现高效信息查询的核心技术。其底层原理依赖于倒排索引这一数据结构,它通过建立词汇到文档的映射,将查询复杂度从O(n)的全表扫描降至高效的词汇查找与集合求交,从而支撑起搜索引擎的快速响应。在中文场景下,分词是影响检索效果的关键环节,IK分词器等工具通过词典匹配与统计模型相结合的策略,有效解决了中文的切分歧义和新词识别难题。而决定搜索结果质量的相关性排序,则经历了从TF-IDF到BM25算法的演进。BM25通过引入词频饱和与文档长度归一化机制,提供了更符合人类认知的排序结果,其参数(

weixin_30439067的博客 387
上一篇: Java串口通信详解(转)
下一篇: 如何用JAVA实现数字转换为大写?
adderllyer
博客等级 码龄20年 13粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值