プログラミング
記事内に商品プロモーションを含む場合があります

wikipediaのページを取得する方法(特定ページ、ランダムにN記事を取得)

tadanori

大規模言語モデル(LLM)を使った実験を行う際、何かしらのテキストデータが欲しいことがあります。ここではテキストをWikipediaから取得する方法を解説します。

テキストを使って近傍検索をする方法は以下を参照してください

LangChainの近傍探索ライブラリFaiss(類似検索)の使い方を解説
LangChainの近傍探索ライブラリFaiss(類似検索)の使い方を解説

はじめに

大規模言語モデルを使った学習実験、Langchainの実験などをする場合、日本語のテキストを集めたい場合があります。

この記事では、Wikipediaの記事を収集するために便利な関数をいくつか紹介したいと思います。

以下、Pythonで作成した関数です。テンプレート的に使ってもらえたらと思います。

特定のページを取得する

get_wikipedia_page()

特定のページを読み込むための関数です。titleにページのタイトルを入れると、ページをダウンロードして返します。

import requests

def get_wikipedia_page(title):
    url = "https://ja.wikipedia.org/w/api.php"
    params = {
        "action": "query",
        "format": "json",
        "titles": title,
        "prop": "extracts",
        "exlimit": 1,
        "explaintext": True,
        "redirects": 1,
    }

    response = requests.get(url, params=params)
    data = response.json()
    page = next(iter(data['query']['pages'].values()))
    
    return page.get("extract", "")

get_wikipedia_pageの使い方

get_wikipedia_page()の引数は、ページタイトルです。ページタイトルはブラウザのURLのリンク部分を見ることで確認できます。

以下のプログラムでは、取得したページのテキストに名前(wiki_page.txt)をつけて保存しています。

page_content = get_wikipedia_page("少額投資非課税制度")
file_path = "./wiki_page.txt"
with open(file_path, 'w', encoding='utf-8') as file:
    file.write(page_content)

ランダムにNページのインデックスを取得する

get_random_index()

ランダムにNページのインデックスを取得する関数です。引数は、取得したいページ数です。実行すると、ページのidとタイトルをタプル形式で返します。

import requests

def get_random_index(n) :
    url = "https://ja.wikipedia.org/w/api.php"

    params = {
        "action": "query",
        "format": "json",
        "list": "random",
        "rnlimit": f"{n}",
        "rnnamespace": "0",
    }

    response = requests.get(url, params=params)
    data = response.json()


    index = []
    for e in data['query']['random']:
        index.append((e['id'], e['title']))
    
    return index

get_random_indexの使い方①(インデックスを取得)

以下のように呼び出すだけです。

index = get_random_index(3)
print(index)

# [(1085797, '豊田市立山之手小学校'), (2417492, 'ドン・ムーマウ'), (354425, 'ジャン・ピエール・ブルギニョン')]

get_random_indexの使い方②(ランダムにページを取得し保存)

ランダムにインデックスを10件取得し、ページのテキストをwiki_{id}.txtの形式で保存する例です。この例では、先ほど定義したページを取得する関数get_wikipedia_page()も利用します。

index = get_random_index(10)
for id, title in index:
    file = f"wiki_{id}.txt"
    print(f"{title}--> '{file}'")
    page_content = get_wikipedia_page(title)
    with open(file, 'w',  encoding='utf-8') as file:
        file.write(page_content)

まとめ

wikipediaの内容をテキストファイルでダウンロードして保存する方法について、主に以下のサイトを参考に自分向けにカスタムし、関数化してみました。

wikipediaのapi.phpの説明ページ、結構分かりにくくて苦労しました。

おすすめ書籍

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました