Maison >développement back-end >Tutoriel Python >Quel pays a le plus de contenu sur Wikipédia ?
Lorsque je recherche quelque chose sur Internet, je trouve souvent que le contenu anglais est beaucoup plus complet que le contenu français.
Bien que cela puisse paraître évident étant donné le nombre d'anglophones dans le monde par rapport aux francophones (environ 4 à 5 fois plus), j'ai souhaité tester cette hypothèse et la quantifier.
TLDR : En moyenne, un article anglais sur Wikipédia contient 19% d'informations en plus que son homologue français.
Le code source de cette analyse est disponible ici : https://github.com/jverneaut/wikipedia-analysis/
Wikipédia est l'une des plus grandes sources de contenu de qualité sur le Web dans le monde.
Au moment de la rédaction de cet article, la version anglaise compte plus de 6 700 000 articles uniques contre seulement 2 500 000 pour la version française. Nous utiliserons ce corpus comme base de notre étude.
En utilisant la méthode Monte Carlo, nous échantillonnerons des articles aléatoires de Wikipédia pour chaque langue et calculerons la longueur moyenne des caractères de ce corpus. Avec un nombre d'échantillons suffisamment important, on devrait obtenir des résultats proches de la réalité.
L'API Wikimedia ne fournissant pas de méthode pour obtenir la longueur des caractères d'un article, nous obtiendrons ces informations de la manière suivante :
Comme nous utilisons la méthode de Monte Carlo pour estimer les octets par caractère, nous avons besoin du plus grand nombre d'articles possible pour minimiser l'écart par rapport au nombre réel.
La documentation de l'API Wikimedia précise ces limitations :
Compte tenu de ces limitations et comme compromis entre précision et temps d'exécution des requêtes, j'ai choisi d'échantillonner 100 000 articles par langue comme référence pour la longueur en octets des articles et 500 articles pour estimer les octets par caractère pour chaque langue.
Actuellement, l'API Wikimedia renvoie son propre format wikitext lorsqu'on lui demande de fournir le contenu d'un article. Ce format n'est pas du texte brut et est plus proche du HTML. Puisque toutes les langues de Wikimédia utilisent ce même format, j'ai estimé que nous pouvions nous y fier sans influencer l'orientation de nos résultats finaux.
Cependant, certaines langues sont plus verbeuses que d’autres. Par exemple, en français, on dit « Comment ça va ? (15 caractères) par rapport à "Comment vas-tu ?" (12 caractères) en anglais. Cette étude ne prend pas en compte ce phénomène. Si nous voulions y répondre, nous pourrions comparer différentes traductions d'un même corpus de livres pour établir une variable de correction de « densité » pour les langues. Dans mes recherches, je n'ai trouvé aucune donnée fournissant un ratio à appliquer à chaque langue.
Cependant, j'ai trouvé un article très intéressant qui compare la densité d'information de 17 langues différentes et la vitesse à laquelle elles sont parlées. Sa conclusion est que les langues les plus « efficaces » sont parlées plus lentement que les moins efficaces, ce qui entraîne un taux de transmission d'informations verbales constant autour de ~39 bits par seconde.
Intéressant.
Comme indiqué dans le protocole, nous utiliserons une API Wikipédia pour récupérer 500 articles aléatoires dans une langue donnée.
def getRandomArticlesUrl(locale): return "https://" + locale + ".wikipedia.org/w/api.php?action=query&generator=random&grnlimit=500&grnnamespace=0&prop=info&format=json" def getRandomArticles(locale): url = getRandomArticlesUrl(locale) response = requests.get(url) return json.loads(response.content)["query"]["pages"]
Cela nous donne alors une réponse comme { "id1": { "title": "...", "length": 1234 }, "id2": { "title": "...", "length" ": 5678 }, ... } que l'on peut utiliser pour récupérer la taille en octets d'un grand nombre d'articles.
Ces données sont ensuite retravaillées pour obtenir le tableau suivant :
Language | Average length | ... |
---|---|---|
EN | 8865.33259 | |
FR | 7566.10867 | |
RU | 10923.87673 | |
JA | 9865.59485 | |
... |
À première vue, il semblerait que les articles en anglais aient une longueur en octets plus grande que ceux en français. De même, ceux en russe ont une longueur d'octet plus grande que ceux de toute autre langue.
Faut-il s’arrêter à cette conclusion ? Pas tout à fait. Étant donné que la longueur indiquée par Wikipédia est une longueur en octets, nous devons approfondir un peu la façon dont les caractères sont codés pour comprendre ces premiers résultats.
Contrairement à vous et moi, un ordinateur n'a aucune notion de lettres, encore moins d'alphabet. Pour cela, tout est représenté comme une séquence de 0 et de 1.
Dans notre système décimal, on passe de 0 à 1, puis de 1 à 2, et ainsi de suite, jusqu'à 10.
Pour l'ordinateur, qui utilise un système binaire, on passe de 0 à 1, puis de 1 à 10, puis de 10 à 11, 100, et ainsi de suite.
Voici un tableau comparatif pour que ce soit plus clair :
Decimal | Binary |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
... |
L'apprentissage du binaire dépasse largement le cadre de cet article, mais vous pouvez constater qu'à mesure que le nombre devient plus grand, sa représentation binaire est "plus large" par rapport à sa représentation décimale.
Comme un ordinateur doit faire la distinction entre les nombres, il les stocke dans de petits paquets de 8 unités appelés octets. Un octet est composé de 8 bits, par exemple 01001011.
Nous avons vu comment stocker des chiffres, cela devient un peu plus compliqué pour stocker des lettres.
Notre alphabet latin utilisé dans de nombreux pays occidentaux utilise un alphabet de 26 lettres. Ne pourrait-on pas simplement utiliser un tableau de référence où chaque chiffre de 0 à 25 correspond à une lettre ?
Letter | Index | Binary index |
---|---|---|
a | 0 | 00000000 |
b | 1 | 00000001 |
c | 2 | 00000010 |
... | ... | ... |
z | 25 | 00011001 |
Mais nous avons plus de caractères que de simples lettres minuscules. Dans cette phrase simple, nous avons également des lettres majuscules, des virgules, des points, etc. Une liste standardisée a été créée pour inclure tous ces caractères dans un seul octet, connue sous le nom de norme ASCII.
A l'aube de l'informatique, l'ASCII suffisait pour les usages basiques. Mais que se passe-t-il si nous voulons utiliser d’autres personnages ? Comment écrit-on avec l'alphabet cyrillique (33 lettres) ? C'est pourquoi la norme UTF-8 a été créée.
UTF-8 signifie Unicode (Universal Coded Character Set) Transformation Format - 8 bits. C'est un système de codage qui permet à un ordinateur de stocker des caractères à l'aide d'un ou plusieurs octets.
Pour indiquer combien d'octets sont utilisés pour les données, les premiers bits de cet encodage sont utilisés pour signaler cette information.
First UTF-8 bits | Number of bytes used |
---|---|
0xxxxxx | 1 |
110xxxxx ... | 2 |
1110xxxx ... ... | 3 |
11110xxx ... ... ... | 4 |
The following bits also have their purpose, but once again, this goes beyond the scope of this article. Just note that, at a minimum, a single bit can be used as a signature in cases where our character fits within the x1111111 = 127 remaining possibilities.
For English, which does not use accents, we can assume that most characters in an article will be encoded this way, and therefore the average number of bytes per character should be close to 1.
For French, which uses accents, cedillas, etc., we assume that this number will be higher.
Finally, for languages with a more extensive alphabet, such as Russian and Japanese, we can expect a higher number of bytes, which provides a starting point for explaining the results obtained earlier.
Now that we understand what the value returned earlier by the Wikipedia API means, we want to calculate the number of bytes per character for each language in order to adjust these results.
To do this, we use a different way of accessing the Wikipedia API that allows us to obtain both the content of the articles and their byte length.
Why not use this API directly?
This API only returns 50 results per request, whereas the previous one returns 500. Therefore, in the same amount of time, we can get 10 times more results this way.
More concretely, if the API calls took 20 minutes with the first method, they would take 3 hours and 20 minutes with this approach.
def getRandomArticlesUrl(locale): return "https://" + locale + ".wikipedia.org/w/api.php?action=query&generator=random&grnlimit=50&grnnamespace=0&prop=revisions&rvprop=content|size&format=json" def getRandomArticles(locale): url = getRandomArticlesUrl(locale) response = requests.get(url) return json.loads(response.content)["query"]["pages"]
Once this data is synthesized, here is an excerpt of what we get:
Language | Bytes per character | ... |
---|---|---|
EN | 1.006978892420735 | |
FR | 1.0243214042939228 | |
RU | 1.5362439940531318 | |
JA | 1.843857157700553 | |
... |
So our intuition was correct: countries with a larger alphabet distort the data because of the way their content is stored.
We also see that French uses more bytes on average to store its characters than English as we previously assumed.
We can now correct the data by changing from a size in bytes to a size in characters which gives us the following graph:
Our hypothesis is therefore confirmed.
On average, English is the language with the most content per page on Wikipedia. It is followed by French, then Russian, Spanish, and German.
The standard deviation (shown with the black bars) is large for this dataset, which means that the content size varies greatly from the shortest to the longest article. Therefore, it is difficult to establish a general truth for all articles, but this trend still seems consistent with my personal experience of Wikipedia.
If you want all the results from this experiment, I have also created this representation, which compares each language with its percentage of additional/less content relative to the others.
Thanks to this, we therefore find our conclusion that on average, an English article on Wikipedia contains 19% more information than its equivalent in French.
The source code for this analysis is available here: https://github.com/jverneaut/wikipedia-analysis/
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!