Esempio n. 1
0
def get_cleaned_data():
    key_value = get_basic_info()

    # https://docs.python.org/ja/3/library/re.html#re.sub
    # (?:...)
    # 普通の丸括弧の、キャプチャしない版です。丸括弧で囲まれた正規表現にマッチしますが、このグループがマッチした部分文字列は、マッチを実行したあとで回収することも、そのパターン中で以降参照することも できません 。
    # 文字列型 repl 引数では、上で述べた文字エスケープや後方参照に加えて、
    # \g<name> は (?P<name>...) 構文で定義された name という名前のグループがマッチした部分文字列を使い、
    # \g<number> は対応するグループ番号を使います。よって \g<2> は \2 と等価ですが、 \g<2>0 のような置換
    # においても曖昧になりません。 \20 は、グループ 20 への参照として解釈され、グループ 2 への参照にリテラル文字
    # '0' が続いたものとしては解釈されません。後方参照 \g<0> は正規表現とマッチした部分文字列全体で置き換わります。

    # *?, +?, ??
    # '*' 、 '+' 、および '?' 修飾子は全て 貪欲 (greedy) マッチで、できるだけ多くのテキストにマッチします。この挙動が望ましくない時もあります。例えば正規表現 <.*> が '<a> b <c>' に対してマッチされると、 '<a>' だけでなく文字列全体にマッチしてしまいます。修飾子の後に ? を追加すると、 非貪欲 (non-greedy) あるいは 最小 (minimal) のマッチが行われ、できるだけ 少ない 文字にマッチします。正規表現 <.*?> を使うと '<a>' だけにマッチします。
    # [^\]]+
    #  [^5] は '5' を除くあらゆる文字にマッチ
    pattern1 = re.compile(
        r'''
        \[\[
            (?:[^\]]+\|)
            (.+?)
        \]\]
    ''', re.VERBOSE)

    #('元首等肩書', '[[イギリスの君主|女王]]'))
    #→[[女王]]
    #('元首等肩書', '女王'), ('元首等肩書', '[[イギリスの君主|女王]]'))

    # (('確立形態3', '1800年連合法)'), ('確立形態3', '[[グレートブリテン及びアイルランド連合王国]]建国<br />([[連合法 (1800年)|1800年連合法]])'))
    #

    pattern2 = re.compile(
        r'''
        \[\[
            (.+?)
        \]\]
    ''', re.VERBOSE)

    #(('確立形態3', 'グレートブリテン及びアイルランド連合王国建国<br />(連合法 (1800年)|1800年連合法)'), ('確立形態3', '[[グレートブリテン及びアイルランド連合王国]]建国<br />([[連合法 (1800年)|1800年連合法]])'))

    # https://qiita.com/hidei/items/05634f810212e8ce0870
    # re.sub(r'(hoge)', '\\1bar', 'hogefoo')
    # re.sub(r'(第)三', '\g<1>3', '第三')
    # zip(result, key_value)

    result1 = [(key, re.sub(r'\'\'+', '', value))
               for (key, value) in key_value]
    result2 = [(key, re.sub(pattern1, "\g<1>", value))
               for (key, value) in result1]
    # value = 'abcde'
    # patten1 = r'a(bcd)e'
    # \g<1> = "bcd"
    # results = "bcd"
    result3 = [(key, re.sub(pattern2, "\g<1>", value))
               for (key, value) in result2]
    # (('国章リンク', '(国章)'), ('国章リンク', '([[イギリスの国章|国章]])'))
    # print('\n'.join(map(str, zip(result3, key_value))))
    return result3
Esempio n. 2
0
# coding: utf-8

import re
from q25 import get_basic_info


def remove_emphasis_expression(text):
    return re.sub(r'(\'{2,3}|\'{5})(.+?)\1', r'\2', text)


if __name__ == '__main__':
    with open('britain.txt', 'r') as f:
        text = f.read()

    d = get_basic_info(text)
    res = {k: remove_emphasis_expression(v) for k, v in d.items()}

    print(res)
Esempio n. 3
0
# coding: utf-8

import urllib.parse
import urllib.request
import json
from q25 import get_basic_info

if __name__ == '__main__':
    with open('britain.txt', 'r') as f:
        text = f.read()

    d = get_basic_info(text)

    params_str = urllib.parse.urlencode({
        'action': 'query',
        'prop': 'imageinfo',
        'titles': 'File:{0}'.format(d['国旗画像']),
        'iiprop': 'url',
        'format': 'json'
    })

    with urllib.request.urlopen('https://www.mediawiki.org/w/api.php?{0}'.format(params_str)) as response:
        res = json.loads(response.read().decode('utf-8'))['query']['pages']['-1']['imageinfo'][0]['url']

    print(res)
Esempio n. 4
0
File: q26.py Progetto: kdxu/nlp100
"""
26. 強調マークアップの除去
25の処理時に,テンプレートの値からMediaWikiの強調マークアップ(弱い強調,強調,強い強調のすべて)を除去してテキストに変換せよ(参考: マークアップ早見表).
他との区別(斜体)	''他との区別''
強調(太字)		'''強調'''
斜体と強調	'''''斜体と強調'''''
https://ja.wikipedia.org/wiki/Help:%E6%97%A9%E8%A6%8B%E8%A1%A8
"""
from q25 import get_basic_info
import re

key_value = get_basic_info()
result = [(key, re.sub(r'\'\'+', '', value)) for (key, value) in key_value]
print('\n'.join(map(str, result)))
# https://uxmilk.jp/8662