如何使用wiktextract

问题描述 投票:0回答:1

我正在尝试使用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"])
python
1个回答
1
投票

你是在正确的轨道上,但不必太担心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

为了方便,我将小转储提取放在服务器上。在完全转储上运行需要更长的时间。

© www.soinside.com 2019 - 2024. All rights reserved.