一、快速入门

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'沃多洛斯基)

最新文章

  1. python浅谈正则的常用方法
  2. CSS3-3D制作案例分析实战
  3. 关于HashTable的遍历方法解析
  4. Spring容器初始化过程
  5. yii2中gii外网访问的配置方法
  6. C# 反射遍历对象
  7. 投票系统 & 简易js刷票脚本
  8. Direct3D-3 四元数
  9. Android 安全性和权限
  10. android 线程池
  11. sourcetree跳过注册的方法
  12. DxPackNet 2.视频截图和捕捉帧图片
  13. Treesoft数据库管理系统使用说明
  14. Practical Lessons from Predicting Clicks on Ads at Facebook
  15. web中静态资源和动态资源的概念及区别
  16. composer require 指定版本
  17. BZOJ 3625: [Codeforces Round #250]小朋友和二叉树
  18. bootstrap File Input 多文件上传插件使用记录(二)删除原文件
  19. Android 实现 HttpClient 请求Https
  20. laravel 参数配置

热门文章

  1. OpenSSl编译
  2. PHP图片加文字水印和图片水印方法
  3. asp.net js 获取服务器控件值
  4. Js 导出Excel IE ActiveX控件
  5. vim 常用快捷键 二[转]
  6. Qt带来的是更加低廉的开发成本和学习成本,对于很多小公司而言,这种优势足以让他们获得更大的利润空间 good
  7. HttpContext请求上下文对象
  8. CircleImageView自定义圆形控件的使用
  9. java.net.SocketTimeoutException: Read timed out
  10. C语言中long类型,int类型