我正在尝试使用wiktextract python模块从其转储中提取维基词典xml
文件。但是他们的网站没有给我足够的信息。我无法使用它附带的命令行程序,因为它不是Windows可执行文件,所以我尝试了编程方式。以下代码需要一段时间才能运行,所以它似乎正在做某事但是我不知道如何处理ctx
变量。谁能帮我?
import wiktextract
def word_cb(data):
print(data)
ctx = wiktextract.parse_wiktionary(
r'myfile.xml', word_cb,
languages=["English", "Translingual"])
你是在正确的轨道上,但不必太担心ctx
对象。正如documentation所说:
parse_wiktionary调用将调用
word_cb(data)
获取在Wiktionary转储中找到的单词和重定向。data
是关于单个单词和词性作为字典的信息(相同词性的多个意义被组合到同一个字典中)。它也可能是重定向(通过字典中存在redirect
键表示)。
输出ctx
对象主要包含摘要信息(处理的部分数量等;您可以使用dir(ctx)
查看其中的一些字段。
有用的结果不是返回的ctx
对象中的结果,而是逐字传递给word_cb
的结果。因此,您可以尝试使用以下内容从wiktionary XML转储中获取JSON转储。因为完整转储是几千兆字节,所以为了方便起见,我在服务器上放了一个小转储。
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
为了方便,我将小转储提取放在服务器上。在完全转储上运行需要更长的时间。