mongodb将xml导入mongodb

2024-04-26 07:47:38 发布

您现在位置:Python中文网/ 问答频道 /正文

为了以map&reduce的方式搜索最常用的单词,我在将大xml文件(1.3 gb)导入mongodb时遇到了问题。

http://dumps.wikimedia.org/plwiki/20141228/plwiki-20141228-pages-articles-multistream.xml.bz2

在这里,我将这个大文件中的xml cut(前10000行)括起来:

http://www.filedropper.com/text2

我知道我不能直接将xml导入mongodb。我用了一些工具。我使用了一些python脚本,但都失败了。

我应该使用哪种工具或脚本?关键价值应该是什么? 我认为找到最频繁的世界最好的办法就是这样。

(_id : id, value: word )

然后我将对文档示例中的所有元素进行求和:

http://docs.mongodb.org/manual/core/map-reduce/

任何线索都会非常感激,但是如何将这个文件导入到mongodb中以拥有这样的集合呢?

(_id : id, value: word )

如果你有任何想法,请分享。

编辑 经过研究,我会使用python或js来完成这项任务。

我只提取位于/<page><revision>下的<text></text>部分中的单词,排除<,>等,然后将单词分离并用pymongo或js上传到mongodb。

所以有几页有修订和文本。

编辑


Tags: 文件工具org脚本idhttp编辑map
2条回答

我使用的XML文件是这样的:

<labels>
     <label>
          <name>Bobby Nice</name>
          <urls>
               <url>www.examplex.com</url>
               <url>www.exampley.com</url>
               <url>www.examplez.com</url>
          </urls>
     </label>
     ...
</labels>

我可以用xml-streammongodb导入它

See:https://github.com/assistunion/xml-stream

代码:

var XmlStream = require('xml-stream');
// Pass the ReadStream object to xml-stream
var stream = fs.createReadStream('20080309_labels.xml');
var xml = new XmlStream(stream);

var i = 1;
var array = [];
xml.on('endElement: label', function(label) {
  array.push(label);
  db.collection('labels').update(label, label, { upsert:true }, (err, doc) => {
    if(err) {
      process.stdout.write(err + "\r");
    } else {
      process.stdout.write(`Saved ${i} entries..\r`);
      i++;
    }
  });
});

xml.on('end', function() {
  console.log('end event received, done');
});

要保存所有这些数据,请将它们保存在Gridfs

转换xml的最简单方法是使用此工具将其转换为json并保存:

https://stackoverflow.com/a/10201405/861487

import xmltodict

doc = xmltodict.parse("""
... <mydocument has="an attribute">
...   <and>
...     <many>elements</many>
...     <many>more elements</many>
...   </and>
...   <plus a="complex">
...     element as well
...   </plus>
... </mydocument>
... """)

doc['mydocument']['@has']
Out[3]: u'an attribute'

相关问题 更多 >