`
cleaneyes
  • 浏览: 342421 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Lucene實戰開發手記(五)--- 為html/txt格式的文檔創建索引

阅读更多

txt與html解析存在亂碼的問題,這個問題困擾了我好幾天,最後找到一些資料,通過多次嘗試,基本解決了。

 

public class TxtDocHander extends DocHander {

	public Document getDocument(byte[] inputByte) throws IOException {
		// 進行文檔的編碼格式識別	
		CodepageDetectorProxy codepageDetectorProxy = CodepageDetectorProxy.getInstance();
		codepageDetectorProxy.add(UnicodeDetector.getInstance());
		codepageDetectorProxy.add(JChardetFacade.getInstance());
		InputStream inputStream = new ByteArrayInputStream(inputByte);
		
		Charset charset = codepageDetectorProxy.detectCodepage(inputStream,inputByte.length);
		String charsetName = charset.name();		
		if (charsetName.equals("windows-1252")){
			charsetName = "big5";//JChardetFacade對big5的編碼的txt識別不是太好
		}
		String contents = new String(inputByte,charsetName);//編碼轉換了哦
		   
		Document document = new Document();	
		
		addContent(document, contents);		
		
		return document;
	}	

 

html解析,除了編碼問題外,還有文本提取的問題。lucene的demo類庫自帶的HTMLParser 用起來很簡單,能很幹凈的去掉html標簽,但在處理有繁體中文字的文檔時,有時會出現解析中止的情況,不知是何原因。而對HtmlParser所提供的Parser,我不太熟悉,使用時有部分html標簽去不掉,故將兩者結合起來使用,已將問題解決。

 

public class HtmlDocHander extends DocHander {

	@Override
	public Document getDocument(byte[] inputByte) throws Exception {
		// TODO Auto-generated method stub
		InputStream inputStream = new ByteArrayInputStream(inputByte);
		//編碼轉換
		CodepageDetectorProxy codepageDetectorProxy = CodepageDetectorProxy.getInstance();
		codepageDetectorProxy.add(new HTMLCodepageDetector());			
		
		Charset charset = codepageDetectorProxy.detectCodepage(inputStream,inputByte.length);	
		String contents = new String(inputByte, charset.name());
		
		Document document = new Document();
		addContent(document, parseHtmlToString(contents));//解析出文本內容	
		
		return document;
	}

	public static String  parseHtmlToString(String pageContent) throws Exception {	
		//去掉head部分
		int headStart = pageContent.indexOf("<head>");
		int endStart = pageContent.indexOf("</head>", headStart);		
		pageContent = pageContent.substring(0, headStart) + pageContent.substring(endStart+7);
		
		//利用HtmlParser包解析
		Parser parser = new Parser(pageContent);
		NodeList nodeList =null;
		
		NodeFilter textFilter = new NodeClassFilter(TextNode.class);  
		nodeList = parser.extractAllNodesThatMatch(textFilter);
		
		StringBuffer bodyBuffer = new StringBuffer("");
		for (int i=0; i<nodeList.size(); i++){
			Node node = nodeList.elementAt(i);			
			bodyBuffer.append(node.toPlainTextString());
			
		}
		String body = bodyBuffer.toString();	
		
		
		//用lucene demo自帶的HtmlParser進一步刪除多余的標簽
		HTMLParser parser2 = new HTMLParser(new StringReader(body));
		LineNumberReader reader = new LineNumberReader(parser2.getReader());
		StringBuffer buffer = new StringBuffer("");		
	    for (String line = reader.readLine(); line != null; line = reader.readLine()){
	    	  buffer.append(line);		        
	    }	     
	    String contents = buffer.toString();
	   
		return contents;
	}

 

分享到:
评论
3 楼 cleaneyes 2008-05-19  
注意我自己加了去掉<head></head>之间的代码,如果不加这段代码,js会殘留一些下来.
我没试,后面还有js代码的文档.
2 楼 cleaneyes 2008-05-19  
不会啊,你可以试一试,HTMLParser是处理得比较干净的,单独是Parser会有很多js代码而且还有html标签,两者结合之后的处理效果比较好. 我试了几个文档都处理得干干净净的.
1 楼 fys124974704 2008-05-19  
这样子 会不会留下很多js的代码呢?我也在苦恼怎么将一个页面完全解析好
就是保留title 和 body 的txt 去掉所有的js和标签

相关推荐

    Lucene---全文检索(文档pdf/txt/office/html)

    Lucene 支持的文档格式 - **PDF**: 通过 Apache Tika 或 PDFBox 库,Lucene 可以解析 PDF 文件内容并建立索引。 - **TXT**: 对纯文本文件,Lucene 直接读取内容进行索引。 - **Office 文件**: 包括 Word、Excel 和...

    lucene-analyzers-smartcn-7.7.0-API文档-中文版.zip

    赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-analyzers-smartcn-7.7.0.pom; 包含翻译后的API文档:...

    lucene-core-7.7.0-API文档-中文版.zip

    赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene-core-7.7.0-javadoc-API文档-中文...

    lucene-core-7.2.1-API文档-中文版.zip

    赠送原API文档:lucene-core-7.2.1-javadoc.jar; 赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene-core-7.2.1-javadoc-API文档-中文...

    lucene-sandbox-6.6.0-API文档-中文版.zip

    赠送原API文档:lucene-sandbox-6.6.0-javadoc.jar; 赠送源代码:lucene-sandbox-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-sandbox-6.6.0.pom; 包含翻译后的API文档:lucene-sandbox-6.6.0-javadoc-API...

    lucene-analyzers-common-6.6.0-API文档-中文版.zip

    赠送原API文档:lucene-analyzers-common-6.6.0-javadoc.jar; 赠送源代码:lucene-analyzers-common-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-analyzers-common-6.6.0.pom; 包含翻译后的API文档:...

    lucene-analyzers-smartcn-7.7.0-API文档-中英对照版.zip

    赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-analyzers-smartcn-7.7.0.pom; 包含翻译后的API文档:...

    lucene-backward-codecs-7.3.1-API文档-中英对照版.zip

    赠送原API文档:lucene-backward-codecs-7.3.1-javadoc.jar; 赠送源代码:lucene-backward-codecs-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-backward-codecs-7.3.1.pom; 包含翻译后的API文档:lucene-...

    lucene-spatial-extras-7.3.1-API文档-中英对照版.zip

    赠送原API文档:lucene-spatial-extras-7.3.1-javadoc.jar; 赠送源代码:lucene-spatial-extras-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-extras-7.3.1.pom; 包含翻译后的API文档:lucene-...

    lucene-spatial-extras-7.2.1-API文档-中英对照版.zip

    赠送原API文档:lucene-spatial-extras-7.2.1-javadoc.jar; 赠送源代码:lucene-spatial-extras-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-extras-7.2.1.pom; 包含翻译后的API文档:lucene-...

    lucene-spatial-extras-6.6.0-API文档-中英对照版.zip

    赠送原API文档:lucene-spatial-extras-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial-extras-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-extras-6.6.0.pom; 包含翻译后的API文档:lucene-...

    lucene-backward-codecs-7.2.1-API文档-中英对照版.zip

    赠送原API文档:lucene-backward-codecs-7.2.1-javadoc.jar; 赠送源代码:lucene-backward-codecs-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-backward-codecs-7.2.1.pom; 包含翻译后的API文档:lucene-...

    lucene-core-6.6.0-API文档-中文版.zip

    赠送原API文档:lucene-core-6.6.0-javadoc.jar; 赠送源代码:lucene-core-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-6.6.0.pom; 包含翻译后的API文档:lucene-core-6.6.0-javadoc-API文档-中文...

    lucene-backward-codecs-6.6.0-API文档-中英对照版.zip

    赠送原API文档:lucene-backward-codecs-6.6.0-javadoc.jar; 赠送源代码:lucene-backward-codecs-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-backward-codecs-6.6.0.pom; 包含翻译后的API文档:lucene-...

    lucene-backward-codecs-6.6.0-API文档-中文版.zip

    赠送原API文档:lucene-backward-codecs-6.6.0-javadoc.jar; 赠送源代码:lucene-backward-codecs-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-backward-codecs-6.6.0.pom; 包含翻译后的API文档:lucene-...

    lucene-highlighter-6.6.0-API文档-中文版.zip

    赠送原API文档:lucene-highlighter-6.6.0-javadoc.jar; 赠送源代码:lucene-highlighter-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-6.6.0.pom; 包含翻译后的API文档:lucene-highlighter-...

    lucene-suggest-6.6.0-API文档-中文版.zip

    赠送原API文档:lucene-suggest-6.6.0-javadoc.jar; 赠送源代码:lucene-suggest-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-suggest-6.6.0.pom; 包含翻译后的API文档:lucene-suggest-6.6.0-javadoc-API...

    lucene-sandbox-7.2.1-API文档-中文版.zip

    赠送原API文档:lucene-sandbox-7.2.1-javadoc.jar; 赠送源代码:lucene-sandbox-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-sandbox-7.2.1.pom; 包含翻译后的API文档:lucene-sandbox-7.2.1-javadoc-API...

    lucene-suggest-7.7.0-API文档-中文版.zip

    赠送原API文档:lucene-suggest-7.7.0-javadoc.jar; 赠送源代码:lucene-suggest-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-suggest-7.7.0.pom; 包含翻译后的API文档:lucene-suggest-7.7.0-javadoc-API...

    lucene-memory-6.6.0-API文档-中文版.zip

    赠送原API文档:lucene-memory-6.6.0-javadoc.jar; 赠送源代码:lucene-memory-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-memory-6.6.0.pom; 包含翻译后的API文档:lucene-memory-6.6.0-javadoc-API文档...

Global site tag (gtag.js) - Google Analytics