一个用于获取维基百科页面完整编辑历史的Python工具
项目描述
维基百科历史
一个用于获取维基百科页面完整修订历史的工具。
安装
要安装维基百科历史,只需运行
$ pip install wikipedia-histories
维基百科历史与Python 3.6+兼容。
用法
该模块具有基本功能,允许它以方便的对象列表的形式收集维基百科页面的修订历史和元数据,这些对象可以转换为DataFrame。这还包括每个修订的文质量。
>>> import wikipedia_histories
# Generate a list of revisions for a specified page
>>> golden_swallow = wikipedia_histories.get_history('Golden swallow')
# Show the revision IDs for every edit
>>> golden_swallow
# [130805848, 162259515, 167233740, 195388442, ...
# Show the user who made a specific edit
>>> golden_swallow[16].user
# u'Snowmanradio'
# Show the text of at the time of a specific edit
>>> golden_swallow[16].content
# u'The Golden Swallow (Tachycineta euchrysea) is a swallow. The Golden Swallow formerly'...
>>> golden_swallow[200].content
# u'The golden swallow (Tachycineta euchrysea) is a passerine in the swallow family'...
# Get the article rating at the time of the edit
>>> ratings = [revision.rating for revision in golden_swallow]
>>> ratings
# ['NA', 'NA', 'NA', 'NA', 'stub', 'stub', ...
# Get the time of each edit as a datetime object
>>> times = [revision.time for revision in golden_swallow]
>>> times
# [datetime.datetime(2007, 5, 14, 16, 15, 31), datetime.datetime(2007, 10, 4, 15, 36, 29), ...
# Generate a dataframe with text and metadata from a the list of revisions
>>> df = wikipedia_histories.to_df(golden_swallow)
文章的额外元数据,包括一个此工作流程的示例可在tests/demo.py
中找到。
域级别分析
此模块还包含通过根据编辑文章的编辑者生成社交网络来进行大量维基百科文章的高级分析的功能。此功能可以通过安装
pip install wikipedia_histories[networks]
此工具包可在wikipedia_histories.networks.analyze_networks
和wikipedia_histories.networks.network_builder
中找到。
首先,将域定义为一个字典
或json
,其中键是域名,值是表示该域的类别列表。例如,代表“文化”和“政治”的一组域名
{
"culture": [
"Category:Television_in_the_United_States",
"Category:American_films",
"Category:American_novels"
],
"politics": [
"Category:Conservatism",
"Category:Liberalism"
]
}
此格式的示例可在examples/domains.json
中找到。
这些域表示的文章,包括一定深度的嵌套类别,可以使用wikipedia_histories.networks.get_category_articles.find_articles()
收集和保存为csv
,使用类别和域名属性附加。一旦收集了这一组文章,就可以使用wikipedia_histories.get_history()
下载这些文章,无论是带修订文本还是不带。这组文章可用于分析维基百科修订行为在类别或域上的行为。
使用此方法下载一组文章后,可以收集这些文章的聚合元数据,包括独特编辑者的数量、每次编辑增加的平均单词数和每次编辑删除的平均单词数、文章年龄以及总编辑数,并使用 wikipedia_histories.get_metadata()
将该信息保存到 DataFrame 中。
此工作流程的示例可在 examples/collect_articles.py
中找到。
社交网络分析
还可以构建和分析编辑这些文章的用户网络,并研究域之间如何相互关联。为此分析,首先必须下载表示分类域的一组文章,并将其保存到表示域的文件夹中,同时保存元数据表。
一旦设置完成,就可以生成表示域内或域间连接的网络的集合。通过将 domain
作为输入传递来指定应使用哪个域来构建网络;如果没有传递 domain
,则生成的网络将表示来自不同域的类别之间的连接。
在每个创建的网络中,节点表示文章,加权边表示两篇文章之间共有编辑者的数量。函数 wikipedia_histories.networks.network_builder.generate_networks()
允许生成具有特定节点数和特定计数的网络——因为它们是通过从下载的文章中进行采样生成的,所以生成许多网络表示数据集的引导。
函数调用
networks = wikipedia_histories.networks.network_builder.generate_networks(
count=1000,
size=300,
domain=domain,
metadata_path=metadata_path,
articles_path=articles_path,
)
将生成1000个网络,每个网络有300个节点,或者每个选择类别有150个节点。因为类别输入是 None
,所以两个选择类别将来自不同的域。metadata_path
参数是 find_articles()
函数生成的元数据表的路径,而 articles_path
参数是基于 find_articles()
元数据下载的文章的路径。
该函数返回一个 NetworkX
对象的列表。可以通过将 write
参数切换到 True
并传递一个 output_folder
来将网络写入磁盘作为 .graphml
文件(注意这一点对于分析是必要的)。
生成后,可以使用 get_network_metadata()
函数分析网络,该函数返回一个包含基于检测到的 Louvain 社区的纯度分数的 DataFrame 和每个网络基于网络表示的类别的相异系数。
此工作流程的示例可在 examples/collect_networks.py
中找到。
维基百科历史与Python 3.6+兼容。
注意事项
此软件包被用于麦吉尔 .txtlab 发表的一篇论文:[https://txtlab.org/2020/09/do-wikipedia-editors-specialize/](https://txtlab.org/2020/09/do-wikipedia-editors-specialize/)