2016-11-01 2 views
0

Я хотел бы обучить модель НЛП, используя несколько веб-страниц, чтобы получить хорошую точность. Поскольку у меня нет веб-страниц, я рассматриваю возможность использования веб-искателя на Amazon EMR. Я хотел бы использовать распределенное, расширяемое и масштабируемое решение с открытым исходным кодом, которое соблюдает правила robots.txt. После некоторых исследований я решил принять Apache Nutch.Получить необработанный html страниц, полученных Nutch 2.3.1

Я нашел this video главным автором Nutch Julien Nioche особенно полезным для начала. Хотя я использовал последнюю доступную версию Hadoop (Amazon 2.7.3) и Nutch (2.3.1), мне удалось успешно выполнить небольшую примерную работу.

К сожалению, я не смог найти простой способ получить необработанные html-файлы с выхода Nutch. Ища решение этой проблемы, я нашел несколько других полезных ресурсов (в дополнение к собственным wiki и tutorial страницам).

Некоторые из них (например, this answer или this page) предлагают внедрить новый плагин (или изменить существующий): общая идея состоит в том, чтобы добавить несколько строк кода, которые на самом деле сохранить в файл содержимое любую выбранную html-страницу перед ее отправкой в ​​сегмент.

Другие (например, this answer) предлагают реализовать простой инструмент пост-обработки, который обращается к сегментам, проходит через все записи, которые там включены, и сохраняет содержимое любых файлов html, которые являются html-страницей.

Эти ресурсы содержат (более или менее точные) инструкции и примеры кода, но мне не повезло, когда я пытался их запустить, потому что они относятся к очень старым версиям Nutch. Кроме того, все мои попытки адаптировать их к Nuth 2.3.1 потерпели неудачу из-за нехватки ресурсов/документации.

Например, я добавил следующий код к концу HtmlParser (ядра parse-html плагина), но все файлы, которые получают сохраненные в указанной папке пустует:

String html = root.toString(); 
if (html == null) { 
    byte[] bytes = content.getContent(); 
    try { 
     html = new String(bytes, encoding); 
    } catch (UnsupportedEncodingException e) { 
     LOG.trace(e.getMessage(), e); 
    } 
} 
if (html != null) { 
    html = html.trim(); 
    if (!html.isEmpty()) { 
     if (dumpFolder == null) { 
      String currentUsersHomeFolder = System.getProperty("user.home"); 
      currentUsersHomeFolder = "/Users/stefano"; 
      dumpFolder = currentUsersHomeFolder + File.separator + "nutch_dump"; 
      new File(dumpFolder).mkdir(); 
     } 
     try { 
      String filename = base.toString().replaceAll("\\P{LD}", "_"); 
      if (!filename.toLowerCase().endsWith(".htm") && !filename.toLowerCase().endsWith(".html")) { 
       filename += ".html"; 
      } 
      System.out.println(">> " + dumpFolder+ File.separator +filename); 
      PrintWriter writer = new PrintWriter(dumpFolder + File.separator + filename, encoding); 
      writer.write(html); 
      writer.close(); 
     } catch (Exception e) { 
      LOG.trace(e.getMessage(), e); 
     } 
    } 
} 

В других случай, вместо этого, я получил следующую ошибку (которая мне очень нравится, потому что он упоминает пролог, но это также озадачивает меня):

[Fatal Error] data:1:1: Content is not allowed in prolog. 

Таким образом, прежде чем рассматривать, чтобы понизить мою установку на Nutch 1.x, мой вопрос: есть какие-либо Вам пришлось столкнуться с этой проблемой с недавней версией Nutch и успешно ее решить?

Если да, то вы можете поделиться им с сообществом или хотя бы предоставить некоторые полезные указания для решения?

Большое спасибо заранее!


PS: Если вам интересно, как правильно открыть источники Nutch в IntelliJ, this answer действительно может направить вас в правильном направлении.

+0

Возможно дубликат http://stackoverflow.co m/questions/10098169/extracting-fetched-web-pages-from-nutch-in-a-map-reduce-friendly-format? rq = 1. –

ответ

1

рад, что вы нашли видео полезным. Если вам просто нужны веб-страницы для обучения модели НЛП, почему бы вам не использовать набор данных CommonCrawl? Он содержит миллиарды страниц, является бесплатным и избавит вас от хлопот крупномасштабного веб-сканирования.

Теперь, чтобы ответить на ваш вопрос, вы можете написать собственный IndexWriter и написать содержимое страниц по своему желанию. Я не использую Nutch 2.x, поскольку я предпочитаю 1.x, поскольку он быстрее, имеет больше функциональных возможностей и проще в использовании (если честно, я даже предпочитаю StormCrawler еще больше, но я предвзятый). Nutch 1.x имеет класс WARCExporter, который может генерировать дамп данных в том же формате WARC, который используется CommonCrawl; существует еще один класс для экспорта в различных форматах.

+0

Очень пышный! Спасибо за все полезные советы и, возможно, за то, что сэкономили мне часы! –

+0

добро пожаловать, не стесняйтесь отмечать ответ выше, как принято, и повышать его –

0

Вы можете сохранить необработанный HTML путем редактирования кода Nutch во-первых, запустить Nutch в затмении, следуя https://wiki.apache.org/nutch/RunNutchInEclipse

После завершения ruunning Nutch в затмение редактировать файл FetcherReducer.java, добавить этот код в метод вывода запустите муравей затмение снова перестроить класс

Наконец исходный HTML будет добавлен в колонку reportUrl в базе данных

if (content != null) { 
    ByteBuffer raw = fit.page.getContent(); 
    if (raw != null) { 
     ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(raw.array(), raw.arrayOffset() + raw.position(), raw.remaining()); 
     Scanner scanner = new Scanner(arrayInputStream); 
     scanner.useDelimiter("\\Z");//To read all scanner content in one String 
     String data = ""; 
     if (scanner.hasNext()) { 
      data = scanner.next(); 
     } 
     fit.page.setReprUrl(StringUtil.cleanField(data)); 
     scanner.close(); 
    } 
Смежные вопросы