👩💻
言語処理100本ノック 2020 (Rev 2) 第3章: 正規表現 22. カテゴリ名の抽出
問題
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
などのイテラブルオブジェクト
の各要素を任意の変数名
で取り出し式
で評価、その結果を要素とする新たなリストが返されます。
参考記事
第3章: 正規表現
Pythonで文字列を置換(replace, translate, re.sub, re.subn)
Pythonリスト内包表記の使い方
Discussion