HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

Wikipediaのデータからプレーンテキストを出力

はじめに

Wikipediaのデータを出力する方法はいろいろあります。
その中のひとつ、Wikipedia Extractorを試してみました。

Wikipedia Extractor - Medialab

やり方

データはここから取得しました。
Index of /jawiki/latest/ jawiki-latest-pages-articles.xml.bz2

そして、データのあるディレクトリにPythonファイルをダウンロード。

$ curl -O http://medialab.di.unipi.it/Project/SemaWiki/Tools/WikiExtractor.py

バージョンを確認。

$ python WikiExtractor.py --version
WikiExtractor.py 2.55

オプションは公式ページにある通りです。

 -h, --help            show this help message and exit
 -o OUTPUT, --output OUTPUT
                       output directory
 -b n[KM], --bytes n[KM]
                       put specified bytes per output file (default is 1M)
 -B BASE, --base BASE  base URL for the Wikipedia pages
 -c, --compress        compress output files using bzip
 -l, --links           preserve links
 -ns ns1,ns2, --namespaces ns1,ns2
                       accepted namespaces
 -q, --quiet           suppress reporting progress info
 -s, --sections        preserve sections
 -a, --article         analyze a file containing a single article
 --templates TEMPLATES
                       use or create file containing templates
 -v, --version         print program version

引用元: http://medialab.di.unipi.it/wiki/Wikipedia_Extractor

私は下記の通りに実行しました。

$ python WikiExtractor.py --output ./text --bytes 500K jawiki-latest-pages-articles.xml

こんなディレクトリ構成になります。

$ ls -alR text/
text/:
合計 4
drwxrwxr-x. 3 user group   16 1230 20:27 .
drwxr-xr-x. 3 user group  111 1230 21:11 ..
drwxrwxr-x. 2 user group 4096 1230 21:11 AA

text/AA:
合計 19764
drwxrwxr-x. 2 user group   4096 1230 21:11 .
drwxrwxr-x. 3 user group     16 1230 20:27 ..
-rw-rw-r--. 1 user group 500699 1230 21:08 wiki_00
-rw-rw-r--. 1 user group 489585 1230 21:08 wiki_01
-rw-rw-r--. 1 user group 510798 1230 21:08 wiki_02

内容はこんな感じ。docタグに囲まれて1記事が出力されています。
url属性にあるURLが元記事のURLなのですが、h2タグに当たる部分が省かれていることがわかります。

<doc id="56" url="https://ja.wikipedia.org/wiki?curid=56" title="地理">
地理

地理(ちり、英: Geography)
「地理」という表現は古くからあり、有名なところでは漢書の『地理志』がある。
地理学とは、地球の表面と住民の状態、その相互関係を研究する学問である。
「地理」は、日本の学校で設置されている、「人間の生活に影響を与える地域的、社会的な構造」を学ぶための科目である。自然環境や産業環境などを含む環境を学習対象としている。小学校および中学校においては、歴史や公民と並び、社会科の一分野である。高等学校においては、最近は「地理歴史科」という教科の中の一科目となっており、「地理A」「地理B」に細分されている。

</doc>

気になる点

私はヘッダタグ部分もほしかったので、ちょっと残念。
そして、私の環境では、なぜか処理が途中で中断してしまいます。
食わせるファイルのサイズが大きかったからでしょうか。

$ python WikiExtractor.py --output ./text --bytes 500K jawiki-latest-pages-articles.xml
INFO: Loaded 0 templates in 0.0s
INFO: Starting page extraction from jawiki-latest-pages-articles.xml.
INFO: Using 1 extract processes.
zsh: killed     python WikiExtractor.py --output ./text --bytes 500K

さいごに

なかなか自分がほしい形式で出力してくれるものが見つかりませんね。
自分で作るのが一番なのかも…と思いました。

以上でした!

WikipediaのデータをMySQLに突っ込んだ話

はじめに

Wikipediaのデータを、VitualBoxで立ち上げたCentOS7のMySQLに入れてみました。
クローラーでのコンテンツの取得は禁じられているので、要注意です。

Wikipedia:データベースダウンロード - Wikipedia

クローラを用いてコンテンツを収集しないでください。

その代わり、Wikipediaのデータは圧縮されたXMLファイルで提供されています。
ここでは、そのデータを取り込む方法を書いていきます。

ただし、DBに格納されるデータは、MediaWiki形式で書かれた文字列なので、そのまま他に流用は厳しいです。
(ということがわかりました)

作業の流れ

上記の通り、このXMLのファイルを取り込むのですが、そのためのPHPファイルも提供されています。

Wikipedia:データベースダウンロード - Wikipedia

これらのXMLファイルをMySQLデータベースにインポートするには、MediaWiki配布物に含まれるimportDump.phpスクリプトを使用します。

$ bunzip2 -c pages-articles.xml.bz2 | php maintenance/importDump.php

コマンドを叩くだけなら簡単、と思いますが…これを動かすには、最終的には「LocalSettings.php」というファイルが必要です。
このファイルには、主にDBへの接続情報が書かれています。
接続情報なしにデータベースにはデータを入れることはできないで、当たり前といえばそれまでですが。

そしてその「LocalSettings.php」は、MediaWikiのインストールの過程で作成されるものです。
つまり…

  1. Wikipediaのシステムの元であるMediaWikiを仮想環境にインストールし、
  2. その上でWikipediaのデータをimportさせる。

必要があるということです。ちょっと遠回り。

Wikipediaのデータ

日本語のデータについては、こちらに入っています。
Index of /jawiki/
XML形式のファイルで、UTF-8です。
欲しいデータはWkipediaのごく一部のページでも、どこにあるかはわかりづらくなっています。

記事が入っているデータは、
Index of /jawiki/latest/

jawiki-latest-pages-articles.xml.bz2  

これになります。圧縮された状態で2.8GBくらいありますね。 分割されたデータもあり、それは

jawiki-latest-pages-articles1.xml.bz2  
jawiki-latest-pages-articles2.xml.bz2  
jawiki-latest-pages-articles3.xml.bz2  
...

のように連番になっています。

データを取り込むには?

Wikipedia:データベースダウンロード - Wikipedia

上にも書きましたが、下記コマンドを実行することを目指します。

$ bunzip2 -c pages-articles.xml.bz2 | php maintenance/importDump.php

データを取り込むまでに必要な準備

bzip2のインストール

人によっては入っていないと思いますので、まずはここから…。 CentOSならyumですぐにインストールできます。

$ sudo yum search bzip2
$ sudo yum install bzip2.x86_64
$ bzip2 -V
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

   Copyright (C) 1996-2010 by Julian Seward.

   This program is free software; you can redistribute it and/or modify
   it under the terms set out in the LICENSE file, which is included
   in the bzip2-1.0.6 source distribution.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   LICENSE file for more details.

bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.

解凍時は、こんなふうに使います。 特別難しいことはありません。

$ bunzip2 jawiki-latest-pages-articles.xml.bz2
記事のダウンロード
$ curl -O https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
importData.php のダウンロード

といいますか、MediaWikiソースコードのダウンロードです。
importData.phpは、MediaWikiソースコード内にある maintenance/importData.php です。
メンテナンスツールの一部なのでしょう。

今回はgit cloneで入手します。
MediaWiki · mediawiki

$ git clone https://phabricator.wikimedia.org/source/mediawiki.git
この時点で試しに実行

私が実行したときは、書かれたコマンドの準備ができたということで、(LocalSettings.phpはないものの)実行してみたのでした。
そうしましたら、

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
Error: You are missing some external dependencies.
MediaWiki now also has some external dependencies that need to be installed
via composer or from a separate git repo. Please see
https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries
for help on installing the required components.

