사용자:티첼/DisamList.py
< 사용자:티첼
# -*- encoding: utf-8 -*-
# 출처: [[사용자:Klutzy:bot/script]]
import wikipedia, pagegenerators, catlib
from collections import defaultdict
def title_key(title):
if isinstance(title, str): title = title.decode('utf-8')
cho = (ord(title[0]) - ord(u'가'))/588
if 0 <= cho and cho < 19:
return u'ㄱㄱㄴㄷㄷㄹㅁㅂㅂㅅㅅㅇㅈㅈㅊㅋㅌㅍㅎ'[cho]
else: return u'기타'
def combine(data, key, f):
data.sort()
res = u""
res += u"== %s ==\n"%key
res += u" -\n".join(f(i) for i in data)
return res
def output(data, f):
res = u""
for key in sorted(data.keys()): # ㄱ, ㄴ, ..., ㅍ, ㅎ, 기타
lis = data[key]
res += combine(lis, key, f)
res += u"\n\n"
return res
def write_page(title, data, sub=False):
page = wikipedia.Page(wikipedia.getSite(), title)
text = page.get()
head = text.split(u"==", 1)[0]
tail = u""
if not sub: # 서브페이지는 푸터가 없는 걸로 간주
tailkey = u"[[분류:"
tail = tailkey + text.split(tailkey, 1)[1]
new_text = head + data + tail
page.put(new_text, u"robot: 동음이의 목록 자동 갱신")
def main():
u"""
[[위키백과:동음이의어 문서의 목록]],
[[위키백과:(동음이의) 문서의 목록]]을
자동으로 관리합니다.
문서에서 "=="로 시작하는 곳부터 "[[분류:"가 나오기 직전의
모든 부분을 실제 편집하는 공간으로 간주합니다.
"""
data1 = defaultdict(list) # 동음이의어
data2 = defaultdict(list) # (동음이의)
title = u"분류:동음이의어 문서"
cat = catlib.Category(wikipedia.getSite(), title)
for page in cat.articles():
title = page.title()
key = title_key(title)
t = u" (동음이의)"
if title.endswith(t):
title = title[:-len(t)]
data2[key].append(title)
else:
data1[key].append(title)
for key in data1.keys():
title = u"위키백과:동음이의어 문서의 목록/%s"%key
res = combine(data1[key], key, lambda s: u"[[%s]]"%s)
write_page(title, res, sub=True)
res = output(data2, lambda s: u"[[%s (동음이의)|%s]]"%(s,s))
write_page(u"위키백과:(동음이의) 문서의 목록", res)
try:
main()
finally:
wikipedia.stopme()