一、快速入门

1、Tika是一个用于文本解释的框架,其本身并不提供任何的库用于解释文本,而是调用各种各样的库,如POI,PDFBox等。

使用Tika,可以提取文件中的作者、标题、创建时间、正文等内容,相比于java.io自带的一些功能(如FileInputStream,FIleReader,Scanner等):

(1)若文档为纯文本,如txt,html,java文件等,则二者对于文件内容的提取基本无差别,都可将内容呈现出来。

(2)若文档为富文本,如office,pdf等,使用java.io直接读取内容会得到一串乱码,而需要通过种种工具去提取正文内容,如PDFBox提取PDF文件,POI提取office文件等。

TIka已将各种工具作了统一封装,形成统一的API,用于提取文本正文。



但注意:解释文本

上述步骤只是将正文内容提取了出来,如将word文档、Html文档等的正文提取出来,但未对文档正文的内容进行解释,此时需要用到其它的工具如:

(1)DOM4J用于提取XML正文中的内容,如某个元素或者属性的值。

(2)HtmlPaser用于提取HTML正文中的内容,也是提取无素或者属性的值,比如提取文中的超链接等。

Tika是否已经完成此功能的封装还不确认,以后再研究。

2、使用GUI界面解释文本

(1)进入Tika所有的目录,运行以下命令:

java -jar "tika-app-1.5 (1).jar" -g

(2)Tika的图形界面被打开,然后找开File-openURL:

(3)点击确认后,即返回解释结果

默认情况下显示的是文本的元信息

(4)可以通过view菜单中的选项,分别查看 metadata, formatted text, plain text, main content, stuctured text等信息。

3、调用API解释文件

