Toxy新手指南
Neuzilla出品
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 |
| 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新手指南的更多相关文章
- Markdown 新手指南
Markdown 新手指南 「简书」作为一款「写作软件」在诞生之初就支持了 Markdown,Markdown 是一种「电子邮件」风格的「标记语言」,我们强烈推荐所有写作者学习和掌握该语言.为什么 ...
- 原创教程:《metasploit新手指南》介绍及下载
原创教程:<metasploit新手指南>介绍及下载 1.1 作者简介 这份教程并不是“玄魂工作室”原创,但是我还是要力推给大家.相比那些一连几年都在问“我怎么才能入门”的人而言,我们更欣 ...
- 为知笔记 Markdown 新手指南
为知笔记 Markdown 新手指南 http://www.wiz.cn/feature-markdown.html 时序图,流程图详细流程图语法 http://adrai.github.io/flo ...
- MVC新手指南
MVC新手指南 2010-04-06 09:54:23 18839 次阅读 0 条评论 本文感谢东西提供 模型-视图-控制器(MVC)可能是近年来网络编程圈子里最常被提及的模式之一.目前与网络应用 ...
- grub4dos新手指南-2
Grub4dos 新手指南 一.GRUB4DOS的配置文件Grub4dos 有三个文件,grldr.grldr.mbr和menu.lst,配置文件是menu.lst,和GRUB一样.该文件一般放在和启 ...
- 卷积神经网络(CNN)新手指南 1
http://blog.csdn.net/real_myth/article/details/52273930 卷积神经网络(CNN)新手指南 2016-07-29 18:22 Blake 1条评论 ...
- java 新手指南
Java新手指南 不小心走上了一条不归路的我 因为对可视化感兴趣,然后学了MFC,发现MFC好麻烦啊,不如开发APP吧,刚学开发APP,艹,居然是用java做开发,那只好学java了,,呜呜,不知道什 ...
- elastic-job 新手指南&官网指南
elastic-job 新手指南 Elastic-Job——分布式定时任务框架 官网帮助文档
- UX基础 - OmniGraffle新手指南
原文地址:http://beforweb.com/node/202,大半夜找到,作为使用手册 我发现一事儿,就是最近这些年,每到入职一个新公司的时候,听得东西往往会比多数时候听得更重更金属些,此时以S ...
随机推荐
- 简单看看ThreadPool的源码以及从中看出线程间传值的另一种方法
这几天太忙没时间写博客,今天回家就简单的看了下ThreadPool的源码,发现有一个好玩的东西,叫做”执行上下文“,拽名叫做:”ExecutionContext“. 一:ThreadPool的大概流程 ...
- Servlet/JSP-04 JSP基础
一. JSP概述 Servlet 是 Java 程序,可以在 Java 程序内部返回一段 HTML 代码(字符串形式)到浏览器,供浏览器解释展示. JSP 是一种脚本语言,在 HTML 内部通过嵌入 ...
- C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅱ部分
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- 烂泥:【转】rsync命令参数详解
本文由秀依林枫提供友情赞助,首发于烂泥行天下. rsync安装完毕后,我们可以通过rsync –help查看rysnc命令的使用.如下: 有关rsync的命令格式,在此我们就不多介绍了.如果有想了解的 ...
- 如何更改nginx网站根目录 以及解析php
nginx默认网站根目录为/usr/local/nginx/html,如果想要将它改成/data/www 需配置 vim /usr/local/nginx/conf/nginx.conf 将其中的字段 ...
- 大话设计模式C++版——原则和引言
转贴请注明转自:http://blog.csdn.net/gufeng99/article/details/45832711 读程杰的<大话设计模式>有一段时间了,将其C#版的设计模式代码 ...
- Python教程[廖雪峰],主要是实践
- 深入探讨 java.lang.ref 包
深入探讨 java.lang.ref 包 本文主要探讨了 java.lang.ref 包的使用方法,以及源码解读.并就该包在不同 JVM 上的表现进行了比较与分析.通过阅读本文,读者可以加深对 jav ...
- 虚拟机VMware怎么完全卸载干净
虚拟机VMware怎么完全卸载干净 听语音 | 浏览:19929 | 更新:2014-12-21 10:28 | 标签:虚拟机 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅高质屏和好师傅 ...
- Hibernate之组件映射
1:为什么要使用组件映射 答:建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系.以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息 ...