Toxy新手指南


Neuzilla出品

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

QQ群:297128022

官方微信公眾號:

qrcode_for_gh_d9c283aeb1a5_258

 

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),作者、標題、公司等信息。

image

只要是文件屬性中詳細信息列出來的東西,理論上都可以抽取出來。

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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM