欠損値(NaN)取り扱い方法を解説 | 機械学習におけるデータ予測精度向上のための手法
tadanori
Aru's テクログ(Aruaru0)
大規模言語モデル(LLM)を使った実験を行う際、何かしらのテキストデータが欲しいことがあります。ここではテキストをWikipediaから取得する方法を解説します。
テキストを使って近傍検索をする方法は以下を参照してください
大規模言語モデルを使った学習実験、Langchainの実験などをする場合、日本語のテキストを集めたい場合があります。
この記事では、Wikipediaの記事を収集するために便利な関数をいくつか紹介したいと思います。
以下、Pythonで作成した関数です。テンプレート的に使ってもらえたらと思います。
特定のページを読み込むための関数です。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()
の引数は、ページタイトルです。ページタイトルはブラウザの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ページのインデックスを取得する関数です。引数は、取得したいページ数です。実行すると、ページの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
以下のように呼び出すだけです。
index = get_random_index(3)
print(index)
# [(1085797, '豊田市立山之手小学校'), (2417492, 'ドン・ムーマウ'), (354425, 'ジャン・ピエール・ブルギニョン')]
ランダムにインデックスを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の説明ページ、結構分かりにくくて苦労しました。