Last active
June 27, 2016 23:44
-
-
Save whym/9291a7a33dba81dfa9f0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2 | |
# -*- coding: utf-8 -*- | |
import sys | |
import oursql | |
import os | |
sys.path.append(os.environ['PWB']) | |
from scripts import interwiki | |
import pywikibot | |
lx = [ | |
(u'af', u'アフリカーンス語', u'Afrikaans'), | |
(u'gl', u'ガリシア語', u'Galician'), | |
(u'nl', u'オランダ語', u'Dutch'), | |
(u'tl', u'タガログ語', u'Tagalog'), | |
(u'ms', u'マレー語', u'Malay'), | |
(u'lo', u'ラーオ語', u'Lao'), | |
(u'cdo', u'閩東語', u'Min Dong'), | |
(u'mt', u'マルタ語', u'Maltese'), | |
(u'ug', u'ウイグル語', u'Uyghur'), | |
(u'fr', u'フランス語', u'French'), | |
(u'he', u'ヘブライ語', u'Hebrew'), | |
(u'zh', u'中国語', u'Chinese'), | |
(u'mg', u'マダガスカル語', u'Malagasy'), | |
(u'ne', u'ネパール語', u'Nepali'), | |
(u'fa', u'ペルシア語', u'Persian'), | |
(u'en', u'英語', u'English'), | |
(u'pl', u'ポーランド語', u'Polish'), | |
(u'sw', u'スワヒリ語', u'Swahili'), | |
(u'ur', u'ウルドゥー語', u'Urdu'), | |
(u'uz', u'ウズベク語', u'Uzbek'), | |
(u'eu', u'バスク語', u'Basque'), | |
(u'hu', u'ハンガリー語', u'Hungarian'), | |
(u'lv', u'ラトヴィア語', u'Latvian'), | |
(u'sk', u'スロヴァキア語', u'Slovak'), | |
(u'de', u'ドイツ語', u'German'), | |
(u'cy', u'ウェールズ語', u'Welsh'), | |
(u'ca', u'カタルーニャ語', u'Catalan'), | |
(u'th', u'タイ語', u'Thai'), | |
(u'it', u'イタリア語', u'Italian'), | |
(u'sl', u'スロヴェニア語', u'Slovenian'), | |
(u'ar', u'アラビア語', u'Arabic'), | |
(u'bg', u'ブルガリア語', u'Burgarian'), | |
(u'ta', u'タミル語', u'Tamil'), | |
(u'eo', u'エスペラント', u'Esperanto'), | |
(u'el', u'ギリシア語', u'Greek'), | |
(u'fi', u'フィンランド語', u'Finnish'), | |
(u'id', u'インドネシア語', u'Indonesian'), | |
(u'es', u'スペイン語', u'Spanish'), | |
(u'tr', u'トルコ語', u'Turkish'), | |
(u'mn', u'モンゴル語', u'Mongolian'), | |
(u'la', u'ラテン語', u'Latin'), | |
(u'ru', u'ロシア語', u'Russian'), | |
(u'cs', u'チェコ語', u'Czech'), | |
(u'hi', u'ヒンディー語', u'Hindi'), | |
(u'nv', u'ナヴァホ語', u'Navajo'), | |
(u'ja', u'日本語', u'Japanese'), | |
(u'vo', u'ヴォラピュク', u'Volapuk'), | |
(u'pi', u'パーリ語', u'Pali'), | |
(u'pa', u'パンジャブ語', u'Panjabi'), | |
(u'si', u'シンハラ語', u'Sinhalese'), | |
(u'ko', u'朝鮮語', u'Korean'), | |
(u'sv', u'スウェーデン語', u'Swedish'), | |
(u'lt', u'リトアニア語', u'Litanian'), | |
(u'pt', u'ポルトガル語', u'Portuguese'), | |
(u'ain', u'アイヌ語', u'Ainu'), | |
(u'da', u'デンマーク語', u'Danish'), | |
(u'hy', u'アルメニア語', u'Armenian'), | |
(u'vi', u'ベトナム語', u'Vietnamese'), | |
(u'haw', u'ハワイ語', u'Hawaian'), | |
(u'sco', u'スコットランド語', u'Scottish'), | |
(u'hak', u'客家語', u'Hakka'), | |
(u'yue', u'広東語', u'Cantonese'), | |
(u'ban', u'バリ語', u'Balinese'), | |
(u'sas', u'ササク語', u'Sasak'), | |
(u'as', u'アッサム語', u'Assamese'), | |
(u'qu', u'ケチュア語', u'Quecha'), | |
(u'fo', u'フェロー語', u'Faroese'), | |
(u'co', u'コルシカ語', u'Corsican'), | |
(u'ro', u'ルーマニア語', u'Romanian'), | |
(u'rm', u'ロマンシュ語', u'Romansch'), | |
(u'nb', u'ノルウェー語(ブークモール)', u'Norwegian Bokmål'), | |
(u'nn', u'ノルウェー語(ニーノシュク)', u'Norwegian Nynorsk'), | |
(u'ast', u'アストゥリアス語', u'Asturian'), | |
(u'ia', u'インターリングア', u'Interlingua'), | |
(u'ga', u'アイルランド語', u'Irish'), | |
(u'map-pro', u'オーストロネシア祖語', u'Proto-Austronesian'), | |
(u'ine-pro', u'印欧祖語', u'Proto-Indo-European'), | |
(u'iir-pro', u'インド・イラン祖語', u'Proto-Indo-Iranian'), | |
(u'itc-pro', u'イタリック祖語', u'Proto-Italic'), | |
(u'cel-pro', u'ケルト祖語', u'Proto-Celtic'), | |
(u'gem-pro', u'ゲルマン祖語', u'Proto-Germanic'), | |
(u'poz-pro', u'マレー・ポリネシア祖語', u'Proto-Malayo-Polynesian'), | |
(u'poz-mly-pro', u'マライック祖語', u'Proto-Malayic'), | |
(u'non', u'古ノルド語', u'Old_Norse'), | |
(u'zlw-opl', u'古ポーランド語', u'Old_Polish'), | |
(u'ang', u'古英語', u'Old_English'), | |
(u'enm', u'中英語', u'Middle_English'), | |
(u'fro', u'古フランス語', u'Old_French'), | |
(u'grc', u'古典ギリシア語', u'Ancient_Greek'), | |
(u'cu', u'古代教会スラヴ語', u'Old_Church_Slavonic'), | |
(u'sga', u'古アイルランド語', u'Old_Irish'), | |
(u'roa-opt', u'古ポルトガル語', u'Old_Portuguese'), | |
(u'sa', u'サンスクリット', u'Sanskrit'), | |
] | |
patterns = { | |
'Terms_derived_from_{2}': u'{1}由来', | |
'{2}_language': u'{1}', | |
#'Linguistics': u'言語学', | |
#'Grammar': u'文法', # 品詞とのあいだで混乱がある | |
'{0}:Colors': u'{1}_色名', | |
'{0}:Time': u'{1}_時間', | |
'{0}:Biology': u'{1}_生物学', | |
'{0}:Languages': u'{1}_言語名', | |
'{0}:Culture': u'{1}_文化', | |
'{0}:Weapons': u'{1}_武器', | |
'{0}:Astronomy': u'{1}_天文学', | |
'{0}:Reptiles': u'{1}_爬虫類', | |
'{0}:Mathematics': u'{1}_数学', | |
'{0}:Buddhism': u'{1}_仏教', | |
'{0}:Christianity': u'{1}_キリスト教', | |
'{0}:Musical_instruments': u'{1}_楽器', | |
'{0}:Dinosaurs': u'{1}_恐竜', | |
'{0}:Technology': u'{1}_技術', | |
'{0}:Chemistry': u'{1}_化学', | |
'{0}:Pathology': u'{1}_病理学', | |
'{0}:Music': u'{1}_音楽', | |
'{0}:History': u'{1}_歴史', | |
'{0}:Cooking': u'{1}_調理', | |
'{0}:Geology': u'{1}_地質学', | |
'{0}:Cities': u'{1}_都市名', | |
'{0}:Countries': u'{1}_国名', | |
'{0}:Greek_mythology': u'{1}_ギリシア神話', | |
'{0}:Transport': u'{1}_交通', | |
'{0}:Celestial bodies': u'{1}_天体', | |
'{0}:Mammals': u'{1}_哺乳類', | |
'{0}:Fish': u'{1}_魚', | |
'{0}:Months': u'{1}_月名', | |
'{0}:Chemical_elements': u'{1}_元素', | |
'{0}:Biochemistry': u'{1}_生化学', | |
'{0}:Social sciences': u'{1}_社会科学', | |
'{0}:Politics': u'{1}_政治', | |
'{0}:Vertebrates': u'{1}_脊椎動物', | |
'{0}:Food_and_drink': u'{1}_食品', | |
'{0}:Currency': u'{1}_通貨', | |
'{0}:Plants': u'{1}_植物', | |
'{0}:Fruits': u'{1}_果実', | |
'{0}:Computing': u'{1}_情報技術', | |
'{0}:Geometry': u'{1}_幾何学', | |
'{0}:Occupations': u'{1}_職業', | |
'{0}:Accounting': u'{1}_会計', | |
'{0}:Days_of_the_week': u'{1}_曜日', | |
'{0}:Insects': u'{1}_虫', | |
'{0}:Literature': u'{1}_文学', | |
'{0}:Family': u'{1}_家族', | |
'{0}:Military': u'{1}_軍事', | |
'{0}:Animals': u'{1}_動物', | |
'{0}:Constelletaions': u'{1}_星座', | |
'{0}:Geography': u'{1}_地理', | |
'{0}:Physics': u'{1}_物理学', | |
'{0}:Calendar_terms': u'{1}_暦', | |
'{0}:Economics': u'{1}_経済', | |
'{0}:Engineering': u'{1}_工学', | |
'{0}:Place_names': u'{1}_地名', | |
'{0}:Arthropods': u'{1}_節足動物', | |
'{0}:Norse_mythology': u'{1}_北欧神話', | |
'{0}:Capital_cities': u'{1}_首都名', | |
'{0}:Philosophy': u'{1}_哲学', | |
'{0}:Landforms': u'{1}_地形', | |
'{0}:Schools': u'{1}_学校', | |
'{0}:Sports': u'{1}_スポーツ', | |
'{0}:Physiology': u'{1}_生理学', | |
'{0}:Anatomy': u'{1}_解剖学', | |
'{0}:Education': u'{1}_教育', | |
'{0}:Birds': u'{1}_鳥', | |
'{0}:Aircraft': u'{1}_航空機', | |
'{0}:Finance': u'{1}_金融', | |
'{0}:Medicine': u'{1}_医学', | |
'{0}:Diseases': u'{1}_病気', | |
'{0}:Law': u'{1}_法律', | |
'{0}:Vegetables': u'{1}_野菜', | |
'{0}:Shapes': u'{1}_図形', | |
'{0}:Language': u'{1}_言語', | |
'{0}:Amphibians': u'{1}_両生類', | |
'{2}_conjunctions': u'{1}_接続詞', | |
'{2}_numerals': u'{1}_数詞', | |
'{2}_articles': u'{1}_冠詞', | |
'{2}_prefixes': u'{1}_接頭辞', | |
'{2}_preposisions': u'{1}_前置詞', | |
'{2}_adjectives': u'{1}_形容詞', | |
'{2}_templates': u'{1}_テンプレート', | |
'{2}_phrases': u'{1}_成句', | |
'{2}_abbreviations': u'{1}_略語', | |
'{2}_pronouns': u'{1}_代名詞', | |
'{2}_nouns': u'{1}_名詞', | |
'{2}_suffixes': u'{1}_接尾辞', | |
'{2}_verbs': u'{1}_動詞', | |
'{2}_interjections': u'{1}_間投詞', | |
'{2}_names': u'{1}_人名', | |
'{2}_adverbs': u'{1}_副詞', | |
'{2}_determiners': u'{1}_限定詞', | |
'{2}_postposisions': u'{1}_後置詞', | |
} | |
patterns2 = { | |
'{2}_terms_derived_from_{5}': u'{1}_{4}由来', | |
} | |
def gen_pairs(): | |
ls = [] | |
for (epat, jpat) in patterns.items(): | |
for tp in lx: | |
ls.append((jpat.format(*tp), epat.format(*tp))) | |
empty = ('', '', '') | |
ls.append((jpat.format(*empty)[1:], epat.format(*empty)[1:])) # add pairs without language prefix | |
for (epat, jpat) in patterns2.items(): | |
for x in lx: | |
for y in lx: | |
if x != y: | |
tp = x + y | |
ls.append((jpat.format(*tp), epat.format(*tp))) | |
ret = {} | |
for (j, e) in ls: | |
ret[j] = e | |
return ret | |
pairs = gen_pairs() | |
def mygen(): | |
conn = oursql.connect(host = 'jawiktionary.labsdb', | |
read_default_file=os.path.expanduser('~/.my.cnf'), | |
db = 'jawiktionary_p', | |
charset=None, | |
use_unicode=False) | |
cursor = conn.cursor() | |
cursor.execute(''' | |
SELECT page_title, ll_lang, ll_title | |
FROM page | |
LEFT JOIN langlinks ON page_id = ll_from | |
WHERE page_namespace = 14 | |
AND NOT page_is_redirect | |
AND NOT EXISTS(SELECT * FROM revision_userindex WHERE rev_page = page_id AND rev_user_text = "Whymbot") | |
GROUP BY page_id | |
HAVING COUNT(*) <= 1 | |
''') | |
site = pywikibot.Site() | |
for col in cursor: | |
yield pywikibot.Page(site, u'Category:'+list(col)[0].decode('utf-8')) | |
def mygen_for_test(): | |
# for tests | |
site = pywikibot.Site() | |
yield pywikibot.Page(site, u'カテゴリ:広東語_接尾辞') | |
yield pywikibot.Page(site, u'カテゴリ:朝鮮語 古典ギリシア語由来') | |
def split_title(title): | |
a = title.split(' ', 2) | |
if len(a) == 1: | |
return [a[0], None] | |
else: | |
return a | |
def translate(p): | |
src = p.title(underscore=True, withNamespace=False).replace(u'カテゴリ:', u'') | |
if src in pairs: | |
yield 'en:Category:' + pairs[src] | |
else: | |
print('%s not found' % src.encode('utf-8')) | |
if __name__ == '__main__': | |
args = ['-dir:%s/.pywikibot' % os.environ['HOME'], | |
'-lang:ja', | |
'-family:wiktionary', | |
'-hintsonly', | |
'-autonomous', | |
'-async', | |
'-query:500', | |
#'-simulate', | |
'-putthrottle:60'] | |
args = pywikibot.handle_args(args) | |
for arg in args: | |
interwiki.globalvar.readOptions(arg) | |
bot = interwiki.InterwikiBot() | |
for p in mygen(): | |
ts = list(translate(p)) | |
print([p, ts]) | |
if len(ts) > 0: | |
bot.add(p, ts) | |
try: | |
bot.run() | |
except pywikibot.exceptions.UnknownSite as error: | |
print(error) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment