r81173 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r81172‎ | r81173 | r81174 >
Date:22:30, 28 January 2011
Author:diederik
Status:deferred
Tags:
Comment:
Deleting old file.
Modified paths:
  • /trunk/tools/editor_trends/classes/wikiprojects.py (deleted) (history)

Diff [purge]

Index: trunk/tools/editor_trends/classes/wikiprojects.py
@@ -1,917 +0,0 @@
2 -#!/usr/bin/python
3 -# coding=utf-8
4 -'''
5 -Copyright (C) 2010 by Diederik van Liere (dvanliere@gmail.com)
6 -This program is free software; you can redistribute it and/or
7 -modify it under the terms of the GNU General Public License version 2
8 -as published by the Free Software Foundation.
9 -This program is distributed in the hope that it will be useful,
10 -but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 -See the GNU General Public License for more details, at
13 -http,//www.fsf.org/licenses/gpl.html
14 -'''
15 -
16 -__author__ = '''\n'''.join(['Diederik van Liere (dvanliere@gmail.com)', ])
17 -__email__ = 'dvanliere at gmail dot com'
18 -__date__ = '2010-10-21'
19 -__version__ = '0.1'
20 -
21 -'''
22 -This file provides mapper between language name and locale language name and
23 -Wikipedia acronym.
24 -Gothic and Birmese are not yet supported, see rows 450 and 554.
25 -'''
26 -
27 -import os
28 -import sys
29 -import locale
30 -import datetime
31 -import time
32 -import re
33 -sys.path.append('..')
34 -
35 -from utils import text_utils
36 -from utils import ordered_dict as odict
37 -
38 -class Wiki:
39 - '''
40 - This class keeps track of the commands issued by the user and is used to
41 - feed the different etl functions. Difference with configuration class is
42 - that the configuration class are read-only settings that are always the
43 - same for a user while these settings can change depending on the kind of
44 - analysis requested.
45 - '''
46 - def __init__(self, settings, args=None):
47 - self.projects = {'wiki': 'wiki',
48 - 'commons': 'wikicommons',
49 - 'books': 'wikibooks',
50 - 'news': 'wikinews',
51 - 'quote': 'wikiquote',
52 - 'source': 'wikisource',
53 - 'versity': 'wikiversity',
54 - 'tionary': 'wiktionary',
55 - 'meta': 'metawiki',
56 - 'species': 'wikispecies',
57 - 'incubator': 'incubatorwiki',
58 - 'foundation': 'foundationwiki',
59 - 'mediawiki': 'mediawikiwiki',
60 - 'outreach': 'outreachwiki',
61 - 'strategic_planning': 'strategywiki',
62 - 'usability_initiative': 'usabilitywiki',
63 - #'multilingual_wikisource': None
64 - }
65 - #assert project in self.projects.keys() == True
66 - self.settings = settings
67 - self.short_project = 'wiki'
68 - self.long_project = 'wikipedia' if self.short_project == 'wiki' else \
69 - self.projects.get(self.short_project, None)
70 -
71 - self.language = determine_default_language()
72 - self.language_code = MAPPING[self.language]
73 - self.valid_languages = self.project_supports_language()
74 -
75 - if args:
76 - self.args = args
77 - self.hash = self.secs_since_epoch()
78 - self.base_location = self.get_value('location') \
79 - if self.get_value('location') != None else settings.input_location
80 - self.short_project = self.get_project(settings)
81 - self.update_language(self.get_value('language'))
82 - #self.language = self.get_value('language')
83 - #self.language_code = self.get_language()
84 - self.targets = self.get_value('datasets')
85 - self.function = self.get_value('func')
86 -
87 - self.collection = self.get_value('collection')
88 - self.ignore = self.get_value('except')
89 - self.clean = self.get_value('new')
90 - self.force = self.get_value('force')
91 - self.project = self.get_projectname()
92 - self.location = self.get_project_location()
93 - self.filename = self.generate_wikidump_filename()
94 - self.namespaces = self.get_namespaces()
95 -
96 - self.dataset = os.path.join(settings.dataset_location,
97 - self.project)
98 - self.charts = os.path.join(settings.chart_location,
99 - self.project)
100 -
101 - self.txt = os.path.join(self.location, 'txt')
102 - self.sorted = os.path.join(self.location, 'sorted')
103 -
104 - self.directories = [self.location,
105 - self.txt,
106 - self.sorted,
107 - self.dataset,
108 - self.charts]
109 - self.path = '/%s/latest/' % self.project
110 - self.targets = self.targets.split(', ')
111 - settings.verify_environment(self.directories)
112 -
113 - def __str__(self):
114 - return 'Wiki Project Settings'
115 -
116 - def __iter__(self):
117 - for item in self.__dict__:
118 - yield item
119 -
120 - def dict(self):
121 - '''
122 - Return a dictionary with all properties and their values
123 - '''
124 - props = {}
125 - for prop in self:
126 - props[prop] = getattr(self, prop)
127 - return props
128 -
129 - def get_project_location(self):
130 - '''
131 - Construct the full project location
132 - '''
133 - return os.path.join(self.base_location, self.language_code, self.project)
134 -
135 - def show_settings(self):
136 - '''
137 - Prints some very high level configuration settings.
138 - '''
139 - about = {}
140 - about['Project'] = '%s' % self.long_project.title()
141 - about['Language'] = '%s / %s' % (self.language, self.language_code)
142 - about['Input directory'] = '%s' % self.location
143 - about['Output directory'] = '%s and subdirectories' % self.location
144 -
145 - max_length_key = max([len(key) for key in about.keys()])
146 - print 'Final settings after parsing command line arguments:'
147 - for ab in about:
148 - print '%s: %s' % (ab.rjust(max_length_key), about[ab])
149 -
150 -
151 - def get_value(self, key):
152 - '''
153 - Returns key from argument if present else None
154 - '''
155 - return getattr(self.args, key, None)
156 -
157 - def get_project(self, settings):
158 - '''
159 - Determine the project to be analyzed, default is Wikipedia
160 - '''
161 - project = self.get_value('project')
162 - if project != 'wiki':
163 - project = self.projects.get(project, None)
164 - return project
165 -
166 - def generate_wikidump_filename(self):
167 - '''
168 - Generate the main name of the wikidump file to be downloaded.
169 - '''
170 - return '%s-latest-%s' % (self.project,
171 - self.get_value('file'))
172 -
173 -
174 - def get_projectname(self):
175 - '''
176 - Determine the full project name based on the project acronym and language.
177 - '''
178 - #language_code = self.get_language()
179 - print self.language_code, self.short_project
180 - if self.language_code == None:
181 - print 'Entered language: %s is not a valid Wikimedia language' \
182 - % self.get_value('language')
183 - sys.exit(-1)
184 -
185 - if self.long_project == None:
186 - print 'Entered project: %s is not valid Wikimedia Foundation project.' \
187 - % self.get_value('project')
188 - sys.exit(-1)
189 - else:
190 - return '%s%s' % (self.language_code, self.short_project)
191 -
192 - def secs_since_epoch(self):
193 - dt = datetime.datetime.now()
194 - return time.mktime(dt.timetuple())
195 -
196 -
197 -# def get_language(self):
198 -# '''
199 -# Get the locale name of the language
200 -# '''
201 -# language = self.get_value('language')
202 -# if language != None:
203 -# language = language.title()
204 -# return languages.MAPPING.get(language, 'en')
205 -
206 - def get_namespaces(self):
207 - '''
208 - Get the list of namespaces that should be included for analysis. Default
209 - is namespace 0 (the main namespace)
210 - '''
211 - namespaces = self.get_value('namespace')
212 - if namespaces != None:
213 - return namespaces.split(',')
214 - else:
215 - return namespaces
216 -
217 - def update_project(self, project):
218 - self.short_project = project
219 - self.long_project = self.projects.get(project, None)
220 -
221 - def update_language(self, language):
222 - self.language = language
223 - #languages = language_map()
224 - self.language_code = MAPPING.get(language, None)
225 -
226 - def match_languages(self):
227 - encoding = 'utf-8'
228 - language_codes = MAPPING.values()
229 - languages = MAPPING.keys()
230 - d = {}
231 - for key in self.valid_languages:
232 - d.setdefault('lnc', key)
233 - x = 0
234 - while key in language_codes:
235 - pos = language_codes.index(key)
236 - ln = languages[pos]
237 - del languages[pos]
238 - del language_codes[pos]
239 - d[x] = ln.encode(encoding)
240 - x += 1
241 - yield d
242 - d = {}
243 -
244 -
245 - def supported_languages(self, output='parser'):
246 - '''
247 - Generate a list of tuples with currently supported languages.
248 - '''
249 - assert output == 'django' or output == 'parser'
250 - choices = language_map()
251 - if output == 'parser':
252 - choices = [d.values() for d in self.match_languages()]
253 - choices = [item for sublist in choices for item in sublist]
254 - #print choices
255 - return choices
256 - else:
257 - choices = [(d.get('lnc'), '%s' % (' | '.join(d.values()))) for d in self.match_languages()]
258 - return tuple(choices)
259 -
260 - def supported_projects(self):
261 - choices = ([(key, value.title()) for key, value in self.projects.iteritems()])
262 - return tuple(choices)
263 -
264 - def get_english_language_name(self):
265 - languages = language_map()
266 - return languages[self.language_code]
267 -
268 -
269 - def project_supports_language(self, long_project=None):
270 - if long_project == None:
271 - long_project = self.long_project
272 - valid_languages_wikipedia = ['ace', 'af', 'als', 'an', 'roa-rup', 'ast', 'gn', 'av', 'ay', 'az', 'id', 'ms', 'bm', 'zh-min-nan', 'jv', 'map-bms', 'su', 'bug', 'bi', 'bar', 'bs', 'br', 'ca', 'cbk-zam', 'ch', 'cs', 'ny', 'sn', 'tum', 've', 'co', 'za', 'cy', 'da', 'pdc', 'de', 'nv', 'na', 'lad', 'et', 'ang', 'en', 'es', 'eo', 'ext', 'eu', 'to', 'fo', 'fr', 'frp', 'fy', 'ff', 'fur', 'ga', 'gv', 'sm', 'gd', 'gl', 'got', 'hak', 'haw', 'hsb', 'hr', 'io', 'ilo', 'ig', 'ia', 'ie', 'ik', 'xh', 'zu', 'is', 'it', 'mh', 'kl', 'pam', 'csb', 'kw', 'kg', 'ki', 'rw', 'ky', 'rn', 'sw', 'ht', 'ku', 'la', 'lv', 'lb', 'lt', 'lij', 'li', 'ln', 'jbo', 'lg', 'lmo', 'hu', 'mg', 'mt', 'mi', 'cdo', 'my', 'nah', 'fj', 'nl', 'cr', 'ne', 'nap', 'frr', 'pih', 'no', 'nn', 'nrm', 'oc', 'om', 'pag', 'pi', 'pap', 'pms', 'nds', 'pl', 'pt', 'ty', 'ksh', 'ro', 'rmy', 'rm', 'qu', 'se', 'sg', 'sc', 'sco', 'st', 'tn', 'sq', 'scn', 'simple', 'ceb', 'ss', 'sk', 'sl', 'so', 'sh', 'fi', 'sv', 'tl', 'tt', 'tet', 'vi', 'tpi', 'chy', 'tr', 'tk', 'tw', 'vec', 'vo', 'fiu-vro', 'wa', 'vls', 'war', 'wo', 'ts', 'yo', 'bat-smg', 'el', 'ab', 'ba', 'be', 'bg', 'bxr', 'cu', 'os', 'kk', 'kv', 'mk', 'mn', 'ce', 'ru', 'sr', 'tg', 'udm', 'uk', 'uz', 'xal', 'cv', 'hy', 'ka', 'he', 'yi', 'ar', 'fa', 'ha', 'ps', 'sd', 'ur', 'ug', 'arc', 'dv', 'as', 'bn', 'bpy', 'gu', 'bh', 'hi', 'ks', 'mr', 'kn', 'ne', 'new', 'sa', 'ml', 'or', 'pa', 'ta', 'te', 'bo', 'dz', 'si', 'km', 'lo', 'th', 'am', 'ti', 'iu', 'chr', 'ko', 'ja', 'zh', 'wuu', 'lzh', 'yue']
273 - valid_languages_wiktionary = ['af', 'als', 'an', 'roa-rup', 'ast', 'gn', 'ay', 'az', 'id', 'ms', 'zh-min-nan', 'jv', 'su', 'mt', 'bs', 'br', 'ca', 'cs', 'co', 'za', 'cy', 'da', 'de', 'na', 'et', 'ang', 'en', 'es', 'eo', 'eu', 'fo', 'fr', 'fy', 'gd', 'ga', 'gv', 'sm', 'gl', 'hr', 'io', 'ia', 'ie', 'ik', 'zu', 'is', 'it', 'kl', 'csb', 'ku', 'kw', 'rw', 'sw', 'la', 'lv', 'lb', 'lt', 'li', 'ln', 'jbo', 'hu', 'mg', 'mi', 'nah', 'fj', 'nl', 'no', 'nn', 'oc', 'om', 'uz', 'nds', 'pl', 'pt', 'ro', 'qu', 'sg', 'st', 'tn', 'scn', 'simple', 'sk', 'sl', 'sq', 'ss', 'so', 'sh', 'fi', 'sv', 'tl', 'tt', 'vi', 'tpi', 'tr', 'tk', 'vo', 'wa', 'wo', 'ts', 'el', 'tsd', 'be', 'bg', 'kk', 'ky', 'mk', 'mn', 'ru', 'sr', 'tg', 'uk', 'hy', 'ka', 'he', 'yi', 'ar', 'fa', 'ha', 'ps', 'sd', 'ug', 'ur', 'dv', 'bn', 'gu', 'hi', 'ks', 'ne', 'sa', 'mr', 'kn', 'ml', 'pa', 'ta', 'te', 'km', 'lo', 'my', 'si', 'th', 'am', 'ti', 'iu', 'chr', 'ko', 'ja', 'zh']
274 - valid_languages_wikiquote = ['af', 'als', 'id', 'bs', 'ca', 'cs', 'da', 'de', 'en', 'es', 'eo', 'eu', 'fr', 'is', 'it', 'ku', 'la', 'lb', 'lt', 'hu', 'nl', 'no', 'pl', 'pt', 'ro', 'sk', 'fi', 'sv', 'tr', 'el', 'bg', 'ru', 'sr', 'ka', 'he', 'ar', 'fa', 'gu', 'mr', 'ta', 'th', 'ko', 'ja', 'zh']
275 - valid_languages_wikinews = ['als', 'bs', 'ca', 'cs', 'de', 'en', 'es', 'fa', 'fr', 'it', 'hu', 'nl', 'no', 'nds', 'pl', 'pt', 'ro', 'fi', 'sv', 'tr', 'bg', 'ru', 'sr', 'uk', 'he', 'ar', 'sd', 'ta', 'th', 'ko', 'ja', 'zh']
276 - valid_languages_wikisource = ['als', 'id', 'bs', 'cs', 'cy', 'da', 'de', 'en', 'es', 'fr', 'gl', 'hr', 'is', 'it', 'la', 'lt', 'li', 'nl', 'pl', 'pt', 'ro', 'sk', 'fi', 'sv', 'vi', 'tr', 'el', 'ru', 'sr', 'he', 'yi', 'ar', 'fa', 'bn', 'ml', 'th', 'ko', 'ja', 'zh']
277 - valid_languages_wikibooks = ['af', 'als', 'ang', 'als', 'az', 'ms', 'su', 'bs', 'cs', 'co', 'cy', 'da', 'de', 'na', 'et', 'en', 'es', 'eo', 'eu', 'fr', 'fy', 'gl', 'hr', 'ia', 'ie', 'is', 'it', 'ku', 'la', 'lt', 'mg', 'nl', 'no', 'oc', 'uz', 'nds', 'pl', 'pt', 'ro', 'qu', 'sq', 'simple', 'sk', 'sl', 'fi', 'sv', 'vi', 'tl', 'tt', 'tr', 'tk', 'vo', 'el', 'bg', 'be', 'kk', 'ky', 'mk', 'ru', 'sr', 'tg', 'uk', 'cv', 'hy', 'ka', 'he', 'ar', 'fa', 'ps', 'ur', 'bn', 'hi', 'mr', 'sa', 'kn', 'ml', 'pa', 'ta', 'te', 'km', 'ne', 'th', 'ko', 'ja', 'zh']
278 - valid_languages_wikiversity = ['cs', 'de', 'en', 'es', 'fr', 'it', 'pt', 'fi', 'el', 'ru', 'ja']
279 - valid_languages_wikicommons = ['en']
280 - valid_languages_wikispecies = ['en']
281 - try:
282 - languages = locals()['valid_languages_%s' % long_project]
283 - return languages
284 - except KeyError:
285 - return []
286 -
287 -
288 -
289 -def extract_language_code_from_wikiprojects():
290 - '''
291 - Copy and paste a string of all supported projects from
292 - http://meta.wikimedia.org/wiki/Complete_list_of_Wikimedia_projects and use
293 - this function to extract the language codes. This list can be used for the
294 - Wiki class
295 - '''
296 -
297 - str = '''
298 - Čeština (cs) • Deutsch (de) • English (en) • Español (es) • Français (fr) • Italiano (it) • Português (pt) • Suomi (fi) • Ελληνικά (el) • Русский (ru) • 日本語 (ja)
299 - '''
300 -
301 - reg = re.compile('\([\w\-]*\)')
302 - abbr = re.findall(reg, str)
303 - abbr = [ab.replace('(', '').replace(')', '') for ab in abbr]
304 - print abbr
305 - print len(abbr)
306 -
307 -
308 -#def supported_languages(settings):
309 -# '''
310 -# Generate a list of tuples with currently supported languages.
311 -# '''
312 -# choices = MAPPING.keys()
313 -# choices = [c.encode(settings.encoding) for c in choices]
314 -# return tuple(choices)
315 -
316 -def determine_default_language():
317 - '''
318 - Determines the default language to make an educated guess which
319 - Wikipedia project is most likely of interest
320 - '''
321 - language_code = locale.getdefaultlocale()[0]
322 - language_code = language_code.split('_')[0]
323 - return get_language(language_code)
324 -
325 -
326 -def get_language(language_code):
327 - languages = language_map()
328 - return languages[language_code]
329 -
330 -def language_map():
331 - return text_utils.invert_dict(MAPPING)
332 -
333 -
334 -MAPPING = odict.OrderedDict([
335 -(u'English', 'en'),
336 -(u'German', 'de'),
337 -(u'French', 'fr'),
338 -(u'Italian', 'it'),
339 -(u'Polish', 'pl'),
340 -(u'Japanese', 'ja'),
341 -(u'Spanish', 'es'),
342 -(u'Dutch', 'nl'),
343 -(u'Portuguese', 'pt'),
344 -(u'Russian', 'ru'),
345 -(u'Swedish', 'sv'),
346 -(u'Chinese', 'zh'),
347 -(u'Catalan', 'ca'),
348 -(u'Norwegian', 'no'),
349 -(u'Bokmål', 'no'),
350 -(u'Finnish', 'fi'),
351 -(u'Ukrainian', 'uk'),
352 -(u'Hungarian', 'hu'),
353 -(u'Czech', 'cs'),
354 -(u'Romanian', 'ro'),
355 -(u'Turkish', 'tr'),
356 -(u'Korean', 'ko'),
357 -(u'Vietnamese', 'vi'),
358 -(u'Danish', 'da'),
359 -(u'Arabic', 'ar'),
360 -(u'Esperanto', 'eo'),
361 -(u'Serbian', 'sr'),
362 -(u'Indonesian', 'id'),
363 -(u'Lithuanian', 'lt'),
364 -(u'Volapük', 'vo'),
365 -(u'Slovak', 'sk'),
366 -(u'Hebrew', 'he'),
367 -(u'Bulgarian', 'bg'),
368 -(u'Persian', 'fa'),
369 -(u'Slovenian', 'sl'),
370 -(u'Waray-Waray', 'war'),
371 -(u'Croatian', 'hr'),
372 -(u'Estonian', 'et'),
373 -(u'Malay', 'ms'),
374 -(u'Newar', 'new'),
375 -(u'Nepal Bhasa', 'new'),
376 -(u'Simple English', 'simple'),
377 -(u'Galician', 'gl'),
378 -(u'Thai', 'th'),
379 -(u'Aromanian', 'roa-rup'),
380 -(u'Nynorsk', 'nn'),
381 -(u'Basque', 'eu'),
382 -(u'Hindi', 'hi'),
383 -(u'Greek', 'el'),
384 -(u'Haitian', 'ht'),
385 -(u'Latin', 'la'),
386 -(u'Telugu', 'te'),
387 -(u'Georgian', 'ka'),
388 -(u'Cebuano', 'ceb'),
389 -(u'Macedonian', 'mk'),
390 -(u'Azeri', 'az'),
391 -(u'Tagalog', 'tl'),
392 -(u'Breton', 'br'),
393 -(u'Serbo-Croatian', 'sh'),
394 -(u'Marathi', 'mr'),
395 -(u'Luxembourgish', 'lb'),
396 -(u'Javanese', 'jv'),
397 -(u'Latvian', 'lv'),
398 -(u'Bosnian', 'bs'),
399 -(u'Icelandic', 'is'),
400 -(u'Welsh', 'cy'),
401 -(u'Belarusian', 'be-x-old'),
402 -(u'Taraškievica', 'be-x-old'),
403 -(u'Piedmontese', 'pms'),
404 -(u'Albanian', 'sq'),
405 -(u'Tamil', 'ta'),
406 -(u'Bishnupriya Manipuri', 'bpy'),
407 -(u'Belarusian', 'be'),
408 -(u'Aragonese', 'an'),
409 -(u'Occitan', 'oc'),
410 -(u'Bengali', 'bn'),
411 -(u'Swahili', 'sw'),
412 -(u'Ido', 'io'),
413 -(u'Ripuarian', 'ksh'),
414 -(u'Lombard', 'lmo'),
415 -(u'West Frisian', 'fy'),
416 -(u'Gujarati', 'gu'),
417 -(u'Low Saxon', 'nds'),
418 -(u'Afrikaans', 'af'),
419 -(u'Sicilian', 'scn'),
420 -(u'Quechua', 'qu'),
421 -(u'Kurdish', 'ku'),
422 -(u'Urdu', 'ur'),
423 -(u'Sundanese', 'su'),
424 -(u'Malayalam', 'ml'),
425 -(u'Cantonese', 'zh-yue'),
426 -(u'Asturian', 'ast'),
427 -(u'Neapolitan', 'nap'),
428 -(u'Samogitian', 'bat-smg'),
429 -(u'Walloon', 'wa'),
430 -(u'Chuvash', 'cv'),
431 -(u'Irish', 'ga'),
432 -(u'Armenian', 'hy'),
433 -(u'Yoruba', 'yo'),
434 -(u'Kannada', 'kn'),
435 -(u'Tajik', 'tg'),
436 -(u'Tarantino', 'roa-tara'),
437 -(u'Venetian', 'vec'),
438 -(u'Western Panjabi', 'pnb'),
439 -(u'Nepali', 'ne'),
440 -(u'Scottish Gaelic', 'gd'),
441 -(u'Yiddish', 'yi'),
442 -(u'Min Nan', 'zh-min-nan'),
443 -(u'Uzbek', 'uz'),
444 -(u'Tatar', 'tt'),
445 -(u'Kapampangan', 'pam'),
446 -(u'Ossetian', 'os'),
447 -(u'Sakha', 'sah'),
448 -(u'Alemannic', 'als'),
449 -(u'Maori', 'mi'),
450 -(u'Egyptian Arabic', 'arz'),
451 -(u'Kazakh', 'kk'),
452 -(u'Nahuatl', 'nah'),
453 -(u'Limburgian', 'li'),
454 -(u'Upper Sorbian', 'hsb'),
455 -(u'Gilaki', 'glk'),
456 -(u'Corsican', 'co'),
457 -(u'Gan', 'gan'),
458 -(u'Amharic', 'am'),
459 -(u'Mongolian', 'mn'),
460 -(u'Interlingua', 'ia'),
461 -(u'Central Bicolano', 'bcl'),
462 -(u'Võro', 'fiu-vro'),
463 -(u'Dutch Low Saxon', 'nds-nl'),
464 -(u'Faroese', 'fo'),
465 -(u'Turkmen', 'tk'),
466 -(u'Scots', 'sco'),
467 -(u'West Flemish', 'vls'),
468 -(u'Sinhalese', 'si'),
469 -(u'Sanskrit', 'sa'),
470 -(u'Bavarian', 'bar'),
471 -(u'Burmese', 'my'),
472 -(u'Manx', 'gv'),
473 -(u'Divehi', 'dv'),
474 -(u'Norman', 'nrm'),
475 -(u'Pangasinan', 'pag'),
476 -(u'Romansh', 'rm'),
477 -(u'Banyumasan', 'map-bms'),
478 -(u'Zazaki', 'diq'),
479 -(u'Sorani', 'ckb'),
480 -(u'Northern Sami', 'se'),
481 -(u'Mazandarani', 'mzn'),
482 -(u'Wu', 'wuu'),
483 -(u'Uyghur', 'ug'),
484 -(u'Friulian', 'fur'),
485 -(u'Ligurian', 'lij'),
486 -(u'Maltese', 'mt'),
487 -(u'Bihari', 'bh'),
488 -(u'Novial', 'nov'),
489 -(u'Malagasy', 'mg'),
490 -(u'Kashubian', 'csb'),
491 -(u'Ilokano', 'ilo'),
492 -(u'Sardinian', 'sc'),
493 -(u'Classical Chinese', 'zh-classical'),
494 -(u'Khmer', 'km'),
495 -(u'Ladino', 'lad'),
496 -(u'Pali', 'pi'),
497 -(u'Anglo-Saxon', 'ang'),
498 -(u'Zamboanga Chavacano', 'cbk-zam'),
499 -(u'Tibetan', 'bo'),
500 -(u'Fiji Hindi', 'hif'),
501 -(u'Franco-Provençal', 'frp'),
502 -(u'Arpitan', 'frp'),
503 -(u'Hakka', 'hak'),
504 -(u'Cornish', 'kw'),
505 -(u'Punjabi', 'pa'),
506 -(u'Pashto', 'ps'),
507 -(u'Kalmyk', 'xal'),
508 -(u'Silesian', 'szl'),
509 -(u'Pennsylvania German', 'pdc'),
510 -(u'Hawaiian', 'haw'),
511 -(u'Saterland Frisian', 'stq'),
512 -(u'Interlingue', 'ie'),
513 -(u'Navajo', 'nv'),
514 -(u'Fijian', 'fj'),
515 -(u'Crimean Tatar', 'crh'),
516 -(u'Komi', 'kv'),
517 -(u'Tongan', 'to'),
518 -(u'Acehnese', 'ace'),
519 -(u'Somali', 'so'),
520 -(u'Erzya', 'myv'),
521 -(u'Guarani', 'gn'),
522 -(u'Karachay-Balkar', 'krc'),
523 -(u'Extremaduran', 'ext'),
524 -(u'Lingala', 'ln'),
525 -(u'Kirghiz', 'ky'),
526 -(u'Meadow Mari', 'mhr'),
527 -(u'Assyrian Neo-Aramaic', 'arc'),
528 -(u'Emilian-Romagnol', 'eml'),
529 -(u'Lojban', 'jbo'),
530 -(u'Picard', 'pcd'),
531 -(u'Aymara', 'ay'),
532 -(u'Wolof', 'wo'),
533 -(u'Tumbuka', 'tum'),
534 -(u'Kabyle', 'kab'),
535 -(u'Bashkir', 'ba'),
536 -(u'North Frisian', 'frr'),
537 -(u'Tahitian', 'ty'),
538 -(u'Tok Pisin', 'tpi'),
539 -(u'Papiamentu', 'pap'),
540 -(u'Zealandic', 'zea'),
541 -(u'Sranan', 'srn'),
542 -(u'Greenlandic', 'kl'),
543 -(u'Udmurt', 'udm'),
544 -(u'Chechen', 'ce'),
545 -(u'Igbo', 'ig'),
546 -(u'Komi-Permyak', 'koi'),
547 -(u'Oriya', 'or'),
548 -(u'Lower Sorbian', 'dsb'),
549 -(u'Kongo', 'kg'),
550 -(u'Lao', 'lo'),
551 -(u'Abkhazian', 'ab'),
552 -(u'Moksha', 'mdf'),
553 -(u'Romani', 'rmy'),
554 -(u'Hill Mari', 'mrj'),
555 -(u'Banjar', 'bjn'),
556 -(u'Old Church Slavonic', 'cu'),
557 -(u'Mirandese', 'mwl'),
558 -(u'Karakalpak', 'kaa'),
559 -(u'Samoan', 'sm'),
560 -(u'Moldovan', 'mo'),
561 -(u'Tetum', 'tet'),
562 -(u'Avar', 'av'),
563 -(u'Kashmiri', 'ks'),
564 -(u'Gothic', 'got'),
565 -(u'Sindhi', 'sd'),
566 -(u'Bambara', 'bm'),
567 -(u'Nauruan', 'na'),
568 -(u'Norfolk', 'pih'),
569 -(u'Pontic', 'pnt'),
570 -(u'Inuktitut', 'iu'),
571 -(u'Inupiak', 'ik'),
572 -(u'Bislama', 'bi'),
573 -(u'Cherokee', 'chr'),
574 -(u'Assamese', 'as'),
575 -(u'Min Dong', 'cdo'),
576 -(u'Ewe', 'ee'),
577 -(u'Swati', 'ss'),
578 -(u'Oromo', 'om'),
579 -(u'Zhuang', 'za'),
580 -(u'Zulu', 'zu'),
581 -(u'Tigrinya', 'ti'),
582 -(u'Venda', 've'),
583 -(u'Tsonga', 'ts'),
584 -(u'Hausa', 'ha'),
585 -(u'Dzongkha', 'dz'),
586 -(u'Sango', 'sg'),
587 -(u'Chamorro', 'ch'),
588 -(u'Cree', 'cr'),
589 -(u'Xhosa', 'xh'),
590 -(u'Akan', 'ak'),
591 -(u'Sesotho', 'st'),
592 -(u'Kinyarwanda', 'rw'),
593 -(u'Tswana', 'tn'),
594 -(u'Kikuyu', 'ki'),
595 -(u'Buryat', 'bxr'),
596 -(u'Buginese', 'bug'),
597 -(u'Chichewa', 'ny'),
598 -(u'Lak', 'lbe'),
599 -(u'Twi', 'tw'),
600 -(u'Shona', 'sn'),
601 -(u'Kirundi', 'rn'),
602 -(u'Fula', 'ff'),
603 -(u'Cheyenne', 'chy'),
604 -(u'Luganda', 'lg'),
605 -(u'Ndonga', 'ng'),
606 -(u'Sichuan Yi', 'ii'),
607 -(u'Choctaw', 'cho'),
608 -(u'Marshallese', 'mh'),
609 -(u'Afar', 'aa'),
610 -(u'Kuanyama', 'kj'),
611 -(u'Hiri Motu', 'ho'),
612 -(u'Muscogee', 'mus'),
613 -(u'Kanuri', 'kr'),
614 -(u'Herero', 'hz'),
615 -(u'English', 'en'),
616 -(u'Deutsch', 'de'),
617 -(u'Français', 'fr'),
618 -(u'Italiano', 'it'),
619 -(u'Polski', 'pl'),
620 -(u'日本語', 'ja'),
621 -(u'Español', 'es'),
622 -(u'Nederlands', 'nl'),
623 -(u'Português', 'pt'),
624 -(u'Русский', 'ru'),
625 -(u'Svenska', 'sv'),
626 -(u'中文', 'zh'),
627 -(u'Català', 'ca'),
628 -(u'Norsk', 'no'),
629 -(u'Bokmål', 'no'),
630 -(u'Suomi', 'fi'),
631 -(u'Українська', 'uk'),
632 -(u'Magyar', 'hu'),
633 -(u'Čeština', 'cs'),
634 -(u'Română', 'ro'),
635 -(u'Türkçe', 'tr'),
636 -(u'한국어', 'ko'),
637 -(u'Tiếng Việt', 'vi'),
638 -(u'Dansk', 'da'),
639 -(u'العربية', 'ar'),
640 -(u'Esperanto', 'eo'),
641 -(u'Српски', 'sr'),
642 -(u'Srpski', 'sr'),
643 -(u'Bahasa Indonesia', 'id'),
644 -(u'Lietuvių', 'lt'),
645 -(u'Volapük', 'vo'),
646 -(u'Slovenčina', 'sk'),
647 -(u'עברית', 'he'),
648 -(u'Български', 'bg'),
649 -(u'فارسی', 'fa'),
650 -(u'Slovenščina', 'sl'),
651 -(u'Winaray', 'war'),
652 -(u'Hrvatski', 'hr'),
653 -(u'Eesti', 'et'),
654 -(u'Bahasa Melayu', 'ms'),
655 -(u'नेपाल भाषा', 'new'),
656 -(u'Simple English', 'simple'),
657 -(u'Galego', 'gl'),
658 -(u'ไทย', 'th'),
659 -(u'Armãneashce', 'roa-rup'),
660 -(u'Nynorsk', 'nn'),
661 -(u'Euskara', 'eu'),
662 -(u'हिन्दी', 'hi'),
663 -(u'Ελληνικά', 'el'),
664 -(u'Krèyol ayisyen', 'ht'),
665 -(u'Latina', 'la'),
666 -(u'తెలుగు', 'te'),
667 -(u'ქართული', 'ka'),
668 -(u'Sinugboanong Binisaya', 'ceb'),
669 -(u'Македонски', 'mk'),
670 -(u'Azərbaycan', 'az'),
671 -(u'Tagalog', 'tl'),
672 -(u'Brezhoneg', 'br'),
673 -(u'Srpskohrvatski', 'sh'),
674 -(u'Српскохрватски', 'sh'),
675 -(u'मराठी', 'mr'),
676 -(u'Lëtzebuergesch', 'lb'),
677 -(u'Basa Jawa', 'jv'),
678 -(u'Latviešu', 'lv'),
679 -(u'Bosanski', 'bs'),
680 -(u'Íslenska', 'is'),
681 -(u'Cymraeg', 'cy'),
682 -(u'Беларуская', 'be-x-old'),
683 -(u'тарашкевіца', 'be-x-old'),
684 -(u'Piemontèis', 'pms'),
685 -(u'Shqip', 'sq'),
686 -(u'தமிழ்', 'ta'),
687 -(u'ইমার ঠার', 'bpy'),
688 -(u'বিষ্ণুপ্রিয়া মণিপুরী', 'bpy'),
689 -(u'Беларуская', 'be'),
690 -(u'Aragonés', 'an'),
691 -(u'Occitan', 'oc'),
692 -(u'বাংলা', 'bn'),
693 -(u'Kiswahili', 'sw'),
694 -(u'Ido', 'io'),
695 -(u'Ripoarisch', 'ksh'),
696 -(u'Lumbaart', 'lmo'),
697 -(u'Frysk', 'fy'),
698 -(u'ગુજરાતી', 'gu'),
699 -(u'Plattdüütsch', 'nds'),
700 -(u'Afrikaans', 'af'),
701 -(u'Sicilianu', 'scn'),
702 -(u'Runa Simi', 'qu'),
703 -(u'Kurdî', 'ku'),
704 -(u'كوردی', 'ku'),
705 -(u'اردو', 'ur'),
706 -(u'Basa Sunda', 'su'),
707 -(u'മലയാളം', 'ml'),
708 -(u'粵語', 'zh-yue'),
709 -(u'Asturianu', 'ast'),
710 -(u'Nnapulitano', 'nap'),
711 -(u'Žemaitėška', 'bat-smg'),
712 -(u'Walon', 'wa'),
713 -(u'Чăваш', 'cv'),
714 -(u'Gaeilge', 'ga'),
715 -(u'Հայերեն', 'hy'),
716 -(u'Yorùbá', 'yo'),
717 -(u'ಕನ್ನಡ', 'kn'),
718 -(u'Тоҷикӣ', 'tg'),
719 -(u'Tarandíne', 'roa-tara'),
720 -(u'Vèneto', 'vec'),
721 -(u'شاہ مکھی پنجابی', 'pnb'),
722 -(u'Shāhmukhī Pañjābī', 'pnb'),
723 -(u'नेपाली', 'ne'),
724 -(u'Gàidhlig', 'gd'),
725 -(u'ייִדיש', 'yi'),
726 -(u'Bân-lâm-gú', 'zh-min-nan'),
727 -(u'O‘zbek', 'uz'),
728 -(u'Tatarça', 'tt'),
729 -(u'Татарча', 'tt'),
730 -(u'Kapampangan', 'pam'),
731 -(u'Иронау', 'os'),
732 -(u'Саха тыла', 'sah'),
733 -(u'Saxa Tyla', 'sah'),
734 -(u'Alemannisch', 'als'),
735 -(u'Māori', 'mi'),
736 -(u'مصرى', 'arz'),
737 -(u'Maṣrī', 'arz'),
738 -(u'Қазақша', 'kk'),
739 -(u'Nāhuatl', 'nah'),
740 -(u'Limburgs', 'li'),
741 -(u'Hornjoserbsce', 'hsb'),
742 -(u'گیلکی', 'glk'),
743 -(u'Corsu', 'co'),
744 -(u'贛語', 'gan'),
745 -(u'አማርኛ', 'am'),
746 -(u'Монгол', 'mn'),
747 -(u'Interlingua', 'ia'),
748 -(u'Bikol', 'bcl'),
749 -(u'Võro', 'fiu-vro'),
750 -(u'Nedersaksisch', 'nds-nl'),
751 -(u'Føroyskt', 'fo'),
752 -(u'تركمن ', 'tk'),
753 -(u'Туркмен', 'tk'),
754 -(u'Scots', 'sco'),
755 -(u'West-Vlams', 'vls'),
756 -(u'සිංහල', 'si'),
757 -(u'संस्कृतम्', 'sa'),
758 -(u'Boarisch', 'bar'),
759 -(u'မ္ရန္‌မာစာ', 'my'), #Needs fix
760 -(u'Gaelg', 'gv'),
761 -(u'ދިވެހިބަސް', 'dv'),
762 -(u'Nouormand', 'nrm'),
763 -(u'Normaund', 'nrm'),
764 -(u'Pangasinan', 'pag'),
765 -(u'Rumantsch', 'rm'),
766 -(u'Basa Banyumasan', 'map-bms'),
767 -(u'Zazaki', 'diq'),
768 -(u'Soranî', 'ckb'),
769 -(u'کوردی', 'ckb'),
770 -(u'Sámegiella', 'se'),
771 -(u'مَزِروني', 'mzn'),
772 -(u'吴语', 'wuu'),
773 -(u'Oyghurque', 'ug'),
774 -(u'Furlan', 'fur'),
775 -(u'Líguru', 'lij'),
776 -(u'Malti', 'mt'),
777 -(u'भोजपुरी', 'bh'),
778 -(u'Novial', 'nov'),
779 -(u'Malagasy', 'mg'),
780 -(u'Kaszëbsczi', 'csb'),
781 -(u'Ilokano', 'ilo'),
782 -(u'Sardu', 'sc'),
783 -(u'古文', 'zh-classical'),
784 -(u'文言文', 'zh-classical'),
785 -(u'ភាសាខ្មែរ', 'km'),
786 -(u'Dzhudezmo', 'lad'),
787 -(u'पाऴि', 'pi'),
788 -(u'Englisc', 'ang'),
789 -(u'Chavacano de Zamboanga', 'cbk-zam'),
790 -(u'བོད་སྐད', 'bo'),
791 -(u'Fiji Hindi', 'hif'),
792 -(u'Arpitan', 'frp'),
793 -(u'Hak-kâ-fa', 'hak'),
794 -(u'客家話', 'hak'),
795 -(u'Kernewek', 'kw'),
796 -(u'Karnuack', 'kw'),
797 -(u'ਪੰਜਾਬੀ', 'pa'),
798 -(u'پښتو', 'ps'),
799 -(u'Хальмг', 'xal'),
800 -(u'Ślůnski', 'szl'),
801 -(u'Deitsch', 'pdc'),
802 -(u'Hawai`i', 'haw'),
803 -(u'Seeltersk', 'stq'),
804 -(u'Interlingue', 'ie'),
805 -(u'Diné bizaad', 'nv'),
806 -(u'Na Vosa Vakaviti', 'fj'),
807 -(u'Qırımtatarca', 'crh'),
808 -(u'Коми', 'kv'),
809 -(u'faka Tonga', 'to'),
810 -(u'Bahsa Acèh', 'ace'),
811 -(u'Soomaaliga', 'so'),
812 -(u'Эрзянь', 'myv'),
813 -(u'Erzjanj Kelj', 'myv'),
814 -(u"Avañe'ẽ", 'gn'),
815 -(u'Къарачай-Малкъар', 'krc'),
816 -(u'Qarachay-Malqar', 'krc'),
817 -(u'Estremeñu', 'ext'),
818 -(u'Lingala', 'ln'),
819 -(u'Кыргызча', 'ky'),
820 -(u'Олык Марий', 'mhr'),
821 -(u'Olyk Marij', 'mhr'),
822 -(u'ܐܪܡܝܐ', 'arc'),
823 -(u'Emiliàn e rumagnòl', 'eml'),
824 -(u'Lojban', 'jbo'),
825 -(u'Picard', 'pcd'),
826 -(u'Aymar', 'ay'),
827 -(u'Wolof', 'wo'),
828 -(u'chiTumbuka', 'tum'),
829 -(u'Taqbaylit', 'kab'),
830 -(u'Башҡорт', 'ba'),
831 -(u'Frasch', 'frr'),
832 -(u'Reo Mā`ohi', 'ty'),
833 -(u'Tok Pisin', 'tpi'),
834 -(u'Papiamentu', 'pap'),
835 -(u'Zeêuws', 'zea'),
836 -(u'Sranantongo', 'srn'),
837 -(u'Kalaallisut', 'kl'),
838 -(u'Удмурт кыл', 'udm'),
839 -(u'Нохчийн', 'ce'),
840 -(u'Igbo', 'ig'),
841 -(u'Перем Коми', 'koi'),
842 -(u'Perem Komi', 'koi'),
843 -(u'ଓଡ଼ିଆ', 'or'),
844 -(u'Dolnoserbski', 'dsb'),
845 -(u'KiKongo', 'kg'),
846 -(u'ລາວ', 'lo'),
847 -(u'Аҧсуа', 'ab'),
848 -(u'Мокшень', 'mdf'),
849 -(u'Mokshanj Kälj', 'mdf'),
850 -(u'romani - रोमानी', 'rmy'),
851 -(u'Кырык Мары', 'mrj'),
852 -(u'Kyryk Mary', 'mrj'),
853 -(u'Bahasa Banjar', 'bjn'),
854 -(u'Словѣньскъ', 'cu'),
855 -(u'Páigina Percipal', 'mwl'),
856 -(u'Qaraqalpaqsha', 'kaa'),
857 -(u'Gagana Samoa', 'sm'),
858 -(u'Молдовеняскэ', 'mo'),
859 -(u'Tetun', 'tet'),
860 -(u'Авар', 'av'),
861 -(u'कश्मीरी', 'ks'),
862 -(u'كشميري', 'ks'),
863 -(u'𐌲𐌿𐍄𐌹𐍃𐌺', 'got'), #Needs fix
864 -(u'سنڌي، سندھی ، सिन्ध', 'sd'),
865 -(u'Bamanankan', 'bm'),
866 -(u'dorerin Naoero', 'na'),
867 -(u'Norfuk', 'pih'),
868 -(u'Ποντιακά', 'pnt'),
869 -(u'ᐃᓄᒃᑎᑐᑦ', 'iu'),
870 -(u'Iñupiak', 'ik'),
871 -(u'Bislama', 'bi'),
872 -(u'ᏣᎳᎩ', 'chr'),
873 -(u'অসমীয়া', 'as'),
874 -(u'Mìng-dĕ̤ng-ngṳ̄', 'cdo'),
875 -(u'Eʋegbe', 'ee'),
876 -(u'SiSwati', 'ss'),
877 -(u'Oromoo', 'om'),
878 -(u'Cuengh', 'za'),
879 -(u'isiZulu', 'zu'),
880 -(u'ትግርኛ', 'ti'),
881 -(u'Tshivenda', 've'),
882 -(u'Xitsonga', 'ts'),
883 -(u'هَوُسَ', 'ha'),
884 -(u'ཇོང་ཁ', 'dz'),
885 -(u'Sängö', 'sg'),
886 -(u'Chamoru', 'ch'),
887 -(u'Nehiyaw', 'cr'),
888 -(u'isiXhosa', 'xh'),
889 -(u'Akana', 'ak'),
890 -(u'Sesotho', 'st'),
891 -(u'Ikinyarwanda', 'rw'),
892 -(u'Setswana', 'tn'),
893 -(u'Gĩkũyũ', 'ki'),
894 -(u'Буряад', 'bxr'),
895 -(u'Basa Ugi', 'bug'),
896 -(u'Chi-Chewa', 'ny'),
897 -(u'Лакку', 'lbe'),
898 -(u'Twi', 'tw'),
899 -(u'chiShona', 'sn'),
900 -(u'Kirundi', 'rn'),
901 -(u'Fulfulde', 'ff'),
902 -(u'Tsetsêhestâhese', 'chy'),
903 -(u'Luganda', 'lg'),
904 -(u'Oshiwambo', 'ng'),
905 -(u'ꆇꉙ', 'ii'),
906 -(u'Choctaw', 'cho'),
907 -(u'Ebon', 'mh'),
908 -(u'Afar', 'aa'),
909 -(u'Kuanyama', 'kj'),
910 -(u'Hiri Motu', 'ho'),
911 -(u'Muskogee', 'mus'),
912 -(u'Kanuri', 'kr'),
913 -(u'Otsiherero', 'hz'),
914 -])
915 -
916 -
917 -#wiki = Wiki('utf-8')
918 -#wiki.match_languages()

Status & tagging log