使用 readtext 从 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 表达式,这并没有返回任何错误,但实际上并没有提取任何文本(即使“regtext”节点中应该有大量文本:

> 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...