Я хотел бы получить слова в парах и другие теги в парах из XML.Каждая запись xml содержит теги для пары слов, и я хотел бы получить их в виде пары в конце цикла и сохранить их в tabeladomenowa, но sth неверен с циклом.Результат цикла tabelatekstowa в порядке, он содержит все теги из всех данных xml
orth base ctag ukb.X1 ukb.X2 ukb.X3 ukb.X4 ukb.X5
1 co co comp <NA> <NA> <NA> <NA> <NA>
2 jest być fin:sg:ter:imperf być.9 40:cst <NA> <NA>
, но tabeladomenowa должен выглядеть следующим образом:
co jest comp fin:sg:ter:imperf <NA> być.9
to mo conj subst:sg:nom:f <NA> molibden.1
Данные XML для цикла ниже:
[[1]] [1] "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n
<!DOCTYPE chunkList SYSTEM \"ccl.dtd\">\n
<chunkList>\n
<chunk id=\ "ch1\" type=\ "p\">\n
<sentence id=\ "s1\">\n
<tok>\n
<orth>co</orth>\n
<lex disamb=\ "1\">
<base>co</base>
<ctag>comp</ctag>
</lex>\n </tok>\n
<tok>\n
<orth>jest</orth>\n
<lex disamb=\ "1\">
<base>być</base>
<ctag>fin:sg:ter:imperf</ctag>
</lex>\n
<prop key=\ "polarity\">0</prop>\n
<prop key=\ "sense:ukb:syns_id\">250920</prop>\n
<prop key=\ "sense:ukb:syns_rank\">250920/2923.1281788674 50321/2713.8513986922 250912/2338.6212907775 55138/2113.4485195055 299/1982.0080773263 250925/1857.8172639385 57004/1844.2295105295 250545/1719.7556893073 250899/1689.1818347671 250918/1687.5592215575</prop>\n
<prop key=\
"sense:ukb:unitsstr\">być.9(40:cst)</prop>\n </tok>\n </sentence>\n </chunk>\n</chunkList>\n"
[[2]] [1] "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n
<!DOCTYPE chunkList SYSTEM \"ccl.dtd\">\n
<chunkList>\n
<chunk id=\ "ch1\" type=\ "p\">\n
<sentence id=\ "s1\">\n
<tok>\n
<orth>to</orth>\n
<lex disamb=\ "1\">
<base>to</base>
<ctag>conj</ctag>
</lex>\n </tok>\n
<tok>\n
<orth>mo</orth>\n
<lex disamb=\ "1\">
<base>MO</base>
<ctag>subst:sg:nom:f</ctag>
</lex>\n
<prop key=\ "polarity\">0</prop>\n
<prop key=\ "sense:ukb:syns_id\">32404</prop>\n
<prop key=\ "sense:ukb:syns_rank\">32404/19991.5487685294</prop>\n
<prop key=\ "sense:ukb:unitsstr\">molibden.1(24:sbst) Mo.1(24:sbst)</prop>\n </tok>\n
<ns/>\n
<tok>\n
<orth>?</orth>\n
<lex disamb=\ "1\">
<base>?</base>
<ctag>interp</ctag>
</lex>\n </tok>\n
<ns/>\n
<tok>\n
<orth>e</orth>\n
<lex disamb=\ "1\">
<base>e</base>
<ctag>interj</ctag>
</lex>\n </tok>\n </sentence>\n </chunk>\n</chunkList>\n"
Цикл основан на ответе на предыдущий вопрос ..
for(tekstxml in tabelka$lemma) {
toks<-xml_find_all(read_xml(tekstxml), ".//tok")
orth<-sapply(toks, function(x){xml_text(xml_find_first(x, ".//orth"))})
base<-sapply(toks, function(x){xml_text(xml_find_first(x, ".//base"))})
ctag<-sapply(toks, function(x){xml_text(xml_find_first(x, ".//ctag"))})
ukb<-sapply(toks, function(x) {
nodes<-xml_find_all(x, ".//prop")
#find node with wanted key
domeny<-nodes[xml_attr(nodes, "key" )=="sense:ukb:unitsstr"]
#extract text
domeny<-xml_text(domeny)
#return NA if node is empty.
ifelse(is.character(domeny), domeny, NA)
})
ukb <- data.frame(do.call('rbind.na', stringr::str_split(as.character(ukb),"[ ()]")))
tabelatekstowa <- rbind(tabelatekstowa, data.frame(orth,base,ctag,ukb))
wyr <- NULL
met <- NULL
wyrorth <- paste(orth[1],orth[2],sep = " ")
lematy <- paste(base[1],base[2],sep = " ")
metafora <- paste(ukb[2],ukb[1], sep = " TO ")
konstrukcja <- paste(ctag[1],ctag[2],sep = " ")
tabeladomenowa <- rbind(tabeladomenowa, data.frame(wyrorth,lematy, konstrukcja,metafora))
}