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的使用真的是极其简单,这里一点都不夸张,请看下面的例子:
1 2 3 4 | ParserContext context = new ParserContext( "test.xlsx" ); ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context); ToxySpreadsheet ss = parser.Parse(); //处理抽取出来的数据 |
这里的ToxySpreadsheet实例ss就是抽取出来的Excel数据,你可以直接用。 ParserContext负责描述抽取上下文,告知Toxy要抽取的文件的路径,以及相关参数。ParserFactory是工厂模式类,负责所有解析 器的实例化工作,它会根据传入文件的扩展名自动寻找合适的解析器。
下面展示一下PDF文档的抽取代码,一样极其简单:
1 2 3 | string path = TestDataSample.GetPdfPath( "Sample1.PDF" ); var parser = new PDFTextParser( new ParserContext(path)); string result = parser.Parse(); |
这里返回的是string,也就是把PDF文档的内容直接抽取到string中,通常这种代码lucene.NET这样的搜索引擎用的比较多。
再来个ToxyMetadata的抽取例子:
1 2 3 4 | 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的抽取参数的例子:
1 2 3 4 5 6 7 8 | 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,方便调用和处理。代码超级简单,如下所示:
1 2 3 4 | 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!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?