高亮显示

偶见有人谈起高亮显示的或这或那得错误。感觉自写个也挺简单的,可控制性强。

 

贴个原创的,用于“眉湖通”搜索。

/**
 * 
 */
package util;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;

import org.wltea.analyzer.IKSegmentation;
import org.wltea.analyzer.Lexeme;

/**
 * 
 * 高亮,使用IK分词
 * @author zzu.nlp.liguohua
 *
 */
public class highLighter {
	
	private String[] getSplitStr(String s, String regx){
		return s.split(regx);
	}	
	
	/**
	 * 
	 * @param searchWord 搜索的关键词(需要高亮显示的原始字串) 
	 * @return 返回searchWord经过分词后的词组,即一组需要高亮显示的子串
	 */
	public static List getKeywords(String searchWord){
		StringReader sr=new StringReader(searchWord);
		IKSegmentation iks=new IKSegmentation(sr);
		
		//向右最大匹配
		Comparator comp=new Comparator(){
			public int compare(String o1, String o2) {				
				return o2.length()-o1.length();
			}
		};
		
		Lexeme l;
		HashSet hs=new HashSet(5);
		try {
			while((l=iks.next())!=null){
				hs.add(l.getLexemeText());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		List al=new ArrayList();
		al.addAll(hs);
		Collections.sort(al,comp);
		
		return al;
	}

	/**
	 * 
	 * @param text 需要进行高亮的文本
	 * @param al 高亮显示的关键词组
	 * @return 返回处理的结果
	 */
	public static String getHiLightContent(String text, List al){
		//System.out.println("需要高亮的关键词:"+al.toString());
		
		StringBuilder rt=new StringBuilder();
		String tp="";
		int tpI=0,k=0;
		boolean bl=false;
		//标识第一次命中高亮显示的位置
		boolean first=false; 
		int ftIdx=0;
		
		for(int i=0;i").append(text.substring(i,tpI)).append("");
					bl=true;
					if(!first){
						first=true;
						ftIdx=i;
					}
					break;
				}
			}
			if(!bl) rt.append(text.substring(i,tpI));
			bl=false;
			i=tpI;
		}
		
		//return rt.toString();
		// 摘要截长
		
		tp=rt.toString();
		tp=tp.substring(tp.lastIndexOf('_', ftIdx)+1);
		//tp=tp.replaceAll("\n", "_");
		
		if(tp.length()<300) return tp;
    	else return tp.substring(0,300);
    	
	}

	public static String getHiLightContent(String text, String searchWord){
		return getHiLightContent(text, getKeywords(searchWord));
	}
	
}
 

 

你可能感兴趣的:(搜索引擎,Java,J#)