Heim  >  Artikel  >  Backend-Entwicklung  >  Welches Land hat die meisten Inhalte auf Wikipedia?

Welches Land hat die meisten Inhalte auf Wikipedia?

王林
王林Original
2024-08-29 18:31:00541Durchsuche

Einführung

Wenn ich im Internet nach etwas suche, stelle ich oft fest, dass englische Inhalte viel umfassender sind als französische Inhalte.

Obwohl es angesichts der Anzahl der Englischsprachigen auf der Welt im Vergleich zu den Französischsprachigen (etwa vier- bis fünfmal mehr) offensichtlich erscheinen mag, wollte ich diese Hypothese testen und quantifizieren.

TLDR: Im Durchschnitt ein englischer Artikel auf Wikipedia enthält 19 % mehr Informationen als sein französisches Gegenstück.

Der Quellcode für diese Analyse ist hier verfügbar: https://github.com/jverneaut/wikipedia-analysis/

Protokoll

Wikipedia ist eine der größten Quellen für hochwertige Inhalte im Internet weltweit.

Zum Zeitpunkt des Schreibens dieses Artikels umfasste die englische Version über 6.700.000 einzigartige Artikel, verglichen mit nur 2.500.000 in der französischen Version. Wir werden dieses Korpus als Grundlage für unsere Studie verwenden.

Mithilfe der Monte-Carlo-Methode werden wir für jede Sprache zufällige Artikel aus Wikipedia auswählen und die durchschnittliche Zeichenlänge dieses Korpus berechnen. Mit einer ausreichend großen Anzahl an Proben sollten wir realitätsnahe Ergebnisse erhalten.

Da die Wikimedia-API keine Methode zum Ermitteln der Zeichenlänge eines Artikels bereitstellt, erhalten wir diese Informationen wie folgt:

  1. Rufen Sie die Bytegröße einer großen Stichprobe von Artikeln über die Wikimedia-API ab.
  2. Schätzen Sie die Anzahl der Bytes pro Zeichen anhand einer kleinen Stichprobe von Artikeln mithilfe der Monte-Carlo-Methode.
  3. Rufen Sie die Zeichenanzahl einer großen Anzahl von Artikeln mithilfe der in Schritt 2 ermittelten Byte-pro-Zeichen-Schätzung ab.

Da wir die Monte-Carlo-Methode verwenden, um Bytes pro Zeichen zu schätzen, benötigen wir die größtmögliche Anzahl von Artikeln, um Abweichungen von der tatsächlichen Anzahl zu minimieren.

Die Wikimedia-API-Dokumentation spezifiziert diese Einschränkungen:

  • Nicht mehr als 500 zufällige Artikel pro Anfrage.
  • Nicht mehr als 50 Artikelinhalte pro Anfrage.

Unter Berücksichtigung dieser Einschränkungen und als Kompromiss zwischen Präzision und Abfrageausführungszeit habe ich mich entschieden, 100.000 Artikel pro Sprache als Referenz für die Bytelänge des Artikels und 500 Artikel zur Schätzung der Bytes pro Zeichen für jede Sprache auszuwählen.

Einschränkungen

Derzeit gibt die Wikimedia-API ihr eigenes Wikitext-Format zurück, wenn sie aufgefordert wird, den Inhalt eines Artikels bereitzustellen. Dieses Format ist kein einfacher Text und ähnelt eher HTML. Da alle Sprachen auf Wikimedia dasselbe Format verwenden, schätze ich, dass wir uns darauf verlassen können, ohne die Richtung unserer Endergebnisse zu beeinflussen.

Einige Sprachen sind jedoch ausführlicher als andere. Auf Französisch sagen wir zum Beispiel „Comment ça va?“ (15 Zeichen) im Vergleich zu „Wie geht es dir?“ (12 Zeichen) auf Englisch. Diese Studie berücksichtigt dieses Phänomen nicht. Wenn wir uns damit befassen wollten, könnten wir verschiedene Übersetzungen desselben Buchkorpus vergleichen, um eine „Dichte“-Korrekturvariable für Sprachen zu ermitteln. Bei meiner Recherche habe ich keine Daten gefunden, die ein auf die einzelnen Sprachen anzuwendendes Verhältnis liefern.

Allerdings habe ich einen sehr interessanten Artikel gefunden, der die Informationsdichte von 17 verschiedenen Sprachen und die Geschwindigkeit, mit der sie gesprochen werden, vergleicht. Die Schlussfolgerung ist, dass die „effizientesten“ Sprachen langsamer gesprochen werden als die am wenigsten effizienten, was zu einer konstanten verbalen Informationsübertragungsrate von ca. 39 Bit pro Sekunde führt.

