[转]维基百科数据导入

来源:互联网 发布:js数组中清除指定元素 编辑:程序博客网 时间:2024/05/17 09:27

本文来自:http://app.cnzer.cn/html-83146-1.html

 

两篇文章分别总结了各自的wikipedia数据导入过程,来不及学习,故先转载:

  (一)wmdumper.jar

  from: GipSky

  本文试图总结架设Wikipedia镜像的过程。

  准备工作

  首先需要安装Mediawiki软件,以及Mediawiki所依赖的软件,Apache,Php5,Mysql等,这里就不详细讲解了。对于懒人,有两个选择:

  第一是安装Debian[1],这样apt-get install mediawiki就可以完成软件的安装。

  第二是下载VMWare Player[2]和一个预安装Mediawiki的虚拟机[3]。

  其次需要安装Java[4],因为导入数据的工具[5]是用Java实现的。

  然后是硬盘,如果是英文wikipedia[6],需要准备大概10G的空间,如果是中文[7],需要1G左右的空间。注意Mysql数据库文件(典型的安装会使用/var/lib/mysql这个目录)所在的分区应具有足够的空闲空间。

  最后,也是最重要的是,想办法下载wikipedia的数据文件,由于数据文件的网站[8],和导入数据文件的工具及其使用说明[9]都被封锁,这个就得自己想办法,各显神通了。由于数据文件很多,记得我们需要的文件名字看起来像是:

  enwiki-20061130-pages-articles.xml.bz2 [10],

  或zhwiki-20061130-pages-articles.xml.bz2 [11]

  另外,在制作镜像的过程中,需要对Apache的配置[12]、Mysql的管理[13]和Php[14]有一个简单的了解。假设我们想要镜像英文Wikipedia,那么准备工作完成之后,我们有一个安装好了Mediawiki,以及下面两个文件:

  数据文件:enwiki-20061130-pages-articles.xml.bz2

  导入工具:mwdumper.jar [5]

  初始化Wikipedia

  安装Mediawiki软件后,需要完成初始化配置。建立镜像的初始化的过程和安装一个新的Wikipedia没有什么不同。我们假设初始化使用以下的参数:

  Mediawiki的URL:http://localhost/mediawiki

  Mediawiki的安装目录:/var/www/mediawiki

  Mediawkik的配置文件位于/var/www/mediawiki/LocalSettings.php

  Mysql数据库为wikidb,用户wikiuser,密码123456

  清空数据库

  初始化过程不但建立了Wikipedia所需要的数据库Table,而且还加入了一些初始记录。为了导入Wikipedia的镜像数据,我们需要首先清空数据库的部分表格。

  下面的内容基本参考自某人的镜像过程[15]:

  $ mysql -p wikidb

  Password: ******

  mysql> delete from page;

  mysql> delete from revision;

  mysql> delete from text;

  配置mysql

  数据倒入过程会使用很长的SQL语句,以及生成大量数据库的Undo记录。所以需要事先对mysql数据库进行配置。先编辑/etc/mysql/my.cnf,在合适位置加上下面内容:

  [mysqld]

  max_allowed_packet = 128M

  innodb_log_file_size = 100M

  [mysql]

  max_allowed_packet = 128M

  重启动mysql

  # /etc/init.d/mysql restart

  导入数据

  用下面的命令倒入数据,大概需要1天的时间才能全部导入完毕。导入完毕之后,这个Wikipedia镜像就可以使用了。

  java -Xmx600M -server -jar mwdumper.jar --format=sql:1.5

  enwiki-20061130-pages-articles.xml.bz2 | mysql -u wikiuser -p wikidb

  可选:清空Undo日志

  导入过程不但会生成10G的数据库文件,也会生成大约10G的Undo log,检查你的Mysql数据库的日志目录(典型的值是/var/log/mysql),及该目录所在的分区,注意不要把分区写满。导入过程中,我们如果发现即将写满分区,可以用Mysql的管理命令清空Undo日志(需要用mysql超级帐号登入)。

  $ mysql -u root reset master;

  可选:修复数据

  导入过程中可能会有一些数据表出错,包括pagelinks,templatelinks,page表,我们可以在导入数据完成后,用mysql的修复命令:

  $ mysql -p wikidb

  mysql> repair table pagelinks extended;

  mysql> repair table page extended;

  mysql> repair table templatelinks extended;

  修复过程可能会很慢,耐心等待。

  安装扩展项

  此时,虽然可以访问Wikipedia,但很多页面的部分内容不能正常显示,这是因为Wikipedia依赖很多mediawiki的扩展项才能够正常工作,而这些扩展项默认不会安装。Wikipedia所需的全部扩展项详见官方文档[16]。

  首先检查是否安装Subversion,然后需要突破封锁下载到mediawiki extensions。

  $ svn co -r REVISION /

  http://svn.wikimedia.org/svnroot/mediawiki/trunk/e xtensions /

  ~/extensions

  其中REVISION是你所安装的Mediawiki软件对应的版本号,如果是mediawiki1.7,则将REVISION替换为15387,如果是其他版本的mediawiki,自己查。

  虽然官方的Wikipedia使用很多扩展,但如果只想完成Wikipedia镜像,我们只需要关心少数几个扩展。下面的命令把这些extension安装到/var/www/mediawiki目录里。

  $ cd ~/extensions

  $ mkdir /var/www/mediawiki/extensions/ParserFunctions

  $ cd ParserFunctions

  $ cp Expr.php ParserFunctions.php

  /var/www/extensions/ParserFunctions

  $ cd ..

  $ cd Cite

  $ cp Cite.php Cite.i18n.php

  /var/www/mediawiki/extensions/

  $ cd ..

  $ cp -a CategoryTree/ /var/www/mediawiki/extensions/

 

 $ cp -a wikihiero /var/www/mediawiki/extensions/$ find -name .svn | xargs rm

  然后编辑配置文件/var/www/mediawiki/LocalSettings.php,追加以下内容:

  require_once("$IP/extensions/ParserFunctions/Parse rFunctions.php");

  $wgUseTidy=true;

  require_once("$IP/extensions/Cite.php");

  $wgUseAjax = true;

  require_once("$IP/extensions/CategoryTree/Category Tree.php");

  require_once("$IP/extensions/wikihiero/wikihiero.p hp");

  这时应该可以正常显示大部分的Wikipedia页面了。

  显示数学公式

  安装完扩展项之后,应该可以正常显示大部分页面,但还有一些带有数学公式页面无法显示。Mediawiki内置了对数学公式的支持,但是需要系统已经安装有Latex等相关软件。

  在Debian系统中,确信已经安装tetex-bin,ghostscript,imagemagick,mediawiki-math这几个package。其他系统请自行安装相应软件。

  编辑配置文件/var/www/mediawiki/LocalSettings.php,追加以下内容:

  $wgUseTeX=true

  这时所有的数学公式应该都可以正常显示了。

  可选:全文搜索

  建立Wikipedia所需的所有工作到这里基本完毕,只是目前搜索功能只能完全匹配标题,如果需要全文搜索功能,还需要重新建立全文索引。索引的过程不但非常非常慢(几天到一周),而且数据库占用的磁盘空间会从不到10G膨胀到将近30G。

  如果还是希望有全文搜索功能,参见[15]的最后一部分,这里就不详细叙述了。

  参考

  http://www.debian.org

  http://www.vmware.com/products/player

  rPath MediaWiki Appliance

  http://java.sun.com

  http://download.wikimedia.org/tools

  http://en.wikipedia.org

  http://zh.wikipedia.org

  http://download.wikimedia.org/

  http://download.wikimedia.org/tools/README.txt

  http://download.wikimedia.org/enwiki

  http://download.wikimedia.org/zhwiki

  http://www.apache.org

  http://www.mysql.org

  http://www.php.net

  Mirror the Wikipedia

  http://en.wikipedia.org/wiki/Special:Version

  http://www.xxlinux.com/linux/article/ ... server/20070904/9623.html

  (二)MediaWiki

  from:

  哈哈的思想发布器

  目的

  自己装一套 wikipedia (维基百科),能随时查阅需要的信息。不过这是只有文本的wikipedia 。

  安装条件

  mysql+php+apache

  要有mysql root 权限。

  webroot 目录的读写权。

  安装过程

  先装wiki的平台软件 mediawiki。

  软件是 mediawiki.org 提供的,想办法下载个最新版本。

  展开到你的webroot目录下,看一下 INSTALL 文件

  为你的php 装上 eaccelerator 。

  mediawiki 如果有了 php 加速的话将使得响应速度提高3-4倍。mediawiki 可以支持的加速器有 eaccelerator,mmcache 等,不过eaccelerator 是mmcache基础上的一个活跃的分支(有人维护和挺进版本),而且他有支持php5的版本(0.95beta2)。所以,我选择用 eaccelerator。它对php的加速主要是通过把php编译后的可执行代码cache在内存中而实现的,还有就是通过优化源代码来实现。

  以下是安装 eaccelerator过程中要注意的:

  看README

  make install 之后,注意下反馈的提示,那是你的eaccelerator.so文件装的位置。

  根据 eaccelerator.so 所在目录名,确定 php.ini中 写法:例如 .../no-debug-zts-20050922/eaccelerator.so , zts 表示 zend thread safe, 那么 php.ini 中调用语法就是: zend_extension_ts="/usr/local/lib/php/extensions/n o-debug-zts-20050922/eaccelerator.so"如果是 ../no-debug-non-zts-20020429/eaccelerator.so non-zts 就是没有。那么 php.ini 中调用语法就是:zend_extension="/usr/local/lib/php/extensions/no-d ebug-non-zts- 20020429/eaccelerator.so"。

  命令行 php -v 试一下,一般会有个

  "with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator。"那就是装上了。webserver 重起一下,phpinfo(); 中将看到更多 eAccelerator 的信息。那就是装成了。

  想关闭 就把 zend_extension_ts= ... 屏蔽掉。

  如果命令行下 php -v 时候,出了这么个东西:cannot restore segment prot after reloc: Permission denied 。那是你的系统的/selinux(secure linux)对share lib的保护在起作用,只要 运行:chcon -t texrel_shlib_t xxxxx.so 注册一下就行了。

  接下来在安装wiki的时候,mediawiki会发现 eaccelerator(对支持php5的eaccelerator 0.95bate2,wiki认不出来,不过没关系,效率还是同等的提高了),那么请在配置时把加速模块选择为eaccelerator。

  选择语言时,一定要选 "中文(zh)", 而不是 "中文简体(zh_cn)" ,因为wiki数据是简繁体条目混在一起的。选错了,就看不到繁体的条目了。

  选择完后,点确认,会生成个文件 webroot/config/LocalSettings.php ,把它move 到 webroot/下就完成了安装。

  参考资料:INSTALL 文件

  从 http://download.wikipedia.org 导入你所需要的wiki数据。

  中文的wiki百科在 zh_wiki/中

  以下说明了其中各组数据的含义:

  The format:

