良い精度を得るためにいくつかのWebページを使用してNLPモデルを訓練したいと思います。 私はWebページを持っていないので、Amazon EMRでWebクローラーを使用することを検討しています。 私は、robots.txtルールを尊重した、拡張性のある拡張性の高いオープンソースソリューションを使いたいと思っています。いくつかの研究の後、私はApache Nutchを採用することに決めました。Nutch 2.3.1で取得されたページの生のHTMLを取得する
Nutchの主な投稿者Julien Niocheによるthis videoが発見されました。 最新バージョンのHadoop(Amazon 2.7.3)とNutch(2.3.1)を使用していましたが、小さなサンプルジョブを正常に完了できました。
しかし、私はNutchの出力から生のhtmlファイルを取得する簡単な方法を見つけることができませんでした。この問題の解決策を探しているうちに、Nutch自身のwikiとtutorialページに加えて、他にも役立つリソースがいくつか見つかりました。
それらのいくつか(のようなthis answerまたはthis pageは)新しいプラグイン(または既存のものを修正する)を実装することをお勧め:全体的なアイデアは、実際にファイルの内容を保存する数行のコードを追加することですフェッチされたhtmlページがセグメントに送信される前に。
その他のもの(this answerなど)は、セグメントにアクセスし、そこに含まれるすべてのレコードを調べ、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:あなたが適切にIntelliJのにNutchのソースを開く方法を疑問に思う場合は、this answerは実際には正しい方向に向けてあなたを指している可能性があります。
の重複http://stackoverflow.coにreportUrl欄に追加されるクラスに再構築するために、再度アリ日食を実行しますm/questions/10098169/map-reduce-friendly-format-rq = 1のWebページから抽出されたWebページ。 –