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;
}
分享到:
相关推荐
Lucene 支持的文档格式 - **PDF**: 通过 Apache Tika 或 PDFBox 库,Lucene 可以解析 PDF 文件内容并建立索引。 - **TXT**: 对纯文本文件,Lucene 直接读取内容进行索引。 - **Office 文件**: 包括 Word、Excel 和...
赠送原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文档:...
赠送原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文档-中文...
赠送原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文档-中文...
赠送原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...
赠送原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文档:...
赠送原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文档:...
赠送原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-...
赠送原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-...
赠送原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-...
赠送原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-...
赠送原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-...
赠送原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文档-中文...
赠送原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-...
赠送原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-...
赠送原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-...
赠送原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...
赠送原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...
赠送原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...
赠送原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文档...