MedieWiki(3)からの続き
Q(koshix):日本語Wikipediaの物理学者記事にあるテンプレートやモジュールのうちで主要なものを,自分のMediaWikiサイト,Fisica Wiki に移植するプロジェクトの件です。codexにお願いして,koshi@mba2020 ~ % ls -al jawiki-template-testtotal 208drwxr-xr-x 17 koshi staff 544 5月 1 13:40 .drwxr-x---+ 131 koshi staff 4192 5月 5 16:40 ..-rw-r--r-- 1 koshi staff 464 5月 1 11:17 articles.txt-rw-r--r-- 1 koshi staff 749 5月 1 13:41 core_export_pages.txt-rw-r--r-- 1 koshi staff 659 5月 1 13:02 export_pages.txt-rw-r--r-- 1 koshi staff 7912 5月 1 12:58 extract_template_dependencies.py-rw-r--r-- 1 koshi staff 8317 5月 1 11:29 extract_templates.py-rw-r--r-- 1 koshi staff 1614 5月 1 13:01 make_export_pages.py-rw-r--r-- 1 koshi staff 1956 5月 1 12:53 make_module_list.py-rw-r--r-- 1 koshi staff 3488 5月 1 13:33 make_template_export_pages.py-rw-r--r-- 1 koshi staff 307 5月 1 12:59 modules_needed.txt-rw-r--r-- 1 koshi staff 2866 5月 1 13:08 README.md-rw-r--r-- 1 koshi staff 17 4月 30 22:37 requirements.txt-rw-r--r-- 1 koshi staff 1345 5月 1 12:19 template_dependencies.csv-rw-r--r-- 1 koshi staff 2284 5月 1 13:35 template_pages.txt-rw-r--r-- 1 koshi staff 18146 5月 1 11:54 template_usage.csvこんな状況になっています。自分がなにをしたか,してもらったかが,よくわからなくなっているので,状況を整理して,現在の進行状況がどうなっているか,これからどうすればいいか,を教えてください。必要があれば,それぞれのファイルや現在のFisica Wikiの内容を確認してお知らせすることが出来ます。どうぞよろしくお願いいたします。A(ChatGPT):状況はかなり整理できます。結論から言うと、いまの `jawiki-template-test` は、日本語Wikipediaの物理学者記事を材料にして、Fisica Wikiへ移植すべきテンプレート・モジュールの候補リストを作るための作業ディレクトリになっています。ただし、ここにあるファイルだけを見るかぎり、これはまだ「移植そのもの」ではなく、主に次の段階まで進んだ状態です。・第1段階:物理学者記事を調べる・第2段階:それらの記事で使われているテンプレートを抽出する・第3段階:そのテンプレート群に必要な関連テンプレート・モジュールを推定する・第4段階:日本語Wikipediaの特別:データ書き出しに渡すページ一覧を作るここまでは、かなり進んでいます。一方で、Fisica Wiki側に何が実際に取り込まれていて、何がまだ赤リンク・Luaエラー・TemplateStylesエラーになっているかは、この一覧だけではまだ確定できません。ファイルごとの意味は、おそらく次のようになります。`articles.txt` は、調査対象にした物理学者の記事名リストです。たとえば「ハンス・ベーテ」「ニールス・ボーア」「湯川秀樹」のような記事名が入っているはずです。ここが出発点です。`extract_templates.py` は、`articles.txt` にある記事を日本語Wikipediaから取得して、それぞれの記事中に現れるテンプレートを抽出するスクリプトだと思われます。その結果が `template_usage.csv` です。`template_usage.csv` は、どの記事でどのテンプレートが使われているかを記録した表です。Fisica Wikiに物理学者記事を移すとき、どのテンプレートが頻出するかを見るための中心的な資料です。`extract_template_dependencies.py` は、テンプレートがさらに別のテンプレートやモジュールを呼んでいないかを調べるスクリプトです。Wikipediaテンプレートは単体では動かず、内部で `{{Ifempty}}` や `{{Citation}}` や `#invoke:Citation/CS1` などを呼ぶため、この依存関係の抽出が重要です。`template_dependencies.csv` は、その依存関係の表です。たとえば「テンプレート:Cite web は モジュール:Citation/CS1 を必要とする」といった情報が入っているはずです。`make_module_list.py` は、依存関係の中から `モジュール:` 名前空間のものだけを抜き出すためのスクリプトでしょう。`modules_needed.txt` は、必要と推定されたLuaモジュール一覧です。サイズが307バイトなので、かなり小さいリストです。過去の経緯から考えると、`モジュール:Citation/CS1` 系、`モジュール:Arguments`、`モジュール:If empty`、`モジュール:String`、`モジュール:TableTools`、`モジュール:Yesno` あたりが入っている可能性があります。`make_template_export_pages.py` は、必要なテンプレートを日本語Wikipediaの「特別:データ書き出し」に渡しやすいページ名リストへ整形するスクリプトだと思われます。`template_pages.txt` は、移植候補のテンプレートページ一覧です。サイズが2284バイトなので、ある程度の数があります。`make_export_pages.py` は、テンプレートとモジュールなどを合わせて、最終的なエクスポート対象ページ一覧を作るスクリプトでしょう。`export_pages.txt` は、最初に作ったエクスポート用ページリストだと思われます。`core_export_pages.txt` は、より絞り込んだ「主要部分だけ」のエクスポート用ページリストだと思われます。名前から見ると、全候補ではなく、Fisica Wikiでまず動かすべき中核テンプレート・モジュールをまとめたものです。`README.md` は、Codexが作った作業説明書です。ここに実行手順や前提が書かれているはずです。まず読むべきファイルです。`requirements.txt` はPythonスクリプトに必要なライブラリです。17バイトなので、たぶん `requests` など最小限だけでしょう。現時点の進行状況を、作業フェーズで言うとこうです。1.まず、分析用ツール群は作られている。これはすでに達成されています。`extract_templates.py`、`extract_template_dependencies.py`、`make_export_pages.py` などがそろっているので、Codexは「日本語Wikipediaからテンプレート使用状況を調べ、移植候補リストを作る」ための小さな道具立てを用意したことになります。2.次に、物理学者記事に使われるテンプレート候補も抽出済みです。`template_usage.csv`、`template_dependencies.csv`、`template_pages.txt`、`modules_needed.txt` が存在するので、少なくとも一度は処理が走っています。3.さらに、日本語WikipediaからXMLエクスポートするためのページ一覧も作成済みです。`export_pages.txt` と `core_export_pages.txt` があるので、次の作業はこれを使って日本語Wikipediaの「特別:データ書き出し」からXMLを取得し、Fisica Wikiの「特別:データ取り込み」で取り込むことになります。(中略)これからやるべきことは、いきなり再インポートではなく、まず「現在地の棚卸し」です。まずMac側で、次のコマンドを実行して内容を確認してください。(後略)
python - <<'PY'
import requests
API_URL = "https://nucleus.sakura.ne.jp/wiki/api.php"
text = """
これは仮リンクのテストです。
{{仮リンク|Test Person|en|Test person}}
"""
r = requests.get(API_URL, params={
"action": "parse",
"format": "json",
"contentmodel": "wikitext",
"text": text,
"prop": "text",
"formatversion": "2",
}, timeout=30)
data = r.json()
html = data.get("parse", {}).get("text", "")
print(html[:3000])
PY