私の場合「LocalSettings.php」がないという以外のエラーが出ました。
「いくつかの外部依存が足りていない。MediaWikiはいくつかの外部依存が必要で、それはcomposerで取ってくるか、gitから取ってきてくれ。詳しくはこのURLを見てね(超意訳)」
とのことなので、URL先を見てみる。

やり方はcomposerを使うか、gitで落としてきてもいいらしい。 composerがなかったので、私はgitで取得することにしました。

vendor/のダウンロード

MediaWikivendor/ ディレクトリをgit cloneしてくるだけなので楽です。

$ cd mediawiki/
$ git clone https://gerrit.wikimedia.org/r/p/mediawiki/vendor.git

そして改めて実行するわけですが、

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
Error: Missing one or more required components of PHP.
You are missing a required extension to PHP that MediaWiki needs.
Please install:
 * xml <https://secure.php.net/xml>

Errorが出ましたが、私の場合はPHPのモジュールとしてのxmlがインストールされてませんでした。
人によって足りないものが異なるでしょうから、一度実行してみるのがよいと思います。

phpの足りない拡張機能をインストール

ここは他のサイトに説明を譲ります。

そして再実行

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
A copy of your installation's LocalSettings.php
must exist and be readable in the source directory.
Use --conf to specify it.

ここで「LocalSettings.php」が必要だと言われます。
冒頭に書いたとおり、ここで諦めてMediaWikiをインストールして、その過程で生成しようと思います。

MediaWikiをインストール

ということで、まずはMediaWikiをブラウザから見れるように、ソースコードをドキュメントルートに持っていきます。
私の場合、ホームディレクトリに置いていたので移動します。

# cp -rp mediawiki/ /var/www/html/

下記にアクセスして、
http://localhost:8080/mediawiki/index.php

下記の画面が表示されれば、いったん成功になります。 f:id:hrroct:20181008234338p:plain

こんなエラーがCentOSで出る場合はSELinux関連の可能性があります。

[Sun Dec 16 23:21:25.810925 2018] [:error] [pid 12818] [client 10.0.2.2:60328] PHP Warning:  Unknown: failed to open stream: Permission denied in Unknown on line 0
[Sun Dec 16 23:21:25.810984 2018] [:error] [pid 12818] [client 10.0.2.2:60328] PHP Fatal error:  Unknown: Failed opening required '/var/www/html/mediawiki/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

MediaWikiの設定を行う

長い。道のりが長くて記事を分割したくなりますが、まだタイトルに行き着いていないのでがんばります。

f:id:hrroct:20181008234338p:plain

基本的にはポチポチクリックして進めていきます。

f:id:hrroct:20181230115232p:plain

ここは日本語そのままでよいでしょう。

f:id:hrroct:20181230115253p:plain

ここでDBの接続情報、ユーザーの情報を入れます。

f:id:hrroct:20181230115316p:plain

MySQLなので、ストレージエンジンの選択を行います。

f:id:hrroct:20181230115356p:plain

データ取得が目的なので、私の場合は何でもよかったです。

f:id:hrroct:20181230115426p:plain

飽きたので、とにかくインストールしてもらいます。

f:id:hrroct:20181230115546p:plain

これでインストールが完了します。

f:id:hrroct:20181230115624p:plain

ここでようやく、LocalSettings.phpをゲットできます。

ようやく実行

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml

したのですが…
私の環境では3日経ってもimportが終わりませんでした…
(メモリ8G、Core i5(第8世代)のノートPC)
Wikipediaのデータ量、恐るべし。

私のときは、下記エラーがたくさんできるので、設定しておいたほうが無難かも、です。

PHP Notice:  Undefined index: SERVER_NAME in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1374

もうひとつのやり方?

xml2sqlを使う手段もあるそうですが、どうやら非推奨のようです。

Data dumps/xml2sql - Meta

最後に

