前回の投稿から早2週間半、たぶん合計60時間100時間ぐらいかけてタグが英語になってる一部を除いてどの国も引いてこれるプログラムを書くという修行をしちゃってた。正規表現の学習にちょうど良かったかもしれない。
以下は前回定義した関数を使って呼び出したtextから第三章の25番目の問題の回答
検索かけても少なくともトップのほうには出てこないしほかの人の回答とかまだ見てないけどネストされた括弧の数を合わせて取得できる正規表現とか作れないのかだいぶ疑問。
re.match('{{基礎情報[\s\S]+?\|注記.*?=.*?\n}}',text[88:])
<re.Match object; span=(0, 3016), match='{{基礎情報 国\n|略名 =イギリス\n|日本語国名 = グレートブリテン及び北アイルランド連>
for key,value in re.findall('\|(.*?)=([\s\S]*?)\n',text[88:3104]):
list[key]=value
第三章21から24問目も追記 以下2024/07/09
21問め
category_lines=[x for x,l in enumerate(text.splitlines()) if re.search('\[\[(Category|カテゴリ):.+?\]\]',l)]
22問め
category_names=[match.group(2) for x,l in enumerate(text.splitlines()) if (match:=re.search('\[\[(Category|
カテゴリ):(.+?)\]\]',l))]
23問め タプルで内包表記できることにいまきがついたけどそのまま
for x,l in enumerate(text.splitlines()):
... if match:=re.search('(={2,}) *?(.+?) *?={2,}',l):
... print(len(match.group(1)),match.group(2))
24問め
file_names=[tag.group(3) for l in text.splitlines() if (tag:=re.search('(\[\[|\{\{)(ファイル|file|Audio|視聴
):.*?([^|]+?\.[a-z]{3}?).*?(\]\]|\}\})',l))]
---以下2024年7月9日追記
jisyo={key:value.replace('\'','') if re.search('\'{2,}(.*?)\'{2,}',value) else value for key,value in re.findall('\|(.*?)=([\s\S]*?)\n',text[88:3104])}
jisyo={key:re.sub('[\[\]\']','',value) if (m:=re.search('(\'{2,}|\[\[)(.*?)(\'{2,}|\]\])',value)) else value for key,value in re.findall('\|(.*?)=([\s\S]*?)\n',text[88:3104])}
28もんめMediaWikiマークアップの除去
ほかの問題もpythonぽい書き方や正規表現で極力どうにかする事にこだわらなければーみたいな話だけど時間をかけてるけど、この28問めも見た目の問題で時間かければどうにでもなりそうな気がするからパスする事に
29もんめ国旗画像のURLを取得する
ウィキのAPIで接続してなんたらーという事なんで第2章からの流れで使ってるwslのubunntsの何かと特に連携することもなく使ってたターミナルでpythonのライブラリをインストールしようとしたところでスーパーユーザーにログインできなくされてるみたいで、再インストール2回目の今の時点で以下のエラーという事にされてるっぽい状態。どうすりゃいいんだこれwslの登録を解除ですぐ解決
CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx' を WSL2 にアタッチできませんでした: 指定されたファイルが見つかりません。
Error code: Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_FILE_NOT_FOUND
以下2024/07/19追記
ウィキAPIのページのサンプルをほとんどそのまま書いただけ
ses=req.Session()
URL = "https://en.wikipedia.org/w/api.php"
PARAMS={'action': 'query', 'format': 'json', 'prop': 'imageinfo', 'titles': 'File:'+jisyo['基礎情報 国']['国旗画像'], 'iiprop': 'url'}
res=ses.get(url=URL,params=PARAMS)
res.json()['query']['pages']['23473560']['imageinfo'][0]['url']
'https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg
言語処理100本ノック第三章完