Проблема при разборе файлов PDF - PullRequest
0 голосов
/ 24 октября 2010

Я использую htmlparser 1.6 для разбора веб-сайтов.

Проблема в том, что когда я анализирую 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. Он хорошо работает с локальными файлами, но я хочу проанализировать PDF-файлы, которые размещены на веб-серверах, таких как этот:

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

Как мне выполнить эту задачу, используя iText или другие библиотеки?

Ответы [ 2 ]

3 голосов
/ 24 октября 2010

Подсказка в названии - 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-файлы, вы, вероятно, захотите исследовать что-то вроде iText или PDFBox , хотя имейте в виду: формат файла PDF не предназначен для простого извлечения текста - многие Аспирант сгорел во время попытки ...

1 голос
/ 24 октября 2010

HtmlParser или любой другой анализатор HTML или XML не имеет никакой надежды на разбор PDF-файлов.HTML - это совершенно другой формат, чем формат PDF.

Вам нужно, чтобы программное обеспечение для сканирования веб-страниц обращало внимание на возвращаемые заголовки типов контента, которые удаленный веб-сервер возвращает, когда вы получаете документ.Это говорит о номинальном формате ресурса, который вы только что получили.Если тип содержимого - PDF или какой-либо другой формат, с которым не может справиться ваш экстрактор ссылок, вы не должны пытаться его анализировать.

На данный момент ваш код делает это:

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

Это нужно заменить чем-то, что устанавливает ресурс, используя уже открытый InputStream и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...