Toxy新手教程

Toxy新手教程

官方网站:http://toxy.codeplex.com

Toxy是干嘛用的?它是.NET平台上的文件抽取框架,主要解决各种格式的内容抽取问题,比如pdf, doc, docx, xls, xlsx等,尽管听上去支持了很多格式,但它的使用却是极其方便的,因为Toxy把复杂的抽取流程透明化,Toxy的用户根本不用知道内容是怎么抽出来的,这就是Toxy的重要意义。

另外Toxy的一大目标是取代IFilter成为跨平台.NET数据抽取解决方案,即支持Linux上的Mono。目前所有的测试用例都可以跑在Mono上,但是有少数没有过,正在逐步改进。

从另一个层面讲,Toxy能将文件数据变成统一的结构化数据。目前Toxy支持的结构有

string – 文本结构

ToxyDom – Dom结构

ToxySpreadsheet – 类似Excel的表单结构

ToxyDocument – 类似Word的描述性文本结构

ToxyEmail – 邮件结构,包括收件人、发件人、邮件内容、附件等

ToxyBusinessCard – 名片结构

ToxyMetadata – 元数据结构,主要包含文件的属性信息,比如作者、标题、照片大小、分辨率等。

Toxy目前主要支持的文件格式及能抽取的内容

此表更新至Toxy 1.4版本。

文件格式

支持抽取的结构化对象(抽取结果的类型)

txt

string

xml

ToxyDom

csv

string, ToxySpreadsheet

rtf

string

pdf

string, ToxyDocument

htm, html

string, ToxyDom

vcf

string, ToxyBusinessCard

zip

string

mp3, ape, wav, flac, aif

ToxyMetadata

jpeg, jpg, gif, tiff, png

ToxyMetadata

eml

string, ToxyEmail

cnm

ToxyEmail

xls, xlsx

string, ToxySpreadsheet, ToxyMetadata

ppt, pptx

ToxyMetadata

doc, docx

string, ToxyDocument, ToxyMetadata

.vsd, .pub, .shw, .sldprt, pubx, vsdx

ToxyMetadata

如何使用Toxy

Toxy的使用真的是极其简单,这里一点都不夸张,请看下面的例子:

1234

ParserContext context = new ParserContext("test.xlsx");ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);ToxySpreadsheet ss = parser.Parse();//处理抽取出来的数据

这里的ToxySpreadsheet实例ss就是抽取出来的Excel数据,你可以直接用。ParserContext负责描述抽取上下文,告知Toxy要抽取的文件的路径,以及相关参数。ParserFactory是工厂模式类,负责所有解析器的实例化工作,它会根据传入文件的扩展名自动寻找合适的解析器。

下面展示一下PDF文档的抽取代码,一样极其简单:

123

string path = TestDataSample.GetPdfPath("Sample1.PDF");var parser = new PDFTextParser(new ParserContext(path));string result = parser.Parse();

这里返回的是string,也就是把PDF文档的内容直接抽取到string中,通常这种代码lucene.NET这样的搜索引擎用的比较多。

再来个ToxyMetadata的抽取例子:

1234

string path = Path.GetFullPath(TestDataSample.GetOLE2Path("TestEditTime.doc"));ParserContext context = new ParserContext(path);IMetadataParser parser = ParserFactory.CreateMetadata(context);ToxyMetadata x = parser.Parse();

这里抽取的是doc文件的元数据信息,比如文件由什么应用程序创建(并非一定是Word),作者、标题、公司等信息。

只要是文件属性中详细信息列出来的东西,理论上都可以抽取出来。

Toxy解析器的抽取参数

Toxy的解析器不仅提供基本的抽取功能,同时也支持对抽取内容进行选择,这是通过ParserContext的Properties实现的。

下面举一个Excel的抽取参数的例子:

12345678

ParserContext context = new ParserContext(TestDataSample.GetExcelPath(filename));ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);ToxySpreadsheet ss = parser.Parse();//抽取表的页头parser.Context.Properties.Add("ExtractSheetHeader", "1");//抽取表的页脚parser.Context.Properties.Add("ExtractSheetFooter", "1");ToxySpreadsheet ss2 = parser.Parse();

