从wikisource XML转储文件提取文本

2024-05-15 06:23:48 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是Marathi Wikisource转储文件的一部分

我正试图提取与“我的书”匹配的标签的内容。 有什么容易做到的吗?Wikisouce是一个流行的数据源,我想一定有脚本/模块

 <page>
    <title>My book 1</title>
    <ns>0</ns>
    <id>413</id>
    <revision>
      <id>39062</id>
      <parentid>1660</parentid>
      <timestamp>2019-01-21T10:43:05Z</timestamp>
      <contributor>
        <username>Taiven2240</username>
        <id>1373</id>
      </contributor>
      <minor />
      <comment>मराठीकरण</comment>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text bytes="215367" xml:space="preserve">{{some Info
}}
&lt;poem&gt;
[[वर्ग:अध्यात्मिक]]
[[वर्ग:तपासणी करायचे साहित्य‎]]</text>
      <sha1>kkx0i4d2tm0zehb5wumrgs60lhric2v</sha1>
    </revision>
  </page>

什么是bytes=“215367”

我从以下网站下载了此文件:

https://dumps.wikimedia.org/mrwikisource/20210601/mrwikisource-20210601-pages-meta-current.xml.bz2


Tags: 文件textidformatmodelbytestitlepage
1条回答
网友
1楼 · 发布于 2024-05-15 06:23:48

一种简单但效率不高的方法是在bash命令行上使用xmllint,因为它是一个未压缩的300MB文件。易于在Windows和Cygwin上安装,默认情况下在Linux(和MacOs)上存在:-p。 一个简单的脚本,用于在单个过程中搜索title标记上的两个不同字符串,并显示text标记内容

#!/bin/bash

title1=":Ansumang"
title2=":Marathi"

time xmllint  shell mrwikisource-20210601-pages-meta-current.xml <<EOF
setns x=http://www.mediawiki.org/xml/export-0.10/
cat //x:page[x:title[contains(text(),"$title1")] | x:title[contains(text(),"$title2")]]/x:title/text()
EOF

结果:

/ > setns x=http://www.mediawiki.org/xml/export-0.10/
/ > cat //x:page[x:title[contains(text(),":Ansumang")] | x:title[contains(text(),":Marathi")]]/x:title/text()
    -
सदस्य:Ansumang
    -
वर्ग:Marathi
    -
सदस्य चर्चा:Marathipremi101
    -
चित्र:MarathiTypingCert-1.png
    -
विकिस्रोत:Marathi Typing Test
    -
विकिस्रोत:Marathi Font Typing Test
    -
विकिस्रोत:Marathi font typing test
    -
विकिस्रोत:Marathi typing speed test
    -
सदस्य चर्चा:MarathiBot
/ >
real    0m3.223s
user    0m2.904s
sys     0m0.312s

要获取revision/text标记,请使用:

cat //x:page[x:title[contains(text(),"$title1")] | x:title[contains(text(),"$title2")]]/x:revision/x:text/text()

一行是

(t1=':Ansumang'; t2=':Marathi' ; echo 'setns x=http://www.mediawiki.org/xml/export-0.10/'; echo "cat //x:page[x:title[contains(text(),'$t1')] | x:title[contains(text(),'$t2')]]/x:title/text()") | xmllint  shell mrwikisource-20210601-pages-meta-current.xml ; echo

一行程序获得titlerevision/text

(t1=':Ansumang'; t2=':Marathi' ; echo 'setns x=http://www.mediawiki.org/xml/export-0.10/'; echo "cat //x:page[x:title[contains(text(),'$t1')] | x:title[contains(text(),'$t2')]]/descendant::*[self::x:title or self::x:text]/text()") | xmllint  shell mrwikisource-20210601-pages-meta-current.xml ; echo

相关问题 更多 >

    热门问题