Я хотел бы обучить модель НЛП, используя несколько веб-страниц, чтобы получить хорошую точность. Поскольку у меня нет веб-страниц, я рассматриваю возможность использования веб-искателя на 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 действительно может направить вас в правильном направлении.
Возможно дубликат http://stackoverflow.co m/questions/10098169/extracting-fetched-web-pages-from-nutch-in-a-map-reduce-friendly-format? rq = 1. –