Existe-t-il une bibliothèque python pour obtenir une liste de pays pour un code de langue spécifique où c'est une langue officielle ou couramment utilisée? Par exemple, le code de langue «fr» est associé à 29 pays où le français est une langue officielle plus 8 pays où il est couramment utilisé.Faire correspondre le code de langue avec les pays où cette langue est une langue officielle ou couramment utilisée
Répondre
pycountry (sérieusement). Vous pouvez l'obtenir à partir du Package Index.
Recherchez l'emballage Babel. Il dispose d'un fichier pickle pour chaque paramètre régional pris en charge. Voir la fonction list() dans le module localedata pour obtenir une liste de toutes les locales. Ensuite, écrire un code pour diviser les lieux en (langue, pays) etc etc
C'est très facile d'utiliser 'babel.languages.get_territory_language_info()' – Rmatt
@Rmatt C'est incroyable à quel point un paquet peut devenir plus facile à utiliser dans six ans :-) –
Bien sûr, c'est pourquoi j'ai aussi voté pour votre réponse! Vous avez apporté un chemin décent, juste fait plus précis pour les nouveaux arrivants;) – Rmatt
En dépit de la réponse acceptée, autant que je sache, aucun des fichiers XML sous-jacents à pycountry ne contient un moyen de mapper les langues vers les pays. Il contient des listes de langues et de leurs codes iso, et des listes de pays et de leurs codes iso, ainsi que d'autres choses utiles, mais pas cela.
De même, le paquet Babel est génial, mais après avoir creusé pendant un moment, je ne pouvais trouver aucun moyen de lister toutes les langues pour un pays particulier. Le mieux que vous pouvez faire est le « plus probable » la langue: https://stackoverflow.com/a/22199367/202168
J'ai donc dû chercher moi-même ...
def get_territory_languages():
import lxml
import urllib
langxml = urllib.urlopen('http://unicode.org/repos/cldr/trunk/common/supplemental/supplementalData.xml')
langtree = lxml.etree.XML(langxml.read())
territory_languages = {}
for t in langtree.find('territoryInfo').findall('territory'):
langs = {}
for l in t.findall('languagePopulation'):
langs[l.get('type')] = {
'percent': float(l.get('populationPercent')),
'official': bool(l.get('officialStatus'))
}
territory_languages[t.get('type')] = langs
return territory_languages
Vous voulez probablement stocker le résultat de ceci dans un fichier plutôt que d'appeler à travers le web chaque fois que vous en avez besoin.
Cet ensemble de données contient des langues « non officielles » et, vous voudrez peut-être de ne pas inclure ceux-ci, voici un peu plus un exemple de code:
TERRITORY_LANGUAGES = get_territory_languages()
def get_official_locale_ids(country_code):
country_code = country_code.upper()
langs = TERRITORY_LANGUAGES[country_code].items()
# most widely-spoken first:
langs.sort(key=lambda l: l[1]['percent'], reverse=True)
return [
'{lang}_{terr}'.format(lang=lang, terr=country_code)
for lang, spec in langs if spec['official']
]
get_official_locale_ids('es')
>>> ['es_ES', 'ca_ES', 'gl_ES', 'eu_ES', 'ast_ES']
Je viens d'avoir un coup d'œil à la documentation, et elle ne présente pas semble que vous pouvez fournir un code de langue, et obtenir une liste de tous les pays qui utilisent cette langue –
pourrait être utile de vérifier à nouveau - la raison pour laquelle je dis cela parce que j'ai utilisé ce paquet dans un but similaire (devises) - * mais * je n'étais pas capable d'utiliser l'interface. Au lieu de cela j'ai dû travailler directement avec les cinq bases de données XML fournies dans le paquet. – doug
@ a_m0d: Vous devrez peut-être écrire du code vous-même. –