2010-10-23 153 views
0

我使用htmlparser 1.6解析網站。解析PDF文件時出現問題

的問題是,當我解析PDF格式的網站,我在輸出文件奇怪的字符獲得像

ØÇÁÖÜ/:?ÖQØ?WÕWÏ 

這是我的代碼片段:

try { 
    parser = new Parser(); 

    if (1 < args.length) 
     filter = new TagNameFilter (args[1]); 
    else 
    { 
     filter = null; 
     parser.setFeedback (Parser.STDOUT); 
     Parser.getConnectionManager().setMonitor (parser); 
    } 

    Parser.getConnectionManager().setRedirectionProcessingEnabled (true); 
    Parser.getConnectionManager().setCookieProcessingEnabled (true); 

    // Here the pdf web site 
    parser.setResource ("http://hal.archives-ouvertes.fr" + 
     "/docs/00/16/76/78/PDF /27_Bendaoud.pdf"); 

    NodeList list = parser.parse(filter); 
    NodeIterator i = list.elements(); 

    while (i.hasMoreNodes()) 
     processMyNodes(i.nextNode()); 
} 
catch (EncodingChangeException ece) { 
    try { 
     parser.reset(); 
     NodeList list = parser.parse(filter); 

     for (NodeIterator i = list.elements(); i.hasMoreNodes();) 
      processMyNodes (i.nextNode()); 

    } 
    catch (ParserException e) { 
     e.printStackTrace(); 
    } 
} 
catch (ParserException e) { 
    e.printStackTrace(); 
} 

更新:

我已經使用iText解析PDF文件。它的工作原理以及對本地文件,但我想分析其在web服務器託管,如這一個PDF文件:

http://protege.stanford.edu/publications/ontology_development/ontology101.pdf

我該怎麼辦利用iText或其他圖書館這個任務?

+0

您將最有可能得到,如果1回答/你的格式代碼提取,和2 /你給更多的細節(你的代碼的語言,鏈接到htmlparser,...) – 2010-10-23 21:38:54

+1

恩,pdf的不是HTML,因此我不希望htmlparser解析他們在任何方式形狀或形式。 – 2010-10-23 22:13:28

回答

3

的線索是在名稱 - HTMLParser解析HTML HTML看起來像這樣:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head><title>SimonJ's homepage</title></head> 
    <body>...</body> 
</html> 

PDF文件不是HTML - 在他們看起來像這樣:

%PDF-1.5^M%<E2><E3><CF><D3>1 0 obj<</Contents 3 0 R/Type/Page/Parent 121 0 
R/Rotate 0/MediaBox[0 0 419.528015 595.276001]/CropBox[0 0 419.528015 
595.276001]/Resources 2 0 R>>^Mendobj^M2 0 obj<</ColorSpace<</Cs6 132 0 R>> 
/Font<</F3 102 0 R/F4 105 0 R>>/ProcSet[/PDF/Text]/ExtGState<</GS1 134 0 
R>>>>^Mendobj^M3 0 obj<</Length 917/Filter/FlateDecode>>stream 
H<89><A4><95><DB>r<A3>F^P<86><9F><80>w<E8>K<94>Z<8D><E7><C0><CC>0<97>^X!^E^WF 
<8A><C0><9B><B8>\{At2ESC ^\!<EF><96><DF>>= K"<B1>R<9B>Jq<C1><A9>^O_<FF>... 

這是相當不同的,因此爲什麼HTMLParser無法應付。如果你想解析PDF文件,你可能會想要調查一些像iTextPDFBox這樣的東西,但需要注意的是:PDF文件格式並不是爲了方便提取文本而設計的 - 許多博士生在嘗試時被燒燬...

1

HtmlParser或任何其他HTML或XML解析器都沒有希望在解析PDF文件。 HTML是與PDF格式完全不同的格式。

您需要做的是讓您的網絡抓取軟件關注獲取文檔時遠程Web服務器返回的內容類型頭。這會告訴你剛剛獲取的資源的名義格式。如果內容類型是PDF或鏈接提取器無法應對的其他格式,則不應嘗試解析它。

目前您的代碼做這個:

parser.setResource ("http://hal.archives-ouvertes.fr" + 
    "/docs/00/16/76/78/PDF /27_Bendaoud.pdf"); 

這需要的東西,將使用已經打開的InputStream中的資源替代等