Negara manakah yang mempunyai kandungan paling banyak di Wikipedia?

王林
Lepaskan: 2024-08-29 18:31:00
asal
539 orang telah melayarinya

pengenalan

Apabila saya mencari sesuatu di internet, saya sering mendapati bahawa kandungan bahasa Inggeris jauh lebih komprehensif daripada kandungan bahasa Perancis.

Walaupun nampak jelas memandangkan bilangan penutur bahasa Inggeris di dunia berbanding penutur bahasa Perancis (kira-kira 4 hingga 5 kali ganda), saya ingin menguji hipotesis ini dan mengukurnya.

TLDR: Secara purata, sebuah rencana bahasa Inggeris di Wikipedia mengandungi 19% lebih maklumat daripada rakan sejawatannya dari Perancis.

Kod sumber untuk analisis ini tersedia di sini: https://github.com/jverneaut/wikipedia-analysis/

Protokol

Wikipedia ialah salah satu sumber terbesar kandungan berkualiti di web di seluruh dunia.

Pada masa artikel ini ditulis, versi Inggeris mempunyai lebih 6,700,000 artikel unik berbanding hanya 2,500,000 untuk versi Perancis. Kami akan menggunakan korpus ini sebagai asas untuk kajian kami.

Menggunakan kaedah Monte Carlo, kami akan mencuba artikel rawak daripada Wikipedia untuk setiap bahasa dan mengira purata panjang aksara korpus ini. Dengan bilangan sampel yang cukup besar, kita harus memperoleh hasil yang hampir dengan realiti.

Memandangkan API Wikimedia tidak menyediakan kaedah untuk mendapatkan panjang aksara artikel, kami akan memperoleh maklumat ini seperti berikut:

  1. Dapatkan semula saiz bait sampel besar artikel melalui API Wikimedia.
  2. Anggarkan bilangan bait setiap aksara daripada sampel kecil artikel menggunakan kaedah Monte Carlo.
  3. Dapatkan kiraan aksara bagi sejumlah besar artikel menggunakan anggaran bait setiap aksara yang diperoleh dalam langkah 2.

Memandangkan kami menggunakan kaedah Monte Carlo untuk menganggarkan bait setiap aksara, kami memerlukan bilangan artikel terbesar yang mungkin untuk meminimumkan sisihan daripada nombor sebenar.

Dokumentasi API Wikimedia menyatakan had ini:

  • Tidak lebih daripada 500 artikel rawak setiap permintaan.
  • Tidak lebih daripada 50 kandungan artikel bagi setiap permintaan.

Mengambil kira pengehadan ini dan sebagai kompromi antara ketepatan dan masa pelaksanaan pertanyaan, saya memilih untuk mencuba 100,000 artikel bagi setiap bahasa sebagai rujukan untuk panjang bait artikel dan 500 artikel untuk menganggarkan bait setiap aksara bagi setiap bahasa.

Had

Pada masa ini, API Wikimedia mengembalikan format teks wikinya sendiri apabila diminta memberikan kandungan artikel. Format ini bukan teks biasa dan lebih dekat dengan HTML. Memandangkan semua bahasa di Wikimedia menggunakan format yang sama ini, saya menganggarkan bahawa kami boleh bergantung padanya tanpa mempengaruhi arah keputusan akhir kami.

Walau bagaimanapun, sesetengah bahasa lebih verbose daripada yang lain. Sebagai contoh, dalam bahasa Perancis, kami menyebut "Komen ça va?" (15 aksara) berbanding dengan "Apa khabar?" (12 aksara) dalam bahasa Inggeris. Kajian ini tidak mengambil kira fenomena ini. Jika kami ingin menanganinya, kami boleh membandingkan terjemahan yang berbeza bagi korpus buku yang sama untuk mewujudkan pembolehubah pembetulan "ketumpatan" untuk bahasa. Dalam penyelidikan saya, saya tidak menemui sebarang data yang menyediakan nisbah untuk digunakan pada setiap bahasa.

Walau bagaimanapun, saya telah menemui kertas kerja yang sangat menarik yang membandingkan ketumpatan maklumat 17 bahasa yang berbeza dan kelajuan ia dituturkan. Kesimpulannya ialah bahasa yang paling "cekap" dituturkan dengan lebih perlahan berbanding bahasa yang paling kurang cekap, menghasilkan kadar penghantaran maklumat lisan secara konsisten sekitar ~39 bit sesaat.

