Beispiel #1
0
from knock20 import open_england
import re

# 説明文込み
# ptn = re.compile(r'\[\[(ファイル|File):(.*)\]\]')

# リンクのみ
ptn = re.compile(r'\[\[(ファイル|File):(.*)\|thumb.*\]\]')

print('\n'.join(
    ptn.search(l).group(2) for l in open_england() if ptn.search(l)))

# 24. ファイル参照の抽出
# 記事から参照されているメディアファイルをすべて抜き出せ.
Beispiel #2
0
from knock20 import open_england
import re

ptn = re.compile(r'\[\[Category:.*?\]\]')

print(''.join(l for l in open_england() if ptn.search(l)))

# 21. カテゴリ名を含む行を抽出
# 記事中でカテゴリ名を宣言している行を抽出せよ.

# [[Category:イギリス|*]]
# [[Category:英連邦王国|*]]
# [[Category:G8加盟国]]
# [[Category:欧州連合加盟国]]
# [[Category:海洋国家]]
# [[Category:君主国]]
# [[Category:島国|くれいとふりてん]]
# [[Category:1801年に設立された州・地域]]
Beispiel #3
0
from knock20 import open_england
import re


ptn = re.compile(r'\[\[Category:(.*)\]\]')

print('\n'.join(ptn.search(l).group(1) for l in open_england() if ptn.search(l)))


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

# イギリス|*
# 英連邦王国|*
# G8加盟国
# 欧州連合加盟国
# 海洋国家
# 君主国
# 島国|くれいとふりてん
# 1801年に設立された州・地域
Beispiel #4
0
from knock20 import open_england
from pprint import pprint
import regex
import urllib.parse
import urllib.request
import json


# 再帰的な{}の正規表現パターン
ptn1 = regex.compile(r'(?<rec>\{(?:[^{}]+|(?&rec))*\})')
# 基礎情報のフィールド名と値にマッチする正規表現パターン
ptn2 = regex.compile(r'\|(.*?) = (.*?)(?=\n(\||\}))',
                     flags=(regex.M | regex.S))

data = open_england().read()

for m in ptn1.finditer(data):
    if m.group('rec').startswith('{{基礎情報'):
        basic_info = m.group('rec')
        break

category_dic = {}
for m in ptn2.finditer(basic_info):
    value = m.group(2).replace("'''", '').replace("''", '')
    value = regex.sub(r'(\[\[(.*\|)*?(?P<d>[^|]*?)\]\])', r'\g<d>', value)
    value = regex.sub(r'(\{\{(.*\|)*?(?P<d>[^|]*?)\}\})', r'\g<d>', value)
    value = regex.sub(r'<br( *?/>|>)', '', value)
    value = regex.sub(r'<ref(.*?)(</ref>|/>)', '', value, flags=(regex.M | regex.S))
    category_dic[m.group(1)] = value

Beispiel #5
0
from knock20 import open_england
import re

ptn = re.compile(r'(=(=+)(.*?)=\2)')

print('\n'.join(f'{len(ptn.search(l).group(2))}\t{ptn.search(l).group(3)}'
                for l in open_england() if ptn.search(l)))

# 23. セクション構造
# 記事中に含まれるセクション名とそのレベル(例えば"== セクション名 =="なら1)を表示せよ.

# 1       国名
# 1       歴史
# 1       地理
# 2       気候
# 1       政治
# 1       外交と軍事
# 1       地方行政区分
# 2       主要都市
# 1       科学技術
# 1       経済
# 2       鉱業
# 2       農業
# 2       貿易
# 2       通貨
# 2       企業
# 1       交通
# 2       道路
# 2       鉄道
# 2       海運
# 2       航空