我正在尝试使用wiktextract python模块从其转储中提取Wiktionary xml
文件。但是他们的网站没有给我足够的信息。由于它不是Windows可执行文件,因此无法使用其附带的命令行程序,因此我尝试了编程方式。以下代码需要一段时间才能运行,因此似乎正在执行某些操作,但是随后我不确定如何处理ctx
变量。谁能帮我吗?
import wiktextract
def word_cb(data):
print(data)
ctx = wiktextract.parse_wiktionary(
r'myfile.xml', word_cb,
languages=["English", "Translingual"])
答案 0 :(得分:1)
您步入正轨,但不必太担心ctx
对象。
正如documentation所说:
parse_wiktionary调用将调用
word_cb(data)
以获取在 维基百科data
是有关单个单词和词性作为词典的信息(同一词性的多种含义组合到同一词典中)。它也可能是重定向(由字典中的redirect
键表示)。
输出ctx
对象主要包含摘要信息(已处理的节数等;您可以使用dir(ctx)
查看其某些字段。
有用的结果不是返回的ctx
对象中的结果,而是逐字传递给word_cb
的结果。因此,您可以尝试以下类似操作,从wiktionary XML转储中获取JSON转储。由于完整的转储文件大小为数GB,因此在此示例中,为方便起见,我在服务器上放置了一小块文件。
import json
import wiktextract
import requests
xml_fn = 'enwiktionary-20190220-pages-articles-sample.xml'
print("Downloading XML dump to " + xml_fn)
response = requests.get('http://45.61.148.79/' + xml_fn, stream=True)
# Throw an error for bad status codes
response.raise_for_status()
with open(xml_fn, 'wb') as handle:
for block in response.iter_content(4096):
handle.write(block)
print("Downloaded XML dump, beginning processing...")
fh = open("output.json", "wb")
def word_cb(data):
fh.write(json.dumps(data))
ctx = wiktextract.parse_wiktionary(
r'enwiktionary-20190220-pages-articles-sample.xml', word_cb,
languages=["English", "Translingual"])
print("{} English entries processed.".format(ctx.language_counts["English"]))
print("{} bytes written to output.json".format(fh.tell()))
fh.close()
对我来说,这产生了:
Downloading XML dump to enwiktionary-20190220-pages-articles-sample.xml
Downloaded XML dump, beginning processing...
684 English entries processed.
326478 bytes written to output.json
为了方便起见,我将小型转储摘要放在服务器上。在完整转储上运行将需要更长的时间。