Neuzilla出品

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

QQ群:297128022

官方微信公众号:

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的使用真的是极其简单,这里一点都不夸张,请看下面的例子:

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

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

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

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

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

再来个ToxyMetadata的抽取例子:

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的抽取参数的例子:

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,方便调用和处理。代码超级简单,如下所示:

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!

Toxy新手指南的更多相关文章

  1. Markdown 新手指南

    Markdown 新手指南   「简书」作为一款「写作软件」在诞生之初就支持了 Markdown,Markdown 是一种「电子邮件」风格的「标记语言」,我们强烈推荐所有写作者学习和掌握该语言.为什么 ...

  2. 原创教程:《metasploit新手指南》介绍及下载

    原创教程:<metasploit新手指南>介绍及下载 1.1 作者简介 这份教程并不是“玄魂工作室”原创,但是我还是要力推给大家.相比那些一连几年都在问“我怎么才能入门”的人而言,我们更欣 ...

  3. 为知笔记 Markdown 新手指南

    为知笔记 Markdown 新手指南 http://www.wiz.cn/feature-markdown.html 时序图,流程图详细流程图语法 http://adrai.github.io/flo ...

  4. MVC新手指南

    MVC新手指南 2010-04-06 09:54:23 18839 次阅读 0 条评论   本文感谢东西提供 模型-视图-控制器(MVC)可能是近年来网络编程圈子里最常被提及的模式之一.目前与网络应用 ...

  5. grub4dos新手指南-2

    Grub4dos 新手指南 一.GRUB4DOS的配置文件Grub4dos 有三个文件,grldr.grldr.mbr和menu.lst,配置文件是menu.lst,和GRUB一样.该文件一般放在和启 ...

  6. 卷积神经网络(CNN)新手指南 1

    http://blog.csdn.net/real_myth/article/details/52273930 卷积神经网络(CNN)新手指南 2016-07-29 18:22 Blake 1条评论 ...

  7. java 新手指南

    Java新手指南 不小心走上了一条不归路的我 因为对可视化感兴趣,然后学了MFC,发现MFC好麻烦啊,不如开发APP吧,刚学开发APP,艹,居然是用java做开发,那只好学java了,,呜呜,不知道什 ...

  8. elastic-job 新手指南&官网指南

    elastic-job 新手指南 Elastic-Job——分布式定时任务框架 官网帮助文档

  9. UX基础 - OmniGraffle新手指南

    原文地址:http://beforweb.com/node/202,大半夜找到,作为使用手册 我发现一事儿,就是最近这些年,每到入职一个新公司的时候,听得东西往往会比多数时候听得更重更金属些,此时以S ...

随机推荐

  1. SQL Server(五)——常用函数

    1.数学函数:操作一个数据,返回一个结果 --取上限ceiling select code,name,ceiling(price) from car ; --取下限 floor select floo ...

  2. 【故障处理】ORA-28040: No matching authentication protocol

    [故障处理]ORA-28040: No matching authentication protocol 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者 ...

  3. SQL Server调优系列基础篇

    前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...

  4. 学习myBatis - 如何配置myBatis

    这篇文章主要学习如何配置myBatis. 要学习新东西要讲究方法,要从三个层面去理解它:它是什么(what),为什么要学它(why),怎么用它(how).有了学习方法学习的效率才高. 1.myBati ...

  5. Activity中使用Intent实现页面跳转与参数的传递(转)

    新建一个FirstAvtivity.java package com.zhuguangwei; import android.app.Activity; import android.content. ...

  6. 通过SecureCRT访问亚马逊Amazon EC2主机

    亚马逊推出了免费的云主机服务器 Amazon EC2,它是通过安全密钥来访问主机的. 问题是下载的密钥在SecureCRT 上无法直接使用,需要转换. 下面的方法可以在自己的linux主机上生成sec ...

  7. golang和vim-go安装配置

    一.Golang安装 1.下载golang安装包http://golangtc.com/download,我这里下载的是go1.6rc2.linux-amd64.tar.gz. 2.解压到安装目录,我 ...

  8. ImageMagick Remote Command Execute

    CVE ID: CVE-2016-3714 我挺纠结应该用中文写博客还是应该用英文写博客.英文吧作用挺明显的,可以锻炼自己的英语表达能力,但是可能会阻碍和一些英文不好的朋友交流. It's upset ...

  9. 【CSS】使用CSS选择器

    CCS选择器的作用是找出某类元素.以便使我们使用style元素或者外部样式表对这类元素设置样式. 1.使用CSS基本选择器 有些选择器使用起来非常简单,我们把这部分选择器称为基本选择器(basic s ...

  10. Gprinter热敏打印机光栅位图点阵数据解析工具

    最近参与的项目有一个需求,解析佳博热敏打印机的光栅位图点阵数据并保存为图片文件.数据是通过Bus Hound抓取的,如下图所示. 其中1b 40为初始化打印机的指令,对应的ASCII码为ESC @,1 ...