🐍

【Windows】Pythonでwikiextractorを使い、WikipediaのXMLファイルからテキストを取り出す

2023/11/25に公開

確認済みの環境

※コマンドプロンプトで、ダウンロードディレクトリで作業しました。

Wikipediaから記事のXMLファイルをダウンロードする

今回は、いくつかのデータのみ利用したかったため、以下の方法でダウンロードしました。
このページで、Wikipediaの記事のXMLファイルをダウンロードすることができます。
https://ja.wikipedia.org/wiki/特別:データ書き出し
自然言語処理ですべてのファイルをダウンロードしたい場合は、以下などからダウンロードすると良いと思います。
https://dumps.wikimedia.org/jawiki/
詳しくは、以下のサイトをご覧くだささい。
https://ja.wikipedia.org/wiki/Wikipedia:データベースダウンロード

wikiextractorを使う(エラー版)

pip install wikiextractor

その後、

wikiextractor ファイル名.xml

以下のエラーが出ます。

エラー内容
INFO: Preprocessing 'ファイル名.xml' to collect template definitions: this may take some time.
INFO: Loaded 180 templates in 0.0s
INFO: Starting page extraction from ファイル名.xml.
Traceback (most recent call last):
  File "C:\Users\略\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\略\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\略\wikiextractor.exe\__main__.py", line 7, in \<module\>
  File "C:\Users\略\wikiextractor\WikiExtractor.py", line 640, in main
    process_dump(input_file, args.templates, output_path, file_size,
  File "C:\Users\略\wikiextractor\WikiExtractor.py", line 359, in process_dump
    Process = get_context("fork").Process
  File "C:\Users\略\multiprocessing\context.py", line 239, in get_context
    return super().get_context(method)
  File "C:\Users\略\multiprocessing\context.py", line 193, in get_context
    raise ValueError('cannot find context for %r' % method) from None
ValueError: cannot find context for 'fork

wikiextractorを使う(エラー対応版)

pip uninstall wikiextractor

※ここで、pip listしてアンインストールを確認

pip install git+https://github.com/prokotg/wikiextractor

※ここで、pip listして確認

wikiextractor ファイル名.xml

処理されたものは、wikiextractorを実行した場所(つまり、現在の作業ディレクトリ)の、textディレクトリの中に保存されます。
AAやABなどが作成されていて、その中に、ファイルが保存されているはずです。
記事の形式は、以下のような形式になっています。

<doc id="" revid="" url="" title="">
...
(記事本文)
...
</doc>

12月12日追記 コメントアウトについて

&lt;!-- (<!--)や --&gt; (-->)があると、xml上、コメントアウトということになってしまい、wikiextractorでテキスト化するときに無視されてしまうようです。
xmlのコメントについては、コメントを記述するを参照

Discussion