前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Toxy新手教程

Toxy新手教程

作者头像
逸鹏
发布2018-04-09 11:48:45
1.5K0
发布2018-04-09 11:48:45
举报
文章被收录于专栏:逸鹏说道逸鹏说道

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我为Net狂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Toxy新手教程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档