对搜索结果里的关键字实现高亮显示~~
对搜索结果里的关键字进行高亮显示,在Lucen int action 这本书附带的源代码里包含了highlightor.jar包,但是这个包对中文支持不是很,它会把关键字所在的那句话整句高亮,于是我个人写了一个用于高亮显示关键词的类,源代码如下:我这里用的只是简单的字符串匹配,然后字符串替换,在java里还有个正则表达式,我也研究的比较深入,迟点将会用正则表达式来写这个高亮的类~~import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
public class Highlight {
int beginindex;
int i;
int a;
int summarylength;
String summary;
String lightquerystring;
String queryString;
QueryScorer scorer;
Query query;
int maxNumFragments = 2;
String separator = "...";
// ~
// Constructors_-------------------------------------------------------------------
public Highlight() {
}
// ~ Methods
// --------------------------------------------------------------------------------
/**
* method used to highlight the keyword in the summary,a simple way to do
* highlight job
*
* @throws IOException
*/
public String Highlighter(String summary, String queryString)
throws IOException {
beginindex = summary.indexOf(queryString);
summarylength = summary.length();
lightquerystring = "<B>" + queryString + "</B>";
if (queryString.contains(" ")) { // 有空格
String[] subquerystring = queryString.split(" ");
a = subquerystring.length;
beginindex = summary.indexOf(queryString);
for (i = 0; i < a; i++) {
beginindex = summary.indexOf(subquerystring);
System.out.println(beginindex);
lightquerystring = "<B>" + subquerystring + "</B>";
summary = summary.replace(subquerystring, lightquerystring);
}
StringReader sb = new StringReader(summary);
// 按行读取已经高亮的summary,
// 判断每行时候有关键词,有的话就添加到返回的summary
BufferedReader br = new BufferedReader(sb);
String str;
for (i = 0; i < a; i++) {
while ((str = br.readLine()) != null) {
if (str.contains(subquerystring)) {
summary = str + summary;
}
}
}
return summary;
} else if (!queryString.contains(" ")) {// 没有空格
if (summarylength <= 200 && summarylength >= 0) {
summary = summary.substring(beginindex, summarylength);
summary = summary.replace(queryString, lightquerystring);
} else if (summarylength > 200) {
if ((summarylength - beginindex) >= 200) {
summary = summary.substring(beginindex, beginindex + 200);
summary = summary.replace(queryString, lightquerystring);
} else if ((summarylength - beginindex) < 200) {
summary = summary.substring(beginindex, summarylength);
summary = summary.replace(queryString, lightquerystring);
}
}
return summary;
} else {
return lightquerystring;
}
}
/**
* method highlighter uses Highlighter.jar to highlight the keyword in the
* summary
*
*/
public String Highlighter(String summary, String queryString, Query query,
CJKAnalyzer analyzer, String contents) throws IOException {
QueryScorer scorer = new QueryScorer(query);
Highlighter highlighter = new Highlighter(scorer);
TokenStream tokenStream = analyzer.tokenStream("contents",
new StringReader(summary));
return highlighter.getBestFragments(tokenStream, summary,
maxNumFragments, separator);
}
}
[ 本帖最后由 powerwind 于 2006-6-7 23:44 编辑 ] 很好,
见到有人研究搜索引擎了
支持以后多发些
怪不得Unicode那篇东西链到车东的网站 呵呵,Lucene这个东西我已经研究好久了,而且也用它来开发了一个站内的搜索引擎,不过暂时我只做了对html还有text等文件格式的索引。还在写对word,pdf等格式文件的分析器。。 期待楼主更多文章。luncene我只是有过了解,没深入研究过。以前做抓取系统的时候用过下,感觉很强大。 期待楼主更多文章。
宿舍有个同学毕业设计就做这个,等他有空时叫他上来交流一下。。。呵呵。 Hjack是计算机五班的吧,你那个同学我知道,他做那个毕业设计的时候找过我。。。我是02软件一班的 听说有些人帮人做课程设计赚钱?
有这种事?还听说很好赚滴说。 有这种说法,没有去试过,也没有时间去试,自己大把事情忙 hexq,你是小强呀???
顶你呀,现在才来这里。。。 原帖由 hjack 于 2006-6-8 20:50 发表
hexq,你是小强呀???
顶你呀,现在才来这里。。。
呵呵 ~~正是在下啦 ~~~ 原帖由 用程序诠释生命 于 2006/6/8 09:01 发表
听说有些人帮人做课程设计赚钱?
有这种事?还听说很好赚滴说。
你少来这些念头。 原帖由 wool王 于 2006-6-9 09:59 发表
你少来这些念头。
唉呀。。。让你发现了。。
我正在考虑能不能去做个代做毕业设计的中介网站,
代写论文的网站早就有了,可能代做毕业设计的还没有。。
说不定到时还能上个报纸什么的,那我就出名了。
哈哈哈。。。。 你做了的话别来这边做广告啊。。。封你ID。。。 Java...有点蒙...对我来讲...大概看懂这东东...
页:
[1]