* pages-articles.xml

  o Contains current version of all article pages, templates, and other pages

  o Excludes discussion pages ('Talk:') and user "home" pages ('User:')

  o Recommended for republishing of content.

  * pages-meta-current.xml

  o Contains current version of all pages, including discussion and user "home" pages.

  * pages-meta-history.xml

  o Contains complete text of every revision of every page (can be very large!)

  o Recommended for research and archive

  所以,一般选择 pages-articles.xml 下载就行了。它是bz2文件,用bzip2 -d "文件名" 打开,最后会得到个 ".xml"。

  在继续下一步之前,完成以下工作:

  cp php.ini php-cli.ini ,这样“命令行”执行php代码时,自动使用 php-cli.ini 的配置信息。

  把 php-cli.ini 中的

  max_execution_time = 30 ; Maximum execution time of each script, in seconds

  memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)

  这两行改高一点,不妨设 300/ 80M , 这样保证长时间命令行运行不出事。

  用 webroot/maintenance/importDump.php "那个.xml" 导入数据库,一个zh_wiki 一般要导好几个小时。可以: nohup php importDump.php xxx.xml & 挂在无终端后台去run.

  之后,运行 webroot/maintenance/refreshLinks.php ,这是为了重建wiki数据之间的相互关联,这个时间更长,所以也挂后台。

  3.其他

  修改你的wiki首页,可以选择转向到适当的页面,不过最简单的方法是,copy zh.wikipedia.org的首页内容。

  这样一个文本的wikipedia就好了,不过没有图片。我也看了资料,好像wikipedia.org目前没有提供对图片的dump. 只能凑合用了。

  参考文献:http://meta.wikimedia.org/wiki/Data_dumps

  wikipedia的使用

  普通使用,看wikipedia页面上的 “帮助”

  例:

  在 web上访问 http://site-url/index.php/MediaWiki:Monobook.css, 然后 "编辑"这个条目,把别的wiki网站的copy过来,你就有了一个新的缺省页面样式(皮肤)了。

  要想重订向,就 #REDIRECT [[where to be go]] , eg.#REDIRECT [[Documentation:Administration#Updating_the_softwa re]] 注:#Updating_the_software 是个锚。

  系统调整,要修改 LocalSettings.php

  例:

  如何修改主页左上角的标徽图?

  修改 $wgLogo 变量。

  如何改变浏览器地址栏中的网站小图标?

  MediaWiki会用网页中输出指向传统/favicon.ico的链接,即网页默认图标。如果想用独特的图标,可修改/includes/Skin.php文件,将'href' => '/favicon.ico'改为'href' =>'/path/to/your/favicon.ico'即可。

  如何完全锁定数据库?

  在LocalSettings.php中设置$wgReadOnlyFile指向锁定信息的文件名,并在文件中书写锁定原因,此后试图编辑wiki文本时就会显示这个提示。注意这个操作并不能绝对保证安全;如果需要完全禁止MediaWiki写入数据,需要在数据库上进行设置(例如禁止wiki用户进行UPDATE,INSERT,DELETE操作,或者将MySQL设为只读模式)

  参考资源:http://www.allwiki.com/wiki/Mediawiki%E5%B8%B8%E8% A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94 http://meta.wikimedia.org/wiki/Documentation:Admin istration

  性能如何

  这样的一个wiki中文站,如果不允许写入,在只读模式,那一般能撑起一个访问量在 2w pageviews,同时并发<20的网站(机器就是一般的x86 server),还是比较安全的。

  如果太高了,还是要做cache的, 比如用 squid 或 apache 反向代理来cache.

  如果没有比较好的机器,写入状态还是别打开了,因为 mediawiki 这方面切实太慢了,mediawiki的 languages/LanguageZh.php(在测试中,这个.php被认为是慢代码) 中有 preg_match, preg_replace 这种全文匹配的事情,所以不光mysql受不了的问题,cpu也吃不消。