R中的类之间的区别:字符,xml_nodeset,xml_node

时间:2019-05-06 20:18:00

标签: r xml

我正在尝试从大量的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中拉出的问题。不知道该怎么办。

0 个答案:

没有答案