2009-12-24 4 views
0

Я хочу использовать базу данных URL-адресов, имеющихся в DMOZ ODP для моего приложения. (массив строк URL ИЛИ файл, содержащий то же самое). Есть ли способ его получения (кроме ручной копии-пасты)?Как получить URL-адреса от Dmoz ODP

EDIT:

Есть ли сценарий/код для разбора файла РДФ ..

ответ

4

Посмотрите на http://rdf.dmoz.org/, вам нужно найти способ разбора RDF в вашу базу данных.

Я сделал это на днях, используя сценарии odp2db от Steve's Software. Они старые, но формат существенно не изменился, поэтому они отлично работают.

я обнаружил, что не нужно делать iconv и xmlclean.pl шагов, предложенные в риом, просто распакованы отвалах и побежало structure2db.pl и content2db.pl скриптов. Вам нужно будет вручную создать таблицы базы данных (см. SQL поверх сценария для этого) и изменить сведения о подключении в сценариях перед началом работы.

С середины января 2009 года дамп, который я использовал, содержит 756 962 категории и 4 436 796 веб-сайтов. Потребовалось некоторое время, чтобы пробежать их все, но не слишком долго, хотя я обошел описания сайтов, так как они мне не нужны. Кроме того, возможно, стоит добавить индексы базы данных после создания таблиц для ускорения доступа позже. Файлы исходной структуры и содержимого были сжаты соответственно 75 МБ и 300 МБ. 848 МБ и 2 ГБ соответственно.

+1

Я фактически загрузил его и попытался извлечь данные с помощью экстренного экстрактора DMOZ, но мог получить только 1000 URL-адресов, поскольку это была оценочная версия. Есть ли еще один экстрактор (freeware) для извлечения полного каталога DMOZ ??? – trinity

+0

Или есть ли какой-либо скрипт для его анализа. Я не знаком с файлами rdf .. Пожалуйста, помогите .. Мне это нужно плохо .. – trinity

+0

Я сделал это на днях, изменил свой ответ соответственно. Надеюсь, поможет! – Mat

-1

Вы всегда можете оплатить один из currupt редакторов там, и они помогут вам :)

2

Я на самом деле сделал это в Java. Я просто использовал API SAX для чтения файлов RDF. Это было довольно прямо. В моем случае я хотел вытащить каждый URL-адрес, который был в теме с «Weblogs» в названии темы.

В основном то, что сделал реализовать 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», в этом случае я пошел в другое состояние, чтобы искать «тему»,» Название "и" Описание ". У меня была другая

  • characters(char[] ch, int start, int length) где я прочитал в тему, название и текст описания в зависимости от которых один был совсем недавно отправлен StartElement

  • endElement(String uri, String localName, String qName) где я проверил, чтобы увидеть, какой элемент заканчивался, и если это ExternalPage, что означало конец текущего элемента.

Все это было 80-90 строк кода для основного анализа. Настолько довольно легко писать. Он смог пережевывать файлы с несколькими гигабайтами ... Я не помню, может быть, минуту или две? Если вы просто хотите запросить некоторые конкретные данные, может быть проще просто написать код для этого в вашем обработчике, а затем попытаться загрузить его в БД.

Если вы найдете инструмент, который хорошо работает, это, очевидно, лучше, чем написание собственного кода. Но писать собственный код не сложно! RDF - это просто формат XML, и он не вложен или ничего. Простой парсер SAX легко выполним через день или около того.

+0

Hey Chad, Я делаю точно то же самое. При анализе небольших файлов он отлично работает, но когда я пытаюсь разобрать полный файл, я получаю это исключение - org.xml.sax.SAXParseException: Символьная ссылка «& # 11» является недопустимым символом XML. \t в com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (Unknown Source) \t в test.com.amazon.lm.dao.entity.SaxDMOZParser.main (SaxDMOZParser.java:35) Этот специальный символ присутствует в более поздней части файла. Что мне нужно сделать? – instanceOfObject

+0

@tyro Я не знаю, у меня не было этой проблемы, возможно, они добавили что-то к данным с тех пор и не проверяют, чтобы убедиться, что это действительно. Возможно, вы можете вручную обработать файл и удалить эту ссылку. Что-то вроде этой команды Unix может быть в состоянии сделать это: 'SED -e "с/\ & \ # 11 // ИГ" broken.xml> fixed.xml' Я не уверен насчет побега , но это должно помочь –

+0

... Я сделал это, и проблема решена. Кстати, спасибо за беспокойство. – instanceOfObject

 Смежные вопросы

  • Нет связанных вопросов^_^