0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

言語処理100本ノックやってみてる その2 第3章25

Last updated at Posted at 2024-07-05

前回の投稿から早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日追記

26. 強調マークアップの除去
jisyo={key:value.replace('\'','') if re.search('\'{2,}(.*?)\'{2,}',value) else value for key,value in re.findall('\|(.*?)=([\s\S]*?)\n',text[88:3104])}
27. 内部リンクの除去
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のページのサンプルをほとんどそのまま書いただけ

29.国旗画像のURLを取得する
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本ノック第三章完

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?