`
gezhonglei2007
  • 浏览: 2037 次
文章分类
社区版块
存档分类
最新评论

Tika

 
阅读更多

1. Tika类

(1)tika类的基本用法

  • detect:获取文档格式String

detect(File | String | URL | InputStream)

  • parse:获取ReaderLuceneField取值的参数,提供Reader是用于解决字符串过大的问题)

parse(File | String | URL | InputStream);

parse(InputStream inputStream, Metadata metadata);

  • parseToString:获取全文StringsetMaxStringLength(int)是对此方法获取全文长度的限制)

parseToString(File | URL | InputStream);

parseToString(InputStream, Metadata metadata);

(2)Tika的构成

ParserAutoDetectorParser,是一个Parser的组合(CompositeParser)ParserContext只在Parser.parser()处使用。

DetectorDefaultDetector,是一个Detector的组合(CompositeDetector)

(3)TikaConfig

CompositeParser

DetectorDefaultDetector(也是CompositeDector的子类)CompositeDetector

MimeTypes:可以获取所需的Mime类型

2.文件格式诊断

只有确定了文件格式,才能找到正确的工具读取文件的内容。文件格式表示的方式是以Media typeMIME)。

(1)判断文件格式的方式:

Filename:从文件名的文件扩展名中获取文件格式。一般不可信,它可以被任意改动;或者,根本就没有扩展名。

Content type:某些与文档相关的外部信息,如HTML的请求头信息。但此方式做为文件格式的判断方式同filename一样,仍然没有保证。

Magic bytes:文件内部某些特征字符。除了找到文件格式外,还需要找到charcter encoding

(2)判断character encoding方式:

BOM(byte order mark)标记:文档最前面的几个标识字节。

字节频率:也可用于判断文件名。从文档的前几kb中查看不同字节的出现频率。

统计:最终的办法(迫不得已的办法)。

还有其它一些与文件格式的相应特征,可以用于判断。像xml,ole等格式。

综合试探法:将前面提到的各种方法进行判断。

3. Parser接口

void parse(InputStreamstream,ContentHandlerhandler,Metadatametadata,ParseContextcontext)throws IOException, SAXException, TikaException



InputStream文档输入原始 字节流。它不会在此方法中关闭InputStream

ParserContext解析处理的上下文。此参数用于用户需要定制解析过程时使用。如何控制?它内部一个Map,Map保存接口(class)与其实例的所组成的键值对。这些接口(class)只能是在Parser中用于解析文档的所需接口才会起作用。

ContentHandlerXHTML SAX事件处理器。将输入文档的结构化信息以XHTML格式写入到此Handler

Metadata文档元数据。既是输入参数,也是输出参数。作输入参数时,能够有助于解析器更好地理解文档的格式。

4.选择解析器Parser

(1)确定只用一种文档格式(以Html格式为例)

Parser parser = new HtmlParser();

parser.parse(stream, handler, metadata, context);

(2)确定使用多种文档格式中的某一格式

Map<MediaType, Parser> parsersByType = new HashMap<MediaType, Parser>();

parsersByType.put(MediaType.parse("text/html"), new HtmlParser());

parsersByType.put(MediaType.parse("application/xml"), new XMLParser());

CompositeParserparser = newCompositeParser(); //Parser的集合

parser.setParsers(parsersByType);

parser.setFallback(new TXTParser());

Metadata metadata = new Metadata();

metadata.set(Metadata.CONTENT_TYPE, "text/html");

parser.parse(stream, handler, metadata, context);

(3)不确定文档格式

Parser parser = newAutoDetectParser();

parser.parse(stream, handler, metadata, context);



5. URL、File=>InputStream

1File-->InputStream

InputStream stream = new FileInputStream(newFile(filename));

2Url --> InputStream

InputStream stream =new GZIPInputStream(newURL(address).openStream());

3File --> Url(在此主题中,一般不用

URL uri = new File(filename).toURI().toURL();

4TikaInputStream——用于简化不同格式使用的多种嵌套流。

获取TikaInputStream:重载的get方法

[static]get(InputStream) //一般用于parser内部,将标准的InputStream转换成TikaInputStream

[static]get(byte[], Metadata?)

[static] get(File, Metadata?)

[static] get(URI, Metadata?)

[static] get(URL, Metadata?)

[static] get(Blob, Metadata?)

6. Tika的语言诊断方法

tika的语言诊断方法,不支持中文。它是以不同拉丁语言中字母出现频率的差异来判断。所以,当你的样本中的文字太小,语言判断失误率超高。




7.ContentHandler

(1)默认使用BodyContentHandler

(2)常用的Contenthandler

BodyContentHandler:用于处理XHTML输出内容的<body>部分,将它写入Writer

OutputStreamBuffer中,并将它重定向其它ContentHandler

LinkContentHandler:处理XHTML输出的所有<a href="……">

TeeContentHandler:能用于多个工具并行处理parser的输出。

ProfilingHandler:用于语言的诊断。

[例如]

LinkContentHandler linkCollector = new LinkContentHandler();

OutputStream output = new FileOutputStream(new File(filename));

ContentHandler handler = new TeeContentHandler(new BodyContentHandler(output),

linkCollector); //linkCollector用来收集文档中所有的链接,可用于爬虫。

parser.parse(stream, handler, metadata, context);

8.元数据的获取

(1)元数据是的有用的文档内容总结信息。元数据标准分为两种:一般元数据标准(general metadata standars)和特定内容元数据标准(content-special metadata standars)

(2)general metadata适用于所有已知的文件类型。

(3)content-special metadata标准是通过与特定的文件类型相关的属性、关系定义的。




(4)Metadata是多种元数据接口的实现类,以静态成员变量的形式包含以上所有元数据标准的属性名。即使用户没有填写元数据,某些文档也会存储其默认的元数据;但实际上我们需要是用户键入的元信息,而不需要这些无意义的默认值。因此,Parser在解析文档获取Metadata时,已经做了相应的处理,不保留这些默认信息的元数据,而只存用户键入的元数据信息。

9.另外:

(1)Tika可以读取出java编译后的class文件的内容,但是内容与原Java文件有差别,如方法只有声明没有实现、没有import语句,格式化后用专门的方法static void <clinit>()作为静态初始化……等。

(2)Tika读取的jar文件,读取class文件,某些内容出来时是乱码(问号)。


参考资料:《Tika in action》

分享到:
评论

相关推荐

    tika-python绑定到 Apache Tika REST 服务

    tika-python 绑定到 Apache Tika REST 服务 Python binding to the Apache Tika REST services Apache Tika 库的 Python 端口,可使用 Tika REST 服务器使 Tika 可用。这使得 Apache Tika 可作为 Python 库使用,可...

    tika-core-1.22.jar_tika_

    Apache Tika本产品包括在以下位置开发的软件Apache软件基金会。版权所有1993-2010大学大气研究公司/ Unidata该软件包含源自UCAR / Unidata的NetCDF库的代码。Tika服务器组件使用CDDL许可的依赖项

    tika提取文本内容

    tika 工程 简便获取文本的java工具

    tika读取文件专用包

    tika读取文件所用jar包,包含各种文件类型所用jar

    apache tika jar包

    Apache Tika 利用现有的解析类库,从不同格式的文档中(例如HTML, PDF, Doc),侦测和提取出元数据和结构化内容。  功能包括:  侦测文档的类型,字符编码,语言,等其他现有文档的属性。  提取结构化的文字内容。...

    tika 1.0最新版本

    tika最新版本,tika-app-1.0.jar,提取office和pdf文档内容

    tika_1.10_API (CHM格式)

    Apache Tika 利用现有的解析类库,从不同格式的文档中(例如HTML, PDF, Doc),侦测和提取出元数据和结构化内容。 功能包括: 侦测文档的类型,字符编码,语言,等其他现有文档的属性。 提取结构化的文字内容。 该...

    tika+lucene完整jar包

    tika+lucene完整jar包:tika-app-1.20.jar、lucene-7.7.1

    tika-0.5 jar包

    下载Apache的tika项目时发现网上没有现成的tika的jar文件,只能自己编译一个了。可能大家也会遇到这个问题。所以将编译好的jar包传上来于大家分享。其中包含了tika-app-0.5.jar,tika-core-0.5.jar,tika-parsers-...

    tika.jar包

    可直接通过java -jar tika.jar运行该jar包 查看我们解析得到文本的结果

    tika0.5基本jar包

    使用tika0.5提取内容的基本的jar包。

    apache中的tika包

    lucene's tika可以直接去网站下载噢。

    Tika.in.Action.pdf

    Tika.in.Action.pdf

    tika jar包

    tika读取文件所用jar包,tika-core-1.5.jar和tika-parsers-1.5.jar

    tika-app-1.16.jar

    tika-app-1.16,java文档内容提取工具jar包,可提取office文档内容

    tika-app-1.8

    最新tika1.8,可以帮助lucene的开发,提取文档的内容

    apache-tika-0.8-src.jar

    apache-tika-0.8-src.jar 源码

    apache-tika-1.0-src.zip

    apache-tika-1.0-src.zip,tika 1.0版本 源码包,看孔浩的搜索引擎视频用到的。

    Apache Tika 1.1 所需jar包

    Apache Tika 1.1 所需要的jar包,方便不想用maven的同学. 此压缩包内是核心jar包,依据http://tika.apache.org/1.1/gettingstarted.html 中Using Tika in an Ant project章节列出的 classpath 找齐 部分版本比文章中...

    Tika1.0jar包和源码

    Tika1.0jar包和源码 Lucene从各种文件类型中提取文字信息的工具

Global site tag (gtag.js) - Google Analytics