维基词典是涵盖多种语言的维基词典。它甚至有翻译。我有兴趣解析它并使用数据,以前有没有人做过这样的事情?有没有我可以使用的图书馆?(最好是 Python。)
11 回答
我曾经下载了一个维基词典,试图收集斯拉夫语言的单词和定义。我使用 elementtree 通过作为转储的 xml 文件来接近它。我会避免尝试抓取或抓取该站点,而只需下载 wikimedia 为维基词典提供的 xml 转储。前往wikimedia 下载,查找英语维基词典转储 ( enwiktionary ) 并转到最近的转储。您可能需要 pages-articles.xml.bz2 文件,它只是文章内容,没有历史记录或评论。使用您在 python 中喜欢的任何 xml 处理库来解析它。我个人更喜欢元素树。祝你好运。
维基词典在具有 API的 MediaWiki 上运行。
API 文档的子页面之一是客户端代码,其中列出了一些 Python 库。
是的,很多人都解析过维基词典。您通常可以在Wiktionary-l 邮件列表档案中找到过去的经验。
其他答案未提及的项目是 DBPedia 的维基词典 RDF 提取。
其他数十个研究项目解析了维基词典:您可以在最近的维基词典特刊和维基媒体研究通讯的其他问题中找到一些示例。
最近有人还制作了一个英语维基词典 REST API,其中包括未指定的维基词典数据子集;这件事的未来计划尚不清楚。
我在解析德语维基词典方面很擅长。我最终因为太难写了它,但在我放弃之前,我把我的(根本没有整理)代码放在https://github.com/benreynwar/wiktionary-parser上。尽管编辑使用了一些约定,但除了同行监督之外,它们没有任何强制执行。使用的模板的多样性以及页面中的所有拼写错误使解析非常具有挑战性。
我认为问题在于他们使用了与维基词典相同的系统,这对编辑者来说非常方便,但不适合维基词典的结构化内容。这是一种耻辱,因为如果可以轻松解析维基词典,它将是一个非常有用的资源。
我刚刚从德语转储中制作了一个单词列表,如下所示:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
欢迎您使用 MySQL 解析的维基词典数据库。用 Java 编写的解析器创建了两个数据库(英语维基词典和俄语维基词典):http ://wikokit.googlecode.com
还有JWKTL在解析和从维基词典中提取结构化数据方面做得很好。它是用 Java 编写的,支持英语、德语和俄语版本。
这取决于您需要解析它的彻底程度。如果您只需要获取一种语言中单词的所有内容(定义、词源、发音、变位等),那么这很容易。我以前做过这个,虽然在 Java 中使用 jsoup
但是,如果您需要将其解析为内容的不同组成部分(例如,仅获取单词的定义),那么将更具挑战性。语言中单词的维基词典条目没有预定义的模板,因此标题可以是从<h3>
到的任何内容<h6>
,部分的顺序可能是混乱的,它们可能是重复的,等等。
我用 Java为德语维基词典转储编写了一个原始解析器,它只提取名词及其冠词,以及它们的阿拉伯语翻译,没有任何依赖关系。执行需要很长时间,因此请注意。如果有兴趣/需要解析更多或其他数据,请告诉我,我可能会在时间允许的情况下进行研究。