`
tiantian911
  • 浏览: 228442 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从HTML抽取纯文本

阅读更多

spider中需要提取纯文本:

1.javax.swing.text

这种方法比较麻烦,自己写很多的callback,效率很低,效果不见得好

2.htmlparser

方便,但是不规则的htm效果太差,总是遗留大量的tag

package testlucene;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.nodes.TextNode;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;

/**
 * 演示了Html Parse的应用.
 * 
 * @author scud http://www.jscud.com
 */

public class HtmlParser {

	public static void main(String[] args) throws Exception {
		String aFile = "d:/1.html";

		String content = readTextFile(aFile, "GBK");

		// System.out.println(test1(content));

		// test2(content);
		// System.out.println("====================================");

		System.out.println(getText(content));
		// System.out.println("====================================");

		// test4(content);
		// System.out.println("====================================");

		// test5(aFile);
		// SSystem.out.println("====================================");

	}

	/**
	 * 读取文件的方式来分析内容. filePath也可以是一个Url.
	 * 
	 * @param resource
	 *            文件/Url
	 */
	public static void test5(String resource) throws Exception {
		Parser myParser = new Parser(resource);

		// 设置编码
		myParser.setEncoding("GBK");

		HtmlPage visitor = new HtmlPage(myParser);

		myParser.visitAllNodesWith(visitor);

		String textInPage = visitor.getTitle();

		System.out.println(textInPage);
	}

	/**
	 * 得到普通文本和链接的内容.
	 * 
	 * 使用了过滤条件.
	 */
	public static String getText(String content) throws ParserException {
		Parser myParser;
		NodeList nodeList = null;
		StringBuilder result = new StringBuilder();
		myParser = Parser.createParser(content, "GBK");

		NodeFilter textFilter = new NodeClassFilter(TextNode.class);
		NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);

		// 暂时不处理 meta
		// NodeFilter metaFilter = new NodeClassFilter(MetaTag.class);

		OrFilter lastFilter = new OrFilter();
		lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter });

		nodeList = myParser.parse(lastFilter);

		Node[] nodes = nodeList.toNodeArray();
		String line = "";

		for (int i = 0; i < nodes.length; i++) {
			Node anode = (Node) nodes[i];

			if (anode instanceof TextNode) {
				TextNode textnode = (TextNode) anode;
				// line = textnode.toPlainTextString().trim();
				line = textnode.getText();
			} else if (anode instanceof LinkTag) {
				LinkTag linknode = (LinkTag) anode;

				line = linknode.getLink();
				// @todo 过滤jsp标签:可以自己实现这个函数
				// line = StringFunc.replace(line, "<%.*%>", "");
			}

			if (isTrimEmpty(line))
				continue;

			// System.out.println(line);
			result.append(line);
		}

		return result.toString();
	}

	/**
	 * 读取一个文件到字符串里.
	 * 
	 * @param sFileName
	 *            文件名
	 * @param sEncode
	 *            String
	 * @return 文件内容
	 */
	public static String readTextFile(String sFileName, String sEncode) {
		StringBuffer sbStr = new StringBuffer();

		try {
			File ff = new File(sFileName);
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					ff), sEncode);
			BufferedReader ins = new BufferedReader(read);

			String dataLine = "";
			while (null != (dataLine = ins.readLine())) {
				sbStr.append(dataLine);
				sbStr.append("\r\n");
			}

			ins.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return sbStr.toString();
	}

	/**
	 * 去掉左右空格后字符串是否为空
	 * 
	 * @param astr
	 *            String
	 * @return boolean
	 */
	public static boolean isTrimEmpty(String astr) {
		if ((null == astr) || (astr.length() == 0)) {
			return true;
		}
		if (isBlank(astr.trim())) {
			return true;
		}
		return false;
	}



	/**
	 * 字符串是否为空:null或者长度为0.
	 * 
	 * @param astr
	 *            源字符串.
	 * @return boolean
	 */
	public static boolean isBlank(String astr) {
		if ((null == astr) || (astr.length() == 0)) {
			return true;
		} else {
			return false;
		}
	}

}
 

3.regex

很简单,很实用,会丢失信息,对js不太支持,不过可以与处理一下

 text = Scontent.replaceAll("<[^>]*>","");    
		
 

4.自己处理,可以用些设计模式,留待有空时做。

 

分享到:
评论

相关推荐

    中文网页文本抽取源程序

    【中文网页文本抽取源程序】是一个专为处理中文网页数据而设计的软件开发资源,它包含了一组源代码,能够帮助开发者从HTML网页中提取出有用的文本信息。这个项目是用Visual C++ 6.0(简称VC6.0)开发的,这意味着它...

    基于机器学习的网页文本抽取技术.pdf

    (2) 数据预处理,清洗HTML标签,提取纯文本;(3) 特征工程,提取文本特征,如词频、TF-IDF值等;(4) 训练模型,使用机器学习算法建立分类或回归模型;(5) 系统构建,将模型集成到Java系统中,实现实时的文本抽取功能...

    Node.js-textract从各种文件抽取文本的Node.js模块

    这个模块的出现解决了开发者在处理非纯文本格式文件时的痛点,它能够高效地从HTML、PDF、Microsoft Office文档(如DOC、DOCX、XLS、XLSX、PPTX)以及常见的图像格式(如PNG、JPG、GIF)和RTF文档中抽取文本内容。...

    Python-一个简单的库和命令行实用程序用以从HTML页面或者明文中抽取摘要

    标题中的“Python-一个简单的库和命令行实用程序用以从HTML页面或者明文中抽取摘要”揭示了这个项目是关于Python编程的一个库和命令行工具,它的主要功能是从HTML文档或纯文本中提取摘要信息。这涉及到自然语言处理...

    从HTML文件中抽取正文的简单方案.pdf

    ### 从HTML文件中抽取正文的简单方案 #### 背景介绍 随着互联网的快速发展,HTML文件成为了信息传递的主要载体之一。然而,在这些文件中,真正的内容往往被各种无关的元素如广告、布局表格、格式标记等所包围。为了...

    unmark:从Markdown中提取纯旧文本

    取消标记从Markdown中提取纯旧文本#Installation bower install unmark #用法简单如下: &lt; html &gt;&lt; head &gt; &lt; script type =" text/javascript " src =" bower_components/unmark/unmark.js " &gt; &...

    HTML 文本和链接提取

    文本提取是指从HTML文档中提取出纯文本内容,这通常涉及到忽略HTML标签,只保留标签内的文字。这个过程可以通过递归遍历DOM树,或者使用正则表达式来实现。链接提取则是找出所有`&lt;a&gt;`标签的`href`属性值,这能帮助...

    Python-PDFMiner一个用于从PDF文档中抽取信息的工具

    5. **自定义输出格式**:PDFMiner支持将解析后的信息导出为多种格式,如纯文本、XML、HTML等,这使得数据可以进一步被其他工具或系统处理。 6. **API接口**:PDFMiner提供了一套Python API,使得开发者可以轻松地...

    万金油正文抽取器体验版

    "万金油正文抽取器体验版"是一款专为新闻和博客设计的网页正文提取工具,其核心功能是基于最大文本块算法,旨在高效地从网页HTML代码中抽取出主要内容,提供用户更为清晰、干净的文章阅读体验。这款软件的开发者针对...

    tika提取文本内容

    Tika的核心功能是内容提取,这意味着它可以从不同类型的文件中抽取纯文本,这对于搜索引擎索引、数据分析、内容分析和文本挖掘等工作非常有用。以下是一些关于Tika的重要知识点: 1. **MIME类型识别**:Tika通过...

    课件文本信息加工

    4. **文本格式转换**:不同格式的文本文件有不同的用途,例如纯文本(.txt)、富文本(.rtf)、网页(.html)等。了解如何在这些格式之间进行转换,有助于适应不同的应用场景。 5. **文本处理与分析**:这包括查找...

    网页相似度计算之实词抽取

    **HTMLParser** 是一个用于解析HTML文档的工具,它可以帮助我们从HTML结构中提取出纯文本内容。通过遍历HTML标签并识别内容相关的元素(如`&lt;p&gt;`、`&lt;h1&gt;`至`&lt;h6&gt;`等),我们可以获取到网页的主要文本。同时,...

    信息抽取类StringParser说明文档

    例如,通过select()方法可以选取特定的HTML元素,getAttr()方法能获取元素的属性值,textContent()则可以获取元素内的纯文本内容。 三、使用示例 以下是一些使用StringParser的典型示例: 1. 分割字符串: ```...

    Lucene应用中Pdf文档文本数据提取方法研究

    2. **使用xpdf工具提取文本**: 使用xpdf工具包中的pdftotext命令行工具,可以将Pdf文件转换为纯文本格式。这一步骤是将二进制的Pdf文档转换成可供Lucene分析和索引的文本格式的关键。 3. **将提取的文本整合到...

    swf文本提取工具

    在描述中提到,“从swf文件中提取纯文本的”,意味着这个工具能够帮助用户将嵌入在SWF文件内的文字内容提取出来,这对于内容编辑、数据分析或者进行文本挖掘等任务非常有用。 在标签中,“Flash”是指Adobe Flash...

    cpp-网站新闻页通用的正文抽取组件

    2. **文本清洗**:对抽取的文本进行清洗,去除HTML标签、链接、特殊字符等,保留纯净的文本内容。 3. **智能分段**:通过分析文章的段落结构,自动将连续的正文内容合并成合适的段落。 4. **语义分析**:利用自然...

    基于文本挖掘的可视化竞争情报提取

    预处理步骤通常包括去除HTML标记、转换为纯文本格式、词干提取(Stemming)、停用词过滤(Stop Words Removal)等操作。这些步骤有助于减少噪音数据并提升文本挖掘的效果。 3. **文本挖掘**:这是整个系统的核心...

Global site tag (gtag.js) - Google Analytics