网上了解到Aperture框架能够实现从文件系统中抽取数据,Aperture的介绍如下:
Aperture这个Java框架能够从各种各样的资料系统(如:文件系统、Web站点、IMAP和Outlook邮箱)或存在这些系统中的文件(如:文档、图片)爬取和搜索其中的全文本内容与元数据。它当前支持的文件格式如下:
- Plain text
- HTML, XHTML
- XML
- PDF (Portable Document Format)
- RTF (Rich Text Format)
- Microsoft Office: Word, Excel, Powerpoint, Visio, Publisher
- Microsoft Works
- OpenOffice 1.x: Writer, Calc, Impress, Draw
- StarOffice 6.x - 7.x+: Writer, Calc, Impress, Draw
- OpenDocument (OpenOffice 2.x, StarOffice 8.x)
- Corel WordPerfect, Quattro, Presentations
- Emails (.eml files)
Aperture当前版本为1.6.0,它的wiki地址http://aperture.wiki.sourceforge.net/
svn地址 https://aperture.svn.sourceforge.net/svnroot/aperture/aperture/trunk/
a 首先安装svn sudo apt-get install subversion
b 在workspace目录建立aperture目录
c 进入当前目录 cd workspace/aperture/
d 运行命令 svn co https://aperture.svn.sourceforge.net/svnroot/aperture/aperture/trunk/
e 运行命令mvn eclipse:eclipse
f 打开eclipse,导入该项目
开发人员最关心的是怎么利用Aperture框架的API抽取文件的内容,下面本人采用maven管理的方式写一个demo
首先在eclipse中新建maven项目,在pom.xml文件加入Aperture相关依赖的jar文件,本人的配置如下
<repositories> <repository> <id>aperture-repo</id> <url>http://aperture.sourceforge.net/maven/</url> <name>Aperture Maven Repository</name> </repository> </repositories> <dependencies> <dependency> <groupId>org.semanticdesktop.aperture</groupId> <artifactId>aperture-core</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>org.semanticdesktop.aperture</groupId> <artifactId>aperture-runtime-optional</artifactId> <version>1.6.0</version> <type>pom</type> </dependency> </dependencies>
需要注意的是这里需要额外配置maven仓库地址,在maven的中央仓库不存在相关的依赖jar文件;另外如果上面仓库不能访问,还需要配置代理服务器(在${m2_home}/conf/settings.xml文件中配置)。此时我们就可以看到自动下载的依赖jar文件:
下面创建Crawler类,用于获取web的文本数据
public class Crawler { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub Crawler crawler=new Crawler(); System.out.println(crawler.extract("http://news.sina.com.cn/s/2013-06-07/044127337162.shtml")); } public String extract(String url) throws Exception { DataObject dao = new HttpAccessor().getDataObject(url, null, null, new RDFContainerFactoryImpl()); if (dao instanceof FileDataObject) { FileDataObject fdo = ((FileDataObject)dao); //return IOUtils.toString(fdo.getContent(), "utf-8"); //Charset.forName("utf-8") new HtmlExtractor().extract(fdo.getID(), fdo.getContent(), null, null, fdo.getMetadata()); return fdo.getMetadata().getString(NIE.plainTextContent); } else { return null; } } }
运行该class的main方法,即可以看到到输出当前url的文本内容
---------------------------------------------------------------------------
本系列WEB数据挖掘系本人原创
作者 博客园 刺猬的温驯
本文链接 http://www.cnblogs.com/chenying99/archive/2013/06/07/3123152.html
本文版权归作者所有,未经作者同意,严禁转载及用作商业传播,否则将追究法律责任。