次はデータベースの中身の話ですが…
長くなるので、続きは別記事で。

以上でした!

TeraTermのカラーテーマをSolarizedに変更する

はじめに

私はWindowsを使う機会が多く、ターミナルエミュレータにはTera Termを使用しております。
マクロが便利で、手放せません。 https://ja.osdn.net/projects/ttssh2/

そんなTera Termにもカラースキーム、カラーテーマを変更する手段があります。
そのご紹介です。

変更の仕方

設定ファイルに、手でカラーコードを指定することになります。
これだとどう数字を設定したらいいかがわかりにくいですが…
Solarizedについては、コメントアウトされて既に書いてあります。
DarkもLightもいけます。

Tera Termの設定ファイルは「TERATERM.INI」です。
場所は、Windows7もWindows10も、同じだと思います。

C:\Program Files (x86)\teraterm\TERATERM.INI

2021/07/06 追記:
ないぞという方は、こちらにあるかも知れません。

%LOCALAPPDATA%\VirtualStore\Program Files (x86)\teraterm

このファイルを開いて、「Solarized」を検索してみてください。
コメントアウトされているところが複数あるので、全部Solarizedの設定と入れ替えてください。
例えば…

Before:

;      Text and background colors
;       for Normal characters
VTColor=255,255,255,0,0,0
; Solarized Dark
;VTColor=131,148,150,0,43,54
; Solarized Light
;VTColor=101,123,131,253,246,227

After:

;      Text and background colors
;       for Normal characters
;VTColor=255,255,255,0,0,0
; Solarized Dark
VTColor=131,148,150,0,43,54
; Solarized Light
;VTColor=101,123,131,253,246,227

こんな感じです。
ちょっとわかりづらいとは思いますが…

最後に

以上、小ネタでした。
Tera Termをご利用の方は、ぜひ一度試してみてください。
以上でした。

CygwinでGUI的にファイル/ディレクトリを開きたい場合

はじめに

小ネタです。
便利なので知らない方に共有です。

CUIコマンドラインから、

といったことが可能です。
Macではopenというコマンドで実装されているようです。

やり方

Cygwinを導入していれば、cygstart というコマンドが使えるはずです。
現在のディレクトリをエクスプローラーで開きたい場合には、

cygstart .

テキストファイルをGUIテキストエディタで開きたい場合には、

cygstart --edit sample.txt
# 関連付けされているアプリケーションで開きます

画像も開けます。

cygstart 20180303_001.png

画像をペイントで編集したい場合はこう。

cygstart --edit 20180303_001.png

その他の使い方は、ヘルプをぜひ御覧ください。

cygstart --help

おまけ

cygstart と打つのが煩わしい私は、open で起動できるようにaliasを設定しています。
ご参考までに。

# .bashrc
alias open="cygstart"

以上でした!

VirtualBox + CentOS7 でApacheをインストール

はじめに

Apacheだけを動かすケースはないでしょうが、単発ですが投稿します。
バージョンは下記のとおりです。

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Jun 27 2018 13:48:59

手順

インストールと起動設定

yumで簡単に入れられます。
勝手に起動するように設定も行っておきます。

# yum install httpd

# systemctl start httpd
# systemctl enable httpd

ファイアウォールにポート番号を追加

80を許可してあげます。

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --reload

ポートフォワーディング

VMの場合はこの設定が必要です。
実行中のVMから、「デバイス」→「ネットワーク」とたどって、 f:id:hrroct:20180311212642p:plain

「高度」をクリックして、「ポートフォワーディング」をクリックして、 f:id:hrroct:20180311213122p:plain

ポート番号8080で来たときに、80に転送してあげる。 f:id:hrroct:20180715212131p:plain

最後にアクセス

http://localhost:8080/ にアクセスすれば…

f:id:hrroct:20181002003214p:plain

こんな画面が表示されます。 これで完了です。

以上でした!