用户:Willy1018/处理简繁页面不一致问题
外观
import pywikibot
from opencc import OpenCC
site = pywikibot.Site('zh', 'wikipedia')
cc_to_simp = OpenCC('t2s')
cc_to_trad = OpenCC('s2t')
checked = set()
results = {
'type1': [],#純簡繁差異,兩者皆非重新導向(
'type2': [],#純簡繁差異,一為重新導向,但非至另一頁
'type3': []#純簡繁差異,兩者皆為重新導向,但分別連至兩頁
}
def is_redirect_to(page, target_title):
try:
if not page.isRedirectPage():
return False
return page.getRedirectTarget().title(with_ns=False) == target_title
except:
return False
def check_title(title):
title_simp = cc_to_simp.convert(title)
title_trad = cc_to_trad.convert(title)
if title_simp == title_trad:
return
key = tuple(sorted([title_simp, title_trad]))
if key in checked:
return
checked.add(key)
try:
page_simp = pywikibot.Page(site, title_simp)
page_trad = pywikibot.Page(site, title_trad)
if not (page_simp.exists() and page_trad.exists()):
return
simp_redir = page_simp.isRedirectPage()
trad_redir = page_trad.isRedirectPage()
if not simp_redir and not trad_redir:
results['type1'].append((title_simp, title_trad))
elif simp_redir != trad_redir:
redir_page = page_simp if simp_redir else page_trad
other_title = title_trad if simp_redir else title_simp
if not is_redirect_to(redir_page, other_title):
results['type2'].append((title_simp, title_trad))
elif simp_redir and trad_redir:
simp_target = page_simp.getRedirectTarget().title()
trad_target = page_trad.getRedirectTarget().title()
if simp_target != trad_target:
results['type3'].append((title_simp, title_trad))
except Exception as e:
print(f'Error with {title}: {e}')
for page in site.allpages(namespace=0, total=5000):
check_title(page.title())
for k, v in results.items():
if not v:
continue
print(f'\n== {k} 類型問題頁面 ==')
print('{| class="wikitable sortable"')
print('! 簡體標題 !! 編輯 !! 繁體標題 !! 編輯')
for a, b in sorted(set(v)):
print(f'|-\n| [[{a}]] || {{{{Edit|1={a}}}}} || [[{b}]] || {{{{Edit|1={b}}}}}')
print('|}')
输出:
type2 类型问题页面
[编辑]简体标题 | 编辑 | 繁体标题 | 编辑 |
---|---|---|---|
115师 | 115师 |
type3 类型问题页面
[编辑]简体标题 | 编辑 | 繁体标题 | 编辑 |
---|---|---|---|
020国道 | 020国道 |