2011-05-20 85 views
5

我想將html轉換爲純文本格式。我不想僅僅去掉標籤,我想盡可能地保留儘可能多的格式。插入<br>標籤的換行符,檢測段落並將其格式化等等。將HTML轉換爲純文本並保持結構/格式,使用ruby

輸入非常簡單,通常格式良好的html(不是整個文檔,只是一堆內容,通常沒有錨或圖像) 。

我可以將幾個正則表達式組合在一起,讓我有80%的存在,但是可能會有一些現有解決方案具有更多的智能。

回答

7

首先,不要嘗試爲此使用正則表達式。這個可能性非常好,你會想出一個脆弱/脆弱的解決方案,它會隨着HTML的變化而中斷,否則將很難管理和維護。

你可以得到一部分的方式有很迅速地用引入nokogiri解析HTML和提取文本:

require 'nokogiri' 

html = ' 
<html> 
<body> 
    <p>This is 
    some text.</p> 
    <p>This is some more text.</p> 
    <pre> 
    This is 
    preformatted 
    text. 
    </pre> 
</body> 
</html> 
' 

doc = Nokogiri::HTML(html) 
puts doc.text 

>> This is 
>> some text. 
>> This is some more text. 
>> 
>> This is 
>> preformatted 
>> text. 

這個作品被引入nokogiri將返回文本節點,它們基本上是圍繞着空白的原因標籤以及標籤中包含的文字。如果您使用tidy進行HTML前期清理,您有時可以獲得更好的輸出結果。

問題是,當您將解析器的輸出或查看HTML的任何方式與瀏覽器顯示的內容進行比較時。瀏覽器關注的是儘可能以令人滿意的方式呈現HTML,而忽略HTML可能畸形且破碎的事實。解析器的設計目的並非如此。

您可以在提取內容之前按摩HTML以刪除多餘的分行符,如"\n""\r",然後用換行符替換<br>標籤。這裏有很多問題解釋如何用別的東西代替標籤。我認爲Nokogiri site也有作爲教程之一。

如果你確實想做的對,你需要弄清楚你想要爲<li>標籤做什麼以及<ul><ol>標籤以及表格。

另一種攻擊方法是捕獲文本瀏覽器之一的輸出,如lynx。幾年前,我需要對不使用Meta-Keyword標籤的網站上的關鍵字進行文本處理,並發現了一種文本瀏覽器,可以讓我以這種方式獲取呈現的輸出。我沒有可用的源代碼,所以我無法查看它是哪一個。

相關問題