使用 readtext 从 XML 中提取文本

Using readtext to extract text from XML

我不习惯使用 XML 文件,但需要从 XML 文件中的各个字段中提取文本。具体来说,我已经下载并保存了 XML 个文件,如下所示:https://www.federalregister.gov/documents/full_text/xml/2007/09/18/07-4595.xml。我对这个和其他类似 XML 文件中标签“regtext”中的文本感兴趣。

我已经下载了 XML 文件并将它们存储在我的计算机上,但是当我设置目录并尝试使用 readtext 包从 XML 文件中读取时,我得到了以下错误:

regtext <- readtext("/regdata/RegDataValidation", text_field = "regtext")
Error in doc_parse_file(con, encoding = encoding, as_html = as_html, options = options) : 
  Start tag expected, '<' not found [4]

我试图搜索错误,但我遇到的任何事情都无法帮助我弄清楚可能发生了什么。这个基本命令对任何数量的其他文档类型(包括 .csv 或 .docx)都非常有用,但出于某种原因,它似乎无法识别我在这里尝试使用的文件。任何指点将不胜感激——我太新手了,所有关于 readtext 的文档都没有给出如何使用 XML.

的示例

根据下面的评论,我还尝试指定一个已保存的 XML 文件,如下所示:

> regtext <- readtext("/regdata/RegDataValidation/0579- AC01.xml", text_field = "regtext")
Error in xml2_to_dataframe(xml) : 
  The xml format does not fit for the extraction without xPath
  Use xPath method instead
In addition: There were 50 or more warnings (use warnings() to see the first 50)

我试图在单个文件上指定一个 xPath 表达式,这没有 return 任何错误,但实际上并没有提取任何文本(即使“正则文本”中应该有很多文本“节点:

> regtext <- readtext("/regdata/RegDataValidation/0579- AC01.xml", text_field = "/regtext/*")

我最终得到了一个包含正确 doc_id 但没有文本的数据框。

从错误消息来看,readtext 函数似乎正在将 xml 文件转换为纯文本文档,而 XML 包不接受它作为有效文档。

XML 解析器也可能会区分“regtext”和“REGTEXT”。

这是一个使用 xml2 包的解决方案。 (我发现这个包提供了一个更简单的界面并且更容易使用)

library(xml2)

url <- "https://www.federalregister.gov/documents/full_text/xml/2007/09/18/07-4595.xml"
page <- read_xml(url)

#parse out the nodes within the "REGTEXT" sections
regtext <- xml_find_all(page, ".//REGTEXT")

#convert the regtext nodes into vector of strings
xml_text(regtext)