我想在我的应用程序中使用DMOZ ODP中存在的URL数据库。( URL字符串数组或包含该数组的文件)。有没有办法获得它(除了手动复制-粘贴)?
编辑:
是否有任何脚本/代码来解析rdf文件。
发布于 2010-01-17 18:24:59
看看http://rdf.dmoz.org/,您需要找到一种方法将其解析到您的数据库中。
前几天我使用Steve's Software的odp2db脚本做到了这一点。它们是旧的,但格式没有明显的变化,所以它们工作得很好。
我发现我不需要执行自述文件中建议的iconv和xmlclean.pl步骤,只需解压缩转储并运行structure2db.pl和content2db.pl脚本即可。您需要手动创建数据库表(请参阅脚本顶部的SQL ),并在开始之前修改脚本中的连接详细信息。
加上我使用的2009年1月中旬的转储,有756,962个类别和4,436,796个网站。我花了一段时间把它们都看了一遍,但并不是太长,尽管我确实省去了网站的描述,因为我不需要它们。此外,可能值得在创建表之后添加数据库索引,以便稍后加快访问速度。原始结构和内容文件分别压缩75MB和300MB。848MB和2 2GB。
发布于 2010-02-12 15:45:13
我实际上用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);差不多就是这样了。在我的处理程序类中,我必须实现:
然后我有一个if语句来查看它是否是一个"ExternalPage“标签,在这种情况下,我转到另一个状态来查找"topic”、"Title“和"Description”。我有另一个
characters(char[] ch, int start, int length),我在其中读取主题、标题和描述文本,这取决于最近发送给startElement
endElement(String uri, String localName, String qName)的是哪个元素,在那里我检查哪个元素正在结束,如果它是ExternalPage,则意味着当前元素的结束。整个过程需要80-90行代码来进行基本的解析。所以写起来很容易。它能够在...中处理几十亿字节的文件我不记得有一两分钟了吗?如果您只想查询出一些特定的数据,那么在您的处理程序中编写代码来完成这项工作可能比试图将其加载到DB中要容易得多。
如果你找到了一个运行良好的工具,那显然比编写你自己的代码要好。但是编写你自己的代码并不难!RDF只是一种XML格式,它不是嵌套的。一个简单的SAX解析器很容易在一天左右的时间内完成。
发布于 2010-02-10 18:06:27
你可以随时付钱给那里的某个粗鲁的编辑,他们会帮你:)
https://stackoverflow.com/questions/1956735
复制相似问题