我想要下载完整的维基百科文本用于我的大学项目。我需要编写自己的爬虫程序来进行下载还是有公共数据集可以在线获取维基百科?
为了简单介绍我的项目,我想查找几个我感兴趣的文章中的有趣单词。但是为了找这些有趣的单词,我计划应用tf/idf来计算每个单词的词频并选取高频单词。但是为了计算tf,我需要知道整个维基百科中该单词的总出现次数。
如何实现这一点?
我想要下载完整的维基百科文本用于我的大学项目。我需要编写自己的爬虫程序来进行下载还是有公共数据集可以在线获取维基百科?
为了简单介绍我的项目,我想查找几个我感兴趣的文章中的有趣单词。但是为了找这些有趣的单词,我计划应用tf/idf来计算每个单词的词频并选取高频单词。但是为了计算tf,我需要知道整个维基百科中该单词的总出现次数。
如何实现这一点?
考虑到转储文件的大小,您最好使用英语单词频率,或者使用MediaWiki API随机轮询页面(或者最常访问的页面)。有一些基于此API构建机器人的框架(如Ruby、C#等),可以帮助您。
我在https://www.kaggle.com/datasets/ltcmdrdata/plain-text-wikipedia-202011上找到了一个相关的Kaggle数据集。
从数据集描述中可以看出:
该数据集包括约40MB的JSON文件,每个文件都包含一组维基百科文章。 JSON中的每个文章元素仅包含3个键:ID编号、文章标题和文章正文。每篇文章都被“展开”为占用单个纯文本字符串。这使得人类更容易阅读,而不是标记版本。它也使得NLP任务更容易。您将需要做的清理工作要少得多。
每个文件的格式如下:
[
{
"id": "17279752",
"text": "Hawthorne Road was a cricket and football ground in Bootle in England...",
"title": "Hawthorne Road"
}
]
#https://en.wikipedia.org/w/api.php?action=query&prop=extracts&pageids=18630637&inprop=url&format=json
import sys, requests
for i in range(int(sys.argv[1]),int(sys.argv[2])):
print("[wikipedia] getting source - id "+str(i))
Text=requests.get("https://en.wikipedia.org/w/api.php?action=query&prop=extracts&pageids="+str(i)+"&inprop=url&format=json").text
print("[wikipedia] putting into file - id "+str(i))
with open("wikipedia/"+str(i)+"--id.json","w+") as File:
File.writelines(Text)
print("[wikipedia] archived - id "+str(i))