0

我想为我的应用程序使用 DMOZ ODP 中存在的 URL 数据库。(一个 URL 字符串数组或一个包含相同字符串的文件)。有没有办法获得它,(除了手动复制粘贴)?

编辑 :

是否有任何脚本/代码来解析 rdf 文件..

4

3 回答 3

4

看看http://rdf.dmoz.org/,您需要找到一种方法将 RDF 解析到您的数据库中。

前几天我使用Steve's Software中的odp2db脚本完成了这项工作。它们很旧,但格式没有显着变化,因此它们工作正常。

我发现我不需要执行自述文件中建议的iconvxmlclean.pl步骤,只需解压缩转储文件并运行structure2db.plcontent2db.pl脚本。您需要手动创建数据库表(请参阅脚本顶部的 SQL)并在开始之前修改脚本中的连接详细信息。

在我使用的 2009 年 1 月中旬的转储中,有 756,962 个类别和 4,436,796 个网站。浏览它们需要一段时间,但不会太长,尽管我确实省略了站点描述,因为我不需要它们。此外,可能值得在创建表后添加数据库索引以加快以后的访问速度。原始结构和内容文件分别压缩为 75MB 和 300MB。分别为 848MB 和 2GB。

于 2010-01-17T10:24:59.247 回答
2

我实际上已经在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)然后我有一个 if 语句来查看它是否是一个“ExternalPage”标签,在这种情况下,我去另一个州寻找“topic”、“Title”和“Description”。我有另一个

  • characters(char[] ch, int start, int length)我根据最近发送给 startElement 的主题、标题和描述文本阅读的位置

  • endElement(String uri, String localName, String qName)我在其中检查了哪个元素正在结束,如果是 ExternalPage,则表示当前元素的结束。

整个事情是用于基本解析的 80-90 行代码。所以很容易写。它能够咀嚼数千兆字节的文件......我不记得可能有一两分钟?如果您只想查询一些特定数据,那么在处理程序中编写代码来执行此操作可能会更容易,而不是尝试将其加载到数据库中。

如果你找到了一个运行良好的工具,那显然比编写自己的代码要好。但是编写自己的代码并不难!RDF 只是一种 XML 格式,它没有嵌套或任何东西。一个简单的 SAX 解析器可以在一天左右的时间内轻松完成。

于 2010-02-12T07:45:12.530 回答
-1

您可以随时向那里的一位腐败编辑付款,他们会帮助您:)

于 2010-02-10T10:06:26.727 回答