2012-02-02 78 views
1

對於這個問題的長度抱歉,它更像是「這是可能的」而不是「我該怎麼做」。使用修改的Nokogiri解析Wikitext?

我的目標是從維基百科標記中除去純文本 - 表格,模板,格式。是否在wikitext markup(例如''bold text'')或HTML(<b>bold text</b>)中。

維基文本是自定義標籤的混合:模板{{ ... }},表{| ... |},鏈接[[ ... ]]和HTML元素。解析它是一種噩夢。你不能使用正則表達式,因爲標籤可以嵌套,並且它可以包含HTML,所以幾乎任何事情都是可能的。我想保留HTML中的一些文本(粗體文本內的東西),但其他東西如表格需要完全剝離。

我想到了,再重新考慮像引入nokogiri XML解析器,加入{{/}}以替代<x>/</x>

有誰知道Nokogiri(或另一個Ruby XML解析器)知道這是否可能,甚至是一個好主意?

我的替代方案是爲wiki標記重新使用現有的解析器WikiCloth,然後嘗試通過其他方法刪除任何剩餘的HTML。

+1

這是一種上下文無關的語言,所以libxml應該能夠解析它。我不確定您是否可以更改分析樹。大概寫你自己的解析器。 – Reactormonk 2012-02-02 11:32:43

+1

爲什麼不把它渲染爲HTML,其中包含所有標記的內容,然後使用Nokogiri來提取原始文本? – Phrogz 2012-02-03 06:08:45

+0

@Progrog我可以做到這一點,我只是希望能節省一些時間,因爲有很多文字需要解析。 – 2012-02-03 08:16:37

回答

1

這聽起來像個好主意。然而,你不可能'補丁'Nokogiri,「加入{{/}}作爲<x>/</x>的替代品。這是因爲Nokogiri解析和XPath完成的大部分工作都是由後端的libxml2完成的,並生成DOM的字符串表示。你必須修補並重新編譯libxml2(然後用新版本重建Nokogiri)......但那時我不知道Nokogiri會如何表現。

嘗試修補REXML可能會有更好的運氣,因爲它是用純Ruby編寫的。