这里的ExtractSheetHeader和ExtractSheetFooter是抽取器指定的参数,拼写不要出错,否则无效,后面的1表示开启,当然如果你喜欢,你也可以用on或者true,解析器能自动识别出这3种表示true的方式,如果想表示false,你可以用0, off或者false表示。

另外SpreadsheetParser还支持是否填充空白单元格(FillBlankCells)、显示公式结果(ShowCalculatedResult)、包含批注(IncludesComments)等操作,有兴趣的可以玩玩。

当然每个抽取器能够使用的参数是不一样的,本文就不详细一一列举了,在以后的文章中,我们会详细列举每个抽取器的参数及对应抽取内容。

Toxy高级扩展功能

Toxy除了提供基础的抽取功能,也提供一些高级的对象转换服务,比如ToxySpreadsheet转DataSet,可以直接把Excel的数据转换成DataSet,方便调用和处理。代码超级简单,如下所示:

1234

ParserContext c=new ParserContext(@"c:employee.xls");var parser=ParserFactory.CreateSpreadsheet(c);var spreadsheet= parser.Parse();DataSet ds = spreadsheet.ToDataSet();

就这么4行代码,是不是超级爽呀!另外,ToxySpreadsheet的子结构ToxyTable支持ToDataTable操作,用法也是类似的,直接调用即可。

Toxy功能展望

Toxy 1.x的目标是支持足够多的文件格式,并转换成统一的结构进行抽取。

而Toxy 2.x-3.x的目标是支持相似文件的互操作(相互转换),例如Excel转csv, Excel转html, Word转PDF等,当然这个路有点长,慢慢来。

以后.NET阵营不会被Java阵营嘲笑说连个像样的抽取框架都没有了,Java阵营有tika,我们.NET有Toxy,oh, yeah!

https://github.com/tonyqus/toxy

http://toxy.codeplex.com/releases

原文发布于微信公众号 - 我为Net狂(dotNetCrazy)

原文发表时间:2015-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

业界难题-“跨库分页”的四种方案

一、需求缘起 分页需求 互联网很多业务都有分页拉取数据的需求,例如: (1)微信消息过多时,拉取第N页消息 (2)京东下单过多时,拉取第N页订单 (3)浏览58...

7225
来自专栏吉浦迅科技

在cuda的核函数中可以按地址调用普通变量么?

请问在cuda的核函数中可以按地址调用普通变量么? GPU世界论坛 bbs.gpuworld.cn Hi, 楼主, 完全无问题,从Fermi起引入卡内统...

3787
来自专栏彭湖湾的编程世界

【mock】后端不来过夜半,闲敲mock落灯花 (mockjs+Vuex+Vue实战)

mock的由来【假】 赵师秀:南宋时期的一位前端工程师 诗词背景:在一个梅雨纷纷的夜晚,正处于项目编码阶段,书童却带来消息:写后端的李秀才在几个时辰前就赶往临安...

26311
来自专栏点滴积累

geotrellis使用(三)geotrellis数据处理过程分析

之前简单介绍了geotrellis的工作过程以及一个简单的demo,最近在此demo的基础上实现了SRTM DEM数据的实时分析以及高程实时处理,下面我就以我实...

6096
来自专栏mukekeheart的iOS之旅

MySQL学习笔记(一)

一、MySQL基础知识 MySQL 是一个真正的多用户、多线程 SQL 数据库服务器。 SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL...

2498
来自专栏拂晓风起

cocos2d-js 越来越慢的定时器schedule 制作不变慢的定时器

1274
来自专栏大数据文摘

GitHub排名前20的Pandas, NumPy 和SciPy函数

2557
来自专栏Python中文社区

Python量子力学计算模拟以及数据可视化

專 欄 ❈Pytlab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,...

8159
来自专栏颇忒脱的技术博客

面向程序员的网络基本知识 - 子网分割

本系列文章旨在向程序员分享一些网络基本知识,让程序员具备基本的网络常识,以便与网络工程师沟通。本系列文章不会涉及如何组建网络、如何配置交换机/路由器等硬件相关的...

1223
来自专栏NetCore

Visual C#.Net网络程序开发-Tcp篇(3) 祥细内容:

综合运用上面的知识,下面的实例实现了简单的网络通讯-双机互连,针对客户端和服务端分别编制了应用程序。客户端创建到服务端的连接,向远程主机发送连接请求连接信号,并...

23010

扫码关注云+社区

领取腾讯云代金券