package com.ljh.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException; public class TikaBasicUtil { public String fileToTxt(File f) {
//1、创建一个parser
Parser parser = new AutoDetectParser();
InputStream is = null;
try {
Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());
is = new FileInputStream(f);
ContentHandler handler = new BodyContentHandler();
ParseContext context = new ParseContext();
context.set(Parser.class,parser);
//2、执行parser的parse()方法。
parser.parse(is,handler, metadata,context);
for(String name:metadata.names()) {
System.out.println(name+":"+metadata.get(name));
}
return handler.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (TikaException e) {
e.printStackTrace();
} finally {
try {
if(is!=null) is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
} }

测试程序如下:

package com.ljh.test;

import java.io.File;

import org.junit.Test;

public class TikaBasicUtilTest {

	@Test
public void test() {
TikaBasicUtil tbu = new TikaBasicUtil();
System.out.println(tbu.fileToTxt(new File("D:/G组-C罗压哨助攻扳平 葡萄牙2-2美国保晋级希望.docx")));
} }

输出结果如下:

cp:revision:3

meta:last-author:lujinhong

Last-Author:lujinhong

meta:save-date:2014-06-23T04:24:00Z

Application-Name:Microsoft Office Word

dcterms:created:2014-06-23T04:23:00Z

Author:lujinhong

Application-Version:15.0000

Character-Count-With-Spaces:1188

date:2014-06-23T04:24:00Z

Total-Time:1

extended-properties:Template:Normal.dotm

meta:line-count:8

creator:lujinhong

publisher:

Word-Count:177

meta:paragraph-count:2

Creation-Date:2014-06-23T04:23:00Z

extended-properties:AppVersion:15.0000

meta:author:lujinhong

Line-Count:8

extended-properties:Application:Microsoft Office Word

resourceName:G组-C罗压哨助攻扳平 葡萄牙2-2美国保晋级希望.docx

Paragraph-Count:2

Last-Save-Date:2014-06-23T04:24:00Z

Revision-Number:3

meta:creation-date:2014-06-23T04:23:00Z

dcterms:modified:2014-06-23T04:24:00Z

Template:Normal.dotm

Page-Count:1

meta:character-count:1013

dc:creator:lujinhong

meta:word-count:177

Last-Modified:2014-06-23T04:24:00Z

extended-properties:Company:

modified:2014-06-23T04:24:00Z

xmpTPg:NPages:1

extended-properties:TotalTime:1

dc:publisher:

Character Count:1013

meta:page-count:1

meta:character-count-with-spaces:1188

Content-Type:application/vnd.openxmlformats-officedocument.wordprocessingml.document

上半时美国队开球。第5分钟,葡萄牙队率先进球,维罗索左路45度把球吊入禁区,美国后卫卡梅伦解围失误,纳尼在远门柱附近右脚抽射球门上角建功,葡萄牙1-0美国。

第9分钟,邓普西突破被断,无队友接应。第11分钟,美国长传反击,科斯塔头球解围。第12分钟,阿尔维斯铲倒约翰逊,美国队获得禁区前任意球,邓普西主罚大力攻门,球擦着横梁高出。第16分钟,葡萄牙中锋波斯蒂加受伤,被埃德换下。第18分钟,美国右路传中,邓普西禁区左肋抽射打高。

第24分钟,美国队后场断球反击,布拉德利禁区前抽射,球擦着横梁高出。第27分钟,祖西传球,邓普西禁区右肋抽射,科斯塔堵枪眼。1分钟后,布拉德利远射稍偏。第32分钟,美国反击,约翰逊远射打偏。第34分钟,维罗索远射打在后卫身上,C罗拿球被吹越位。

第35分钟,C罗远射被霍华德扑住。第40分钟,琼斯受伤,主裁判吹停比赛,进入喝水时间。第42分钟,葡萄牙反击,C罗分球,纳尼右路远射被扑出。第43分钟,葡萄牙获得禁区前任意球,C罗主罚打高。第45分钟,纳尼远射打中立柱,埃德补射被霍华德用指尖挡出。上半时结束,葡萄牙1-0美国。

下半时易边,葡萄牙队用卡瓦略换下阿尔梅达。第48分钟,卡梅伦解围打在队友被贝斯勒身上,埃德抢射打高。第55分钟,美国队错失良机,约翰逊右路下底传中,布拉德利5码处推射,科斯塔门线堵枪眼。第62分钟,葡萄牙反击,C罗禁区右肋射门打偏。

第64分钟,美国队扳平比分,角球罚出被后卫解围出禁区,琼斯外围拿球横向闪过纳尼,右脚大力抽射,球飞进球门死角,葡萄牙1-1美国。

第66分钟,葡萄牙反击,纳尼右路传中,远端梅雷莱斯抽射被门将扑出。第68分钟,葡萄牙用完第三个换人名额,瓦雷拉换下梅雷莱斯。第74分钟,纳尼突入禁区摔倒,裁判没有吹罚点球。1分钟后,琼斯滑铲放倒穆蒂尼奥,吃到黄牌。第80分钟,纳尼右路禁区前横切远射打高。

第81分钟,美国队反超比分!琼斯中路分球,叶德林右路下底传中,布拉德利12码处推射打在后卫身上,祖西左路拿球传中,邓普西用胸口把球撞进空门,美国2-1葡萄牙。

第86分钟,维罗索直塞,C罗在越位位置完成射门。葡萄牙右路起球,C罗头球攻门顶偏。第93分钟,葡萄牙左路起球,C罗头球顶偏。第95分钟,C罗右路传中,瓦雷拉头冲顶破门,2-2!全场结束,美国2-2葡萄牙。

葡萄牙(433):22-贝托/21-佩雷拉、2-阿尔维斯、13-科斯塔、19-A-阿尔梅达(46'卡瓦略)/8-穆蒂尼奥、4-维罗索、16-梅雷莱斯(68'瓦雷拉)/17-纳尼、23-波斯蒂加(16'埃德)、7-C罗

美国(4231):1-霍华德/7-比斯利、5-贝斯勒、20-卡梅伦、23-F-约翰逊/15-贝克曼、13-琼斯/19-祖西(91'冈萨雷斯)、11-贝多亚(72'叶德林)、4-布拉德利/8-邓普西(87'沃多洛斯基)

【Tika基础教程之一】Tika基础教程的更多相关文章

  1. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  2. Android Studio系列教程四--Gradle基础

    Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...

  3. Windows 8实例教程系列 - 数据绑定基础实例

    原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...

  4. Nmap扫描教程之网络基础服务DHCP服务类

    Nmap扫描教程之网络基础服务DHCP服务类 Nmap网络基础服务 网络基础服务是网络正常工作的基石,常见的网络基础服务包括DHCP服务和DNS服务.其中,DHCP服务用来为计算机动态分配IP地址:D ...

  5. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  6. Java基础教程:泛型基础

    Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...

  7. Java基础教程:多线程基础(1)——基础操作

    Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...

  8. Java基础教程:反射基础

    Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射. 反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时 ...

  9. 零基础快速入门SpringBoot2.0教程 (二)

    一.SpringBoot2.x使用Dev-tool热部署 简介:介绍什么是热部署,使用springboot结合dev-tool工具,快速加载启动应用 官方地址:https://docs.spring. ...

  10. Java基础教程:多线程基础(4)——Lock的使用

    Java基础教程:多线程基础(4)——Lock的使用 快速开始 Java 5中Lock对象的也能实现同步的效果,而且在使用上更加方便. 本节重点的2个知识点是:ReentrantLock类的使用和Re ...

随机推荐

  1. TexturePacker文件的反向解析-TextureUnpacker

    最近在使用cocos2d-x做开发,其中会用到TexturePacker工具打包纹理文件,但是有时候想从打包好的.plist和.png大图文件反向生成原始的小图文件,TexturePacker好像没有 ...

  2. toJOSN()方法

    toJSON方法可以作为函数过滤器的补充.序列化的顺序如下: (1)如果存在toJSON方法而且能够通过它取得有效值,则调用该方法. (2)如果提供了第二个参数,应用该函数过滤器.传入过滤器的值是步骤 ...

  3. symfony配置

    1.获取配置的一些变量 在HttpFoundation/Kernel.php 文件里面有函数 getKernelParameters ()可以获取一些配置变量的数组.有需要可以从那里获取. 2.配置s ...

  4. sublime快捷键收藏

    快速查找(ctrl + P)输入@+函数名可以快速找到函数.输入#+文本可以快速进行文件内文本匹配.3. 多行游标功能(ctrl + D,非常实用)如何将文件中的某个单词更改为另一个?方法一:利用查找 ...

  5. mysql之7xtrabackup

    目录: 1.前言 2.环境 3.开始备份 3.1.innobackupex介绍 3.2.一次完全备份 3.3.一次完全恢复 3.4.增量备份 3.5.增量备份的恢复过程 1.前言: Xtrabacku ...

  6. javascrit字符串截取

    昨天遇见一个问题就是一个地址后面加参数第一次是需要添加参数,以后每次点击按钮的时候是替换如果不进行处理的话如果页面不刷新,地址会不断的添加越来越长,所以

  7. Hdu1089

    #include <stdio.h> int main() { int a,b; while(scanf("%d %d",&a,&b)!=EOF){ p ...

  8. js智能提示代码

    <reference path = "../../../Scripts/jQuery-1.4.1.js"/>

  9. GitLab CI

    GitLab CI持续集成配置方案   目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 Git ...

  10. 使用ARM模板部署自动扩展的Linux VMSS(2)

    12.准备完了模板文件,我们使用Powershell来创建VMSS for Linux的自动扩展集合,首先登陆到Azure中国的ARM账号: Login-AzureRmAccount -Environ ...