以下是马拉地语维基源转储文件的一部分。
我正在尝试提取匹配标记为“我的书”的标签的内容。 有什么容易实现的吗? 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
}}
<poem>
[[वर्ग:अध्यात्मिक]]
[[वर्ग:तपासणी करायचे साहित्य]]</text>
<sha1>kkx0i4d2tm0zehb5wumrgs60lhric2v</sha1>
</revision>
</page>
什么是 bytes="215367"?
我从以下位置下载此文件:
https://dumps.wikimedia.org/mrwikisource/20210601/mrwikisource-20210601-pages-meta-current.xml.bz2
答案 0 :(得分:1)
一个简单但效率不高的方法是在 bash 命令行上使用 xmllint
,因为它是一个 300MB 的未压缩文件。易于使用 Cygwin 在 Windows 上安装,默认情况下存在于 Linux(和 MacOs 我猜:-p)。
一个简单的脚本,用于一次性搜索 title
标签上的 2 个不同字符串并显示 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
单线获得title
和revision/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