👩‍💻

言語処理100本ノック 2020 (Rev 2) 第3章: 正規表現 22. カテゴリ名の抽出

2023/01/08に公開約1,100字

問題

22. カテゴリ名の抽出

記事のカテゴリ名を(行単位ではなく名前で)抽出せよ.

solution22.py
import pandas as pd

df = pd.read_json('chapter03/jawiki-country.json.gz', lines=True, compression='infer')
text_uk = df.query('title=="イギリス"')['text'].values[0]
splited_text_uk = text_uk.split('\n')
ans = list(filter(lambda x: '[Category:' in x, splited_text_uk))

ans = [a.replace('[[Category:', '').replace('|*', '').replace(']]', '').replace('|元','') for a in ans]
print(ans)
output
['イギリス', 'イギリス連邦加盟国', '英連邦王国', 'G8加盟国', '欧州連合加盟国', '海洋国家', '現存する君主国', '島国', '1801年に成立した国家・領域']

この問題では、21. カテゴリ名を含む行を抽出で取得した結果に対して、replace()メソッドを使い文字列を指定して置換します。リスト内包表記(List comprehensions)を使ってシンプルに置換処理されたリストを生成します。

[式 for 任意の変数名 in イテラブルオブジェクト]

リストやタプル、rangeなどのイテラブルオブジェクトの各要素を任意の変数名で取り出しで評価、その結果を要素とする新たなリストが返されます。

https://github.com/kurokawa5/nlp100_2020/blob/main/chapter03/solution22.py

参考記事

第3章: 正規表現
Pythonで文字列を置換(replace, translate, re.sub, re.subn)
Pythonリスト内包表記の使い方

Discussion

ログインするとコメントできます