使用R中的库(rvest)和库(xml)选择专利数据的xml_nodes

时间:2015-02-23 13:53:01

标签: xml r rvest magrittr

鉴于EPO的专利服务器REPO的以下(准)xml结构:

<ep-patent-document id="EP79301547B1" file="EP79301547NWB1.xml" lang="en" country="EP" doc-number="0007815" kind="B1" date-publ="19871021" status="n" dtd-version="ep-patent-document-v1-1">
<SDOBI lang="en">
<B000>...</B000>
<B100>...</B100>
<B200>
<B210>79301547.0</B210>
<B220>
<date>19790801</date>
</B220>
<B240/>
<B250>en</B250>
<B251EP>en</B251EP>
<B260>en</B260>
</B200>
<B300>...</B300>
<B400>...</B400>
<B500>...</B500>
<B700>...</B700>
<B800>...</B800>
</SDOBI>
<!--  EPO <DP n="1">  -->
<!--  EPO <DP n="2">  -->
<description id="desc" lang="en">...</description>
<claims id="claims01" lang="en">...</claims>
<claims id="claims02" lang="de">...</claims>
<claims id="claims03" lang="fr">...</claims>
</ep-patent-document>

我想选择节点“B210”中的数字和“描述”中的文本。

使用

library(httr)
library(rvest)
library(XML)
library(magrittr)

files1993 <- list.files("~/Downloads", full.names=TRUE, recursive=TRUE)
y <- files1993[1]
parse1993 <- htmlParse(y) 

parse1993 %>% xml_nodes("description")
parse1993 %>% xml_nodes("SDOBI") %>% xml_nodes("B210")

我确实得到了描述文字但没有B210的内容。实际上,该命令对于给出的任何信息都不起作用。我是否必须将SDOBI中提供的信息转换为文本?我在这里有点失落。任何帮助高度赞赏。

1 个答案:

答案 0 :(得分:0)

我很抱歉这个回复有点迟了但是想要回应以防其他人需要有关同一主题的帮助。

首先,使用EPO api是一个巨大的痛苦。有xml是一个熊,数据可能非常脏和不一致。

PatentData.io似乎是一个更好的选择。他们拥有EPO数据集,通过现代RESTful JSON api进行清理和传输。 rjson更容易使用。如果您希望获得它们,它们还提供一些很酷的高级搜索和分析功能。

他们现在仍处于测试阶段,但我认为他们正在积极吸引新的测试用户。看看这个。