我正在尝试从大量的TEI-XML文本文档中提取各种信息。我想制作一个数据框架,列出各种文件中各个节点的分类,字数和内容。我似乎无法弄清楚必须使用xml_nodeset,xml_node,字符等的不同方式。
这是示例文档:
<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<!-- irrelevant information -->
</fileDesc>
</teiHeader>
<text>
<body>
<p>V 8. — Août 1898.</p>
<div type="section">
<p>(Numéro supplémentaire.)</p><p>BULLETIN</p><p>DE LA SOCIÉTÉ</p><p>DI LÉGISLATION COMPARÉE</p>
</div>
<div type="section" feature="chronique">
<head>CHRONIQUE LÉGISLATIVE.</head><p>REICHSRATH AUTRICHIEN.
</p>
<p>Les lois relatives au renouvellement du compromis austro-hongrois de 1867, ont
été soumises par le gouvernement à la Chambre des députés du REICHSRATH, dans la
première moitié de 1877. Les nombreuses difficultés suscitées par la discussion
de ces lois, le défaut d'entente entre les Parlements des deux parties de la
MONARCHIE, en ont pendant de longs mois retardé l'adoption. Des lois
successives, dont la dernière est celle du 22 mai 1878, avaient dû, par suite,
décider que, jusqu'au 30 juin 1878, les lois de 1867 resteraient provisoirement
en vigueur. Une entente complète a pu enfin s'établir dans les derniers jours du
mois de juin. Le3 lois renouvelant le compromis de 1867 ont été adoptées par les
Parlements autrichien et hongrois et ont reçu la sanction impériale et royale en
Autriche et en Hongrie. Ces importantes lois portent toutes la date du 27 juin
1878 et ont paru dans les numéros XXIII à xxvil du Bulletin des lois. Elles sont
au nombre de huit.</p>
</div>
<div type="section" feature="comptes">
<head>COMPTES RENDUS D'OUVRAGES.</head>
</div>
<div type="subsection">
<head>SECTION DE LA LANGUE ANGLAISE.</head><p>The law magazine and review. Londres (Stevens and Haynes). Année 1877; quatre
livraisons. — Cette revue, qui êst, croyons-nous, la plus répandue de toutes
celles qui se publient en langue anglaise, a donné en 1877 un certain nombre
d'articles intéressants dont les titres au moins doivent être signalés.</p>
</div>
</body>
</text>
</TEI>
此小标题包含我需要的一些内容
# A tibble: 4 x 4
type feature length words
<chr> <chr> <int> <chr>
1 section NA 7 (Numéro supplémentaire.)BULLETINDE LA SOCIÉTÉDI LÉGISLATION COMPARÉE
2 section chroniq… 167 CHRONIQUE LÉGISLATIVE.REICHSRATH AUTRICHIEN. Les lois relatives au …
3 section comptes 3 COMPTES RENDUS D’OUVRAGES.
4 subsecti… NA 52 SECTION DE LA LANGUE ANGLAISE.The law magazine and review. Londres …
我用以下代码制作了它:
library(xml2)
library(tidyverse)
library(tokenizers)
# read the document
sample <- read_xml("sample.xml")
# find the div types
type <-
xml_child(sample, 2) %>%
xml_find_all(".//d1:div") %>%
xml_attr('type')
type
# find the div features
feature <-
xml_child(sample, 2) %>%
xml_find_all(".//d1:div") %>%
xml_attr('feature')
feature
# extract the contents as text
words <-
xml_child(sample, 2) %>%
xml_find_all(".//d1:div") %>%
xml_text() %>%
gsub("\\s+", " ", .)
words
# bind in a tibble
sample_tibble <- tibble(type, feature, length = sapply(tokenize_words(words), length), words)
但是,我想在此小节中添加/改进其他两件事,但我不知道怎么做。
1)读取xml文本时出现问题
“单词”列包含XML标签所在的一堆串联。我想在这个位置插入一个空格。例如,BULLETINDE LA SOCIÉTÉDI
应该是BULLETIN DE LA SOCIÉTÉ DI
。
我正在尝试使用xml_text() %>% paste(collapse = " ") %>% gsub("\\s+", " ", .)
之类的东西,从helpful answer到我以前的问题之一,但我无法使其正常工作。
2)列长度不一致的问题
当我尝试以与其他信息类似的方式提取标题(<head>
)时,只有3个。要进行小贴士,我想我需要一个NA
缺少一个div
的{{1}}。
head
当在每个节点中都找不到其他元素时,我会遇到将其他元素从xml中拉出的问题。不知道该怎么办。