Menarik.

Dapatkan purata bait panjang artikel dalam setiap bahasa

Seperti yang dinyatakan dalam protokol, kami akan menggunakan API Wikipedia untuk mendapatkan 500 artikel rawak dalam bahasa tertentu.

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"]
Salin selepas log masuk

Ini kemudiannya memberi kita respons seperti { "id1": { "title": "...", "length": 1234 }, "id2": { "title": "...", "length ": 5678 }, ... } yang boleh kita gunakan untuk mendapatkan semula saiz dalam bait sebilangan besar artikel.

Data ini kemudiannya diolah semula untuk mendapatkan jadual berikut:

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

Pada pandangan pertama, nampaknya artikel dalam bahasa Inggeris mempunyai panjang bait yang lebih besar daripada artikel dalam bahasa Perancis. Begitu juga, bait dalam bahasa Rusia mempunyai panjang bait yang lebih besar daripada dalam mana-mana bahasa lain.

Which country has the most content on Wikipedia?

Perlukah kita berhenti pada kesimpulan ini? Tidak cukup. Memandangkan panjang yang dilaporkan oleh Wikipedia ialah panjang dalam bait, kita perlu menyelidiki sedikit lebih mendalam tentang cara aksara dikodkan untuk memahami hasil awal ini.

Bagaimana Surat Dikodkan: Pengenalan kepada UTF-8

Apakah bait?

Tidak seperti anda dan saya, komputer tidak mempunyai konsep huruf, apatah lagi abjad. Untuk itu, semuanya diwakili sebagai urutan 0s dan 1s.

Dalam sistem perpuluhan kita, kita pergi dari 0 kepada 1, kemudian dari 1 kepada 2, dan seterusnya, sehingga 10.

Untuk komputer, yang menggunakan sistem binari, kita pergi dari 0 kepada 1, kemudian dari 1 kepada 10, kemudian dari 10 kepada 11, 100, dan seterusnya.

Berikut ialah jadual perbandingan untuk menjadikannya lebih jelas:

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

Pembelajaran binari melangkaui skop artikel ini, tetapi anda dapat melihat bahawa apabila bilangannya menjadi lebih besar, perwakilan binarinya adalah "lebih luas" berbanding dengan perwakilan perpuluhannya.

Memandangkan komputer perlu membezakan antara nombor, ia menyimpannya dalam paket kecil 8 unit yang dipanggil bait. Satu bait terdiri daripada 8 bit, contohnya, 01001011.

Cara UTF-8 menyimpan aksara

Kami telah melihat cara menyimpan nombor, ia menjadi lebih rumit untuk menyimpan huruf.

Abjad Latin kami yang digunakan di banyak negara Barat menggunakan abjad 26 huruf. Tidak bolehkah kita hanya menggunakan jadual rujukan di mana setiap nombor dari 0 hingga 25 sepadan dengan huruf?

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

Tetapi kami mempunyai lebih banyak aksara daripada hanya huruf kecil. Dalam ayat mudah ini, kami juga mempunyai huruf besar, koma, noktah, dll. Senarai piawai telah dibuat untuk memasukkan semua aksara ini dalam satu bait, yang dikenali sebagai piawaian ASCII.

Pada permulaan pengkomputeran, ASCII sudah memadai untuk kegunaan asas. Tetapi bagaimana jika kita mahu menggunakan watak lain? Bagaimanakah kita menulis dengan abjad Cyrillic (33 huruf)? Inilah sebabnya standard UTF-8 dicipta.

UTF-8 singkatan daripada Unicode (Set Aksara Berkod Universal) Tperubahan Format - 8 bit. Ia ialah sistem pengekodan yang membenarkan komputer menyimpan aksara menggunakan satu atau lebih bait.

Untuk menunjukkan bilangan bait yang digunakan untuk data, bit pertama pengekodan ini digunakan untuk menandakan maklumat ini.

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"]
Salin selepas log masuk

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/

Atas ialah kandungan terperinci Negara manakah yang mempunyai kandungan paling banyak di Wikipedia?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!