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. Oracle shutdown immediate遭遇ORA-24324 ORA-24323 ORA-01089

    一数据库服务器执行shutdown immediate时,遇到了下面ORA错误,如下所示: $ sqlplus / as sysdba   SQL*Plus: Release 10.2.0.4.0 - ...

  2. mysql优化案例分析

    本文总结了一些工作常见的sql优化例子,虽然比较简单,但很实用,希望对大家有所帮助.sql优化一般分为两类,一类是sql本身的优化,如何走到合适的索引,如何减少排序,减少逻辑读:另一类是sql本身没有 ...

  3. apache配置文件参数优化

    1.CentOS5.8 x86_64位 采用最小化安装,系统经过了基本优化篇2.apache版本:httpd-2.2.293.源码包存放位置:/home/oldboy/tools4.源码包编译安装位置 ...

  4. 表单和iframe的使用

    图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果.示例: 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容.示例: 网页的拼接: 在一个网络页面 ...

  5. 利用 druid 解析器解析SQL

    最近参与一个开源项目,一个功能的实现,用到了 druid 解析器来解析SQL,记录下如果使用 druid 来解析SQL,实现对SQL的拦截改写. 1. 对 insert 语句进行解析: private ...

  6. lucene分词器与搜索

    一.分词器 lucene针对不同的语言和虚伪提供了许多分词器,我们可以针对应用的不同的需求使用不同的分词器进行分词.我们需要注意的是在创建索引时使用的分词器与搜索时使用的分词器要保持一致.否则搜索的结 ...

  7. cocos之观察者模式应用实例

    观察位置: 定义宏常量位置: 添加观察者回调函数位置: 回调函数实现位置:

  8. android 关于appcompat v7出错问题与解决

    1.appcompat_v7:应用兼容包,V7说的是版本7,即android2.1,这个兼容包支持2.1版本以上系统2.最近谷歌官方将兼容jar包与某些资源文件单独拿出来建立了一个android工程, ...

  9. 在JazzyViewPager中调用其它layout布局xml并使用

    开源地址:https://github.com/jfeinstein10/JazzyViewPager 发现网上的例子使用的是直接创建的一个TextView来做的.但是实际上使用,不可能只有这一个控件 ...

  10. C# ADO.NET编写简单的图书馆管理软件

    使用软件: Microsoft SQL Server 2012 Microsoft Visual Studio 2012 本文地址: http://www.cnblogs.com/go2bed/ 参考 ...