Interessant.

Ermitteln Sie die durchschnittliche Bytelänge von Artikeln in jeder Sprache

Wie im Protokoll angegeben, werden wir eine Wikipedia-API verwenden, um 500 zufällige Artikel in einer bestimmten Sprache abzurufen.

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"]

Dies gibt uns dann eine Antwort wie { "id1": { "title": "...", "length": 1234 }, "id2": { "title": "...", "length ": 5678 }, ... }, mit dem wir die Größe einer großen Anzahl von Artikeln in Bytes abrufen können.

Diese Daten werden dann überarbeitet, um die folgende Tabelle zu erhalten:

Language Average length ...
EN 8865.33259
FR 7566.10867
RU 10923.87673
JA  9865.59485
...

Auf den ersten Blick scheint es, dass Artikel auf Englisch eine größere Bytelänge haben als solche auf Französisch. Ebenso haben die in Russisch eine größere Bytelänge als die in jeder anderen Sprache.

Which country has the most content on Wikipedia?

Sollten wir bei dieser Schlussfolgerung aufhören? Nicht ganz. Da es sich bei der von Wikipedia angegebenen Länge um eine Länge in Bytes handelt, müssen wir etwas tiefer in die Kodierung von Zeichen eintauchen, um diese ersten Ergebnisse zu verstehen.

Wie Buchstaben kodiert werden: Eine Einführung in UTF-8

Was ist ein Byte?

Im Gegensatz zu Ihnen und mir hat ein Computer keine Vorstellung von Buchstaben, geschweige denn von einem Alphabet. Dabei wird alles als Folge von Nullen und Einsen dargestellt.

In unserem Dezimalsystem gehen wir von 0 auf 1, dann von 1 auf 2 und so weiter bis 10.

Für den Computer, der ein Binärsystem verwendet, gehen wir von 0 auf 1, dann von 1 auf 10, dann von 10 auf 11, 100 und so weiter.

Hier ist eine Vergleichstabelle zur Verdeutlichung:

Decimal Binary
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
...

Das Erlernen der Binärzahl geht weit über den Rahmen dieses Artikels hinaus, aber Sie können sehen, dass mit zunehmender Zahl die binäre Darstellung im Vergleich zur dezimalen Darstellung „breiter“ wird.

Da ein Computer zwischen Zahlen unterscheiden muss, speichert er sie in kleinen Paketen von 8 Einheiten, sogenannten Bytes. Ein Byte besteht aus 8 Bits, zum Beispiel 01001011.

Wie UTF-8 Zeichen speichert

Wir haben gesehen, wie man Zahlen speichert, beim Speichern von Buchstaben wird es etwas komplizierter.

Unser lateinisches Alphabet, das in vielen westlichen Ländern verwendet wird, besteht aus 26 Buchstaben. Könnten wir nicht einfach eine Referenztabelle verwenden, in der jede Zahl von 0 bis 25 einem Buchstaben entspricht?

Letter Index Binary index
a 0 00000000
b 1 00000001
c 2 00000010
... ... ...
z 25 00011001

Aber wir haben mehr Zeichen als nur Kleinbuchstaben. In diesem einfachen Satz gibt es auch Großbuchstaben, Kommas, Punkte usw. Es wurde eine standardisierte Liste erstellt, um alle diese Zeichen in einem einzigen Byte zusammenzufassen, bekannt als ASCII-Standard.

Zu Beginn der Computertechnik reichte ASCII für grundlegende Anwendungen aus. Aber was ist, wenn wir andere Zeichen verwenden möchten? Wie schreiben wir mit dem kyrillischen Alphabet (33 Buchstaben)? Aus diesem Grund wurde der UTF-8-Standard erstellt.

UTF-8 steht für Unicode (Universal Coded Character Set) TTransformation Format – 8 Bits. Es handelt sich um ein Kodierungssystem, das es einem Computer ermöglicht, Zeichen in einem oder mehreren Bytes zu speichern.

Um anzugeben, wie viele Bytes für die Daten verwendet werden, werden die ersten Bits dieser Kodierung verwendet, um diese Informationen zu signalisieren.

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.

Get the average character length in bytes of articles for each language

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.

Results

We can now correct the data by changing from a size in bytes to a size in characters which gives us the following graph:

Which country has the most content on Wikipedia?

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.

Which country has the most content on Wikipedia?

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/

Das obige ist der detaillierte Inhalt vonWelches Land hat die meisten Inhalte auf Wikipedia?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn