使用R解析wikipedia转储时出错
出于研究目的,我想解析一些来自法语维基百科的转储。下面是我要解析的XML文件的摘录:使用R解析wikipedia转储时出错,r,mediawiki,wikipedia,xml2,R,Mediawiki,Wikipedia,Xml2,出于研究目的,我想解析一些来自法语维基百科的转储。下面是我要解析的XML文件的摘录: <mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/x
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="fr">
<siteinfo>
<sitename>Wikipédia</sitename>
<dbname>frwiki</dbname>
<base>https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal</base>
<generator>MediaWiki 1.27.0-wmf.15</generator>
<case>first-letter</case>
<namespaces>
<namespace key="-2" case="first-letter">Média</namespace>
<namespace key="-1" case="first-letter">Spécial</namespace>
<namespace key="0" case="first-letter" />
<namespace key="1" case="first-letter">Discussion</namespace>
<namespace key="2" case="first-letter">Utilisateur</namespace>
<namespace key="3" case="first-letter">Discussion utilisateur</namespace>
<namespace key="4" case="first-letter">Wikipédia</namespace>
<namespace key="5" case="first-letter">Discussion Wikipédia</namespace>
<namespace key="6" case="first-letter">Fichier</namespace>
<namespace key="7" case="first-letter">Discussion fichier</namespace>
<namespace key="8" case="first-letter">MediaWiki</namespace>
<namespace key="9" case="first-letter">Discussion MediaWiki</namespace>
<namespace key="10" case="first-letter">Modèle</namespace>
<namespace key="11" case="first-letter">Discussion modèle</namespace>
<namespace key="12" case="first-letter">Aide</namespace>
<namespace key="13" case="first-letter">Discussion aide</namespace>
<namespace key="14" case="first-letter">Catégorie</namespace>
<namespace key="15" case="first-letter">Discussion catégorie</namespace>
<namespace key="100" case="first-letter">Portail</namespace>
<namespace key="101" case="first-letter">Discussion Portail</namespace>
<namespace key="102" case="first-letter">Projet</namespace>
<namespace key="103" case="first-letter">Discussion Projet</namespace>
<namespace key="104" case="first-letter">Référence</namespace>
<namespace key="105" case="first-letter">Discussion Référence</namespace>
<namespace key="828" case="first-letter">Module</namespace>
<namespace key="829" case="first-letter">Discussion module</namespace>
<namespace key="2300" case="first-letter">Gadget</namespace>
<namespace key="2301" case="first-letter">Gadget talk</namespace>
<namespace key="2302" case="case-sensitive">Gadget definition</namespace>
<namespace key="2303" case="case-sensitive">Gadget definition talk</namespace>
<namespace key="2600" case="first-letter">Sujet</namespace>
</namespaces>
</siteinfo>
<page>
<title>Antoine Meillet</title>
<ns>0</ns>
<id>3</id>
<revision>
<id>123903866</id>
<parentid>123513568</parentid>
<timestamp>2016-03-02T15:50:55Z</timestamp>
<contributor>
<username>RobokoBot</username>
<id>2090299</id>
</contributor>
<minor/>
<comment>Ajout d'une puce avant {{Autorité}} suite à la modification du modèle</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="123933672" bytes="9683" />
<sha1>f9e9rj6s5eistpyimc4xqrtauni5uc3</sha1>
</revision>
</page>
<page>
<title>Algèbre linéaire</title>
<ns>0</ns>
<id>7</id>
<revision>
<id>123705494</id>
<parentid>121738150</parentid>
<timestamp>2016-02-25T16:21:28Z</timestamp>
<contributor>
<username>Anareth</username>
<id>2426186</id>
</contributor>
<minor/>
<comment>/* Histoire */ grammaire</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="123731807" bytes="17107" />
<sha1>iewjt56i5p1bhxup95b9bp08r5u0t9u</sha1>
</revision>
</page>
我也尝试过使用xml2包,得到了相同的结果
你能找到解决办法吗
提前感谢。免责声明:XML不是我的工作领域,下面的代码可能不是推荐的方法。但至少它起作用了 在xml文件的开头和结尾添加一个新标记,例如
。例如,文件的开头变成:
<wikidump>
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="fr" />
<siteinfo>
<sitename>Wikipédia</sitename>
....
维基百科
....
最后看起来像
<sha1>9smdmhiguf5lxyrfqxq2j6m66tq65y9</sha1>
</revision>
</page>
</wikidump>
9smdmhiguf5lxyrfqxq2j6m66tq65y9
然后,此代码可以毫无问题地读取xml对象:
library(XML)
wikidata <- xmlParse("test.xml")
库(XML)
wikidata免责声明:XML不是我的工作领域,下面的代码可能不是推荐的方法。但至少它起作用了
在xml文件的开头和结尾添加一个新标记,例如
。例如,文件的开头变成:
<wikidump>
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="fr" />
<siteinfo>
<sitename>Wikipédia</sitename>
....
维基百科
....
最后看起来像
<sha1>9smdmhiguf5lxyrfqxq2j6m66tq65y9</sha1>
</revision>
</page>
</wikidump>
9smdmhiguf5lxyrfqxq2j6m66tq65y9
然后,此代码可以毫无问题地读取xml对象:
library(XML)
wikidata <- xmlParse("test.xml")
库(XML)
wikidata像这样使用htmlTreeParse
。(为了再现性,我们在结尾的注释中使用了行
。)
库(XML)
doc像这样使用htmlTreeParse
。(为了再现性,我们在结尾的注释中使用了行
。)
库(XML)
doc查看此“XML只能有一个“文档实体”或“根”“您在XML中有一个siteinfo
和三个page
,但没有一个更高的根。请查看包装Wikipedia API的WikipediR
包;如果您想使用rvest
或任何您最喜欢的抓取/解析包进行解析,它可以为您清理一些结果,或者为您提供HTML。请参阅此“XML只能有一个“文档实体”或“根”您的xml中有一个siteinfo
和三个page
,没有更高的根;如果你想用rvest
或任何你最喜欢的抓取/解析软件包进行解析,它可以帮你清理一下结果,或者给你提供HTML。谢谢,这似乎很管用。我还有一个问题要问:我对页面标题有一个编码问题,使用下面的xpath://page/title进行访问,我在给您的示例中解决了这个问题。你能找到一个方法将正确的编码添加到R中吗?这个问题只显示了一部分页面,但整个页面可能有一个
或类似的标记,将被提取。似乎没有,但我可以将其添加到R中吗?xmlTreeParse中有一个encoding=参数,可能是FALSE,也可能是“UTF-8”之类的编码或者其他一些编码——您必须进行实验以找到正确的编码。这可能会有帮助:谢谢,我用编码参数解决了这个问题。谢谢,这似乎有效。我还有一个问题要问:我对页面标题有一个编码问题,使用下面的xpath://page/title进行访问,我在给您的示例中解决了这个问题。你能找到一个方法将正确的编码添加到R中吗?这个问题只显示了一部分页面,但整个页面可能有一个
或类似的标记,将被提取。似乎没有,但我可以将其添加到R中吗?xmlTreeParse中有一个encoding=参数,可能是FALSE,也可能是“UTF-8”之类的编码或者其他一些编码——您必须进行实验以找到正确的编码。这可能会有帮助:谢谢,我使用编码参数解决了这个问题
library(XML)
doc <- htmlTreeParse(Lines, asText = TRUE, useInternalNodes = TRUE)
# test it by extracting all contributors
xpathSApply(xmlRoot(doc), "//contributor", xmlValue)
## [1] "RobokoBot2090299" "Anareth2426186" "Prospaire2133855"
Lines <- '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="fr" />
<siteinfo>
<sitename>Wikipédia</sitename>
<dbname>frwiki</dbname>
<base>https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal</base>
<generator>MediaWiki 1.27.0-wmf.15</generator>
<case>first-letter</case>
<namespaces>
<namespace key="-2" case="first-letter">Média</namespace>
<namespace key="-1" case="first-letter">Spécial</namespace>
<namespace key="0" case="first-letter" />
<namespace key="1" case="first-letter">Discussion</namespace>
<namespace key="2" case="first-letter">Utilisateur</namespace>
<namespace key="3" case="first-letter">Discussion utilisateur</namespace>
<namespace key="4" case="first-letter">Wikipédia</namespace>
<namespace key="5" case="first-letter">Discussion Wikipédia</namespace>
<namespace key="6" case="first-letter">Fichier</namespace>
<namespace key="7" case="first-letter">Discussion fichier</namespace>
<namespace key="8" case="first-letter">MediaWiki</namespace>
<namespace key="9" case="first-letter">Discussion MediaWiki</namespace>
<namespace key="10" case="first-letter">Modèle</namespace>
<namespace key="11" case="first-letter">Discussion modèle</namespace>
<namespace key="12" case="first-letter">Aide</namespace>
<namespace key="13" case="first-letter">Discussion aide</namespace>
<namespace key="14" case="first-letter">Catégorie</namespace>
<namespace key="15" case="first-letter">Discussion catégorie</namespace>
<namespace key="100" case="first-letter">Portail</namespace>
<namespace key="101" case="first-letter">Discussion Portail</namespace>
<namespace key="102" case="first-letter">Projet</namespace>
<namespace key="103" case="first-letter">Discussion Projet</namespace>
<namespace key="104" case="first-letter">Référence</namespace>
<namespace key="105" case="first-letter">Discussion Référence</namespace>
<namespace key="828" case="first-letter">Module</namespace>
<namespace key="829" case="first-letter">Discussion module</namespace>
<namespace key="2300" case="first-letter">Gadget</namespace>
<namespace key="2301" case="first-letter">Gadget talk</namespace>
<namespace key="2302" case="case-sensitive">Gadget definition</namespace>
<namespace key="2303" case="case-sensitive">Gadget definition talk</namespace>
<namespace key="2600" case="first-letter">Sujet</namespace>
</namespaces>
</siteinfo>
<page>
<title>Antoine Meillet</title>
<ns>0</ns>
<id>3</id>
<revision>
<id>123903866</id>
<parentid>123513568</parentid>
<timestamp>2016-03-02T15:50:55Z</timestamp>
<contributor>
<username>RobokoBot</username>
<id>2090299</id>
</contributor>
<minor/>
<comment>Ajout d\'une puce avant {{Autorité}} suite à la modification du modèle</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="123933672" bytes="9683" />
<sha1>f9e9rj6s5eistpyimc4xqrtauni5uc3</sha1>
</revision>
</page>
<page>
<title>Algèbre linéaire</title>
<ns>0</ns>
<id>7</id>
<revision>
<id>123705494</id>
<parentid>121738150</parentid>
<timestamp>2016-02-25T16:21:28Z</timestamp>
<contributor>
<username>Anareth</username>
<id>2426186</id>
</contributor>
<minor/>
<comment>/* Histoire */ grammaire</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="123731807" bytes="17107" />
<sha1>iewjt56i5p1bhxup95b9bp08r5u0t9u</sha1>
</revision>
</page>
<page>
<title>Algèbre générale</title>
<ns>0</ns>
<id>9</id>
<revision>
<id>116367254</id>
<parentid>109545698</parentid>
<timestamp>2015-06-28T08:36:29Z</timestamp>
<contributor>
<username>Prospaire</username>
<id>2133855</id>
</contributor>
<comment>divers</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="116305869" bytes="1965" />
<sha1>9smdmhiguf5lxyrfqxq2j6m66tq65y9</sha1>
</revision>
</page>'