DMOZODPに存在するURLのデータベースをアプリケーションに使用したいと思います。(URL文字列の配列または同じものを含むファイル)。(手動のコピー&ペースト以外に)それを取得する方法はありますか?
編集 :
rdfファイルを解析するためのスクリプト/コードはありますか?
http://rdf.dmoz.org/を見てください。RDFを解析してデータベースに入れる方法を見つける必要があります。
先日、 Steve's Softwareのodp2dbスクリプトを使用してこれを行いました。それらは古いものですが、フォーマットは大幅に変更されていないため、正常に動作します。
iconv
readme で提案されているandの手順を実行する必要はなくxmlclean.pl
、ダンプを解凍してstructure2db.pl
andcontent2db.pl
スクリプトを実行するだけであることがわかりました。開始する前に、データベース テーブルを手動で作成し (スクリプトの上部にある SQL を参照)、スクリプトで接続の詳細を変更する必要があります。
私が使用した 2009 年 1 月中旬のダンプでは、756,962 のカテゴリと 4,436,796 の Web サイトがあります。それらすべてを実行するのに少し時間がかかりましたが、過度に長くはありませんでしたが、サイトの説明は必要ないので省きました. また、後でアクセスを高速化するために、テーブルを作成した後にデータベース インデックスを追加する価値があるかもしれません。生の構造ファイルとコンテンツ ファイルは、それぞれ 75 MB と 300 MB に圧縮されています。それぞれ848MBと2GB。
私は実際にJavaでこれを行いました。SAX API を使用して RDF ファイルを読み込んだだけです。それはかなり簡単でした。私の場合、トピック名に「Weblogs」が含まれるトピックにあるすべての URL を取り出したいと思いました。
基本的には、 org.xml.sax.helpers.DefaultHandlerを実装することでした。
次に、コードをセットアップするには、次のようにします。
InputSource is = new InputSource(new FileInputStream("filename.rdf"));
XMLReader r = XMLReaderFactory.createXMLReader();
r.setContentHandler(new MyHandlerClass());
r.parse(is);
それだけです。私のハンドラー クラスでは、以下を実装する必要がありました。
startElement(String uri, String localName, String qName, Attributes attributes)
次に、「ExternalPage」タグであるかどうかを確認する if ステートメントがありました。その場合は、別の状態に移動して「トピック」、「タイトル」、および「説明」を探しました。私は別のものを持っていた
characters(char[] ch, int start, int length)
最近 startElement に送信されたものに応じて、トピック、タイトル、および説明テキストを読み込んだ場所
endElement(String uri, String localName, String qName)
ここで、どの要素が終了しているかを確認し、それが ExternalPage の場合、それは現在の要素の終わりを意味します。
全体として、基本的な解析用に 80 ~ 90 行のコードが必要でした。とても簡単に書くことができます。数ギガバイトのファイルをかみ砕くことができました... 1、2分か覚えていませんか? 特定のデータを照会したいだけの場合は、DB にロードするよりも、ハンドラーでそれを行うコードを記述する方が簡単な場合があります。
うまく機能するツールを見つけた場合、それは明らかに独自のコードを作成するよりも優れています。しかし、独自のコードを書くことは難しくありません! RDF は単なる XML 形式であり、ネストなどはありません。単純な SAX パーサーは、1 日かそこらで簡単に実行できます。
あなたはいつでもそこにいる編集者の一人にお金を払うことができ、彼らはあなたを助けてくれるでしょう:)