问题只问了薄厚,那只需要统计一下文档的页数就好了。
我统计了 2006 年以来的所有联合国安理会决议文件,共计 1099 份。先把结论写在前面:除去有并列最薄的文件后,绝大部分文件,中文是最薄的。
中文 页数最少的决议有 391 份。
英语 页数最少的决议有 7 份。
西班牙语 页数最少的决议有 1 份。
其余的,页数一样或者有并列最少的页码。
有哪些文件不是中文最薄呢?
决议 1803 中页数最少的语言是 英语,总页数为 7。(内容是伊朗核问题,内容大概是继续要求伊朗暂停铀浓缩等活动)
决议 1877 中页数最少的语言是 英语,总页数为 4。(不好概括,简单来说是有关卢旺达的问题)
决议 1932 中页数最少的语言是 西班牙语,总页数为 3。(这份西班牙语的文本,附件没有单起一页,成了唯一一个中英以外的选手)
决议 1993 中页数最少的语言是 英语,总页数为 2。(关于国际法庭的)
决议 2231 中页数最少的语言是 英语,总页数为 104。(这份是伊核问题最主要的决议之一,同时也是我统计的所有决议中最长的一篇。中文 108 页)
决议 2260 中页数最少的语言是 英语,总页数为 1。(科特迪瓦问题)(中文超出四行,导致分页)
决议 2268 中页数最少的语言是 英语,总页数为 2。(叙利亚问题)
决议 2533 中页数最少的语言是 英语,总页数为 1。(叙利亚人道问题)
其余有意思的发现各个语言在联合国安理会决议中的平均厚度
阿拉伯语:6.29 页
中文:4.54 页
英语:4.97 页
法语:5.47 页
俄语:5.99 页
西班牙语:5.49 页
如果页数能代表语言简略程度,那么第一名是中文,第二名是英文,之后分别是法语,西班牙语,俄语,阿拉伯语
领先最多的一篇决议
决议 2368,中文 28 页,英文 33 页,比英文少了 5 页(伊黎伊斯兰国(达伊沙)和基地组织制裁名单)
如何得出此结论的呢?
联合国的文件都在官网上放着,可以抓下来,统计一下的
按理说这么久了应该有人做个爬虫把联合国各个决议爬取下来啊,居然没人做,那就我来试试吧
前面有些答案提到联合国部分机构翻译的水平不一,所以就先选个大机构,安全理事会,选取近两年的各项决议看看。这些决议有些能直接调动维和部队,应该不会胡乱翻译。
各项决议都在这里下载:
比如今年这个 2751 号决议,提供了六种语言的下载,分别为阿拉伯语,中文,英语,法语,俄语,西班牙语(阿拉伯语我不认识,不知道是不是这个)
下载的文件格式为 PDF,打开后大概是这样的:
决议的具体信息对于我们的答案没有什么帮助,有帮助的是下载链接:
https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=s/res/2751(2024)&Lang=A
https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=s/res/2751(2024)&Lang=C
https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=s/res/2751(2024)&Lang=E
https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=s/res/2751(2024)&Lang=F
https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=s/res/2751(2024)&Lang=R
https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=s/res/2751(2024)&Lang=S
分别是阿拉伯语,中文,英语,法语,俄语,西班牙语的文件,注意到,2751 是决议编号,后面的 Lang=啥就是语言版本。有规律就好办了,写一段 Python 程序,将这些报告逐一下载下来就好啦
但是代码我肯定是懒得写的,交给 AI 代劳啦,联合国的服务器太烂,我直接 6 线程同时下载,两分钟就下载完成了 2024 年的所有决议。
我这网络质量不错,偶尔有下载失败的,手动下载一下就行,下载了这么多,就出现了两次
只下载到了 2006 年的数据,为什么呢?因为宿舍熄灯了
接下来是数据分析的内容,首当其冲的就是页数了。Python 有个库,PyPDF2,直接这样就可以输出 PDF 的页数了:
reader = PdfReader(pdf_path)
page_count = len(reader.pages)
下载的时候,我就将文件重命名为决议号 + 语言的文件名形式了,并将同一决议号的文件放在了同一个子文件夹中,很容易分辨出来哪几个文件是属于同一份决议
接下来,写个循环,遍历读取所有文件夹中的文件,依次比较页数大小。
for pdf in pdf_files:
language = pdf.split('_')[1][0] # 提取语言标识
pdf_path = os.path.join(resolution_path, pdf)
reader = PdfReader(pdf_path)
page_count = len(reader.pages)
如果有并列第一的,就会返回超过 1 个的元素,排除一下就行,最后即可得出此结论。
附录:完整的代码:
以下是下载决议的代码
import os
import requests
from concurrent.futures import ThreadPoolExecutor
import time
# 决议编号范围和语言版本
start_number = 1738
end_number = 1652
languages = ["A", "C", "E", "F", "R", "S"]
base_url = "https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=s/res/{}&Lang={}"
def download_resolution(number):
resolution_folder = f"UN_Resolutions/{number}"
os.makedirs(resolution_folder, exist_ok=True)
for lang in languages:
url = base_url.format(f"{number}(2006)", lang)#换成要下载的年份
try:
response = requests.get(url, proxies={
"http": "http://127.0.0.1:7890",
"https": "http://127.0.0.1:7890"
})
response.raise_for_status() # 检查请求是否成功
file_name = f"{resolution_folder}/{number}_{lang}.pdf"
with open(file_name, "wb") as file:
file.write(response.content)
print(f"{file_name} 下载成功!")
except requests.exceptions.RequestException as e:
print(f"{number} - {lang} 版本下载失败:", e)
print(url)
# 使用线程池下载决议
with ThreadPoolExecutor(max_workers=25) as executor:
executor.map(download_resolution, range(start_number, end_number - 1, -1))
time.sleep(1)
以下是统计分析的代码
import os
from PyPDF2 import PdfReader
def count_pages(resolutions_folder):
overall_min_counts = {}
total_resolutions = 0
non_chinese_min_resolutions = []
max_chinese_pages = 0
max_chinese_resolution = None
longest_resolution = None
longest_page_count = 0
total_language_pages = {}
language_count = {}
max_diff = 0
language_names = {
'A': '阿拉伯语',
'C': '中文',
'E': '英语',
'F': '法语',
'R': '俄语',
'S': '西班牙语'
}
for resolution in os.listdir(resolutions_folder):
resolution_path = os.path.join(resolutions_folder, resolution)
if os.path.isdir(resolution_path):
pdf_files = [f for f in os.listdir(resolution_path) if f.endswith('.pdf')]
if len(pdf_files) == 6:
total_resolutions += 1
language_page_count = {}
for pdf in pdf_files:
language = pdf.split('_')[1][0] # 提取语言标识
pdf_path = os.path.join(resolution_path, pdf)
reader = PdfReader(pdf_path)
page_count = len(reader.pages)
if language not in language_page_count:
language_page_count[language] = 0
language_page_count[language] += page_count
# 累加语言总页数和计数
if language not in total_language_pages:
total_language_pages[language] = 0
language_count[language] = 0
total_language_pages[language] += page_count
language_count[language] += 1
# 更新最长决议
total_pages = sum(language_page_count.values())
if total_pages > longest_page_count:
longest_page_count = total_pages
longest_resolution = resolution
# 找出最小页数和出现的语言
min_count = min(language_page_count.values())
min_languages = [lang for lang, count in language_page_count.items() if count == min_count]
# 如果最小页数的语言不唯一,跳过该决议
if len(min_languages) > 1:
continue
# 唯一的最小页数语言
min_language = min_languages[0]
# 输出最少页数语言的信息
print(f"决议 {resolution} 中页数最少的语言是 {language_names[min_language]},总页数为 {min_count}。")
# 更新最少页数统计
if min_language not in overall_min_counts:
overall_min_counts[min_language] = 0
overall_min_counts[min_language] += 1
# 检查中文是否为最少页数
if min_language != 'C':
non_chinese_min_resolutions.append(resolution)
else:
# 找出第二少的语言页数
sorted_counts = sorted(language_page_count.values())
if len(sorted_counts) > 1:
second_least_count = sorted_counts[1]
diff = min_count - second_least_count
print(f"决议 {resolution} 中文页数与第二少语言的差值为 {diff}。")
max_diff = max(max_diff, diff)
# 记录中文页数最多的决议
if 'C' in language_page_count:
if language_page_count['C'] > max_chinese_pages:
max_chinese_pages = language_page_count['C']
max_chinese_resolution = resolution
# 输出总统计
print(f"\n 共计统计了 {total_resolutions} 份决议。")
for language, count in overall_min_counts.items():
print(f"{language_names[language]} 页数最少的决议有 {count} 份。")
# 输出中文页数不是最少的决议
if non_chinese_min_resolutions:
print("以下决议的中文页数不是最少:")
for res in non_chinese_min_resolutions:
print(res)
# 输出中文页数最多的决议
if max_chinese_resolution:
print(f"中文页数最多的决议是 {max_chinese_resolution},总页数为 {max_chinese_pages}。")
print(f"中文页数与第二少语言的最大差值为 {max_diff}。")
# 输出最长的决议
if longest_resolution:
print(f"最长的决议是 {longest_resolution},总页数为 {longest_page_count}。")
# 计算并输出各语言的平均页数
print("\n 各语言的平均页数:")
for language, total_pages in total_language_pages.items():
average_pages = total_pages / language_count[language]
print(f"{language_names[language]}:{average_pages:.2f} 页")
# 调用函数
count_pages('UN_Resolutions')