R Divisão / subconjunto dinâmico do quadro de dados pelos números de rown selecionados - Análise da grade de texto

Estou tentando processar um "arquivo de segmentação" chamado.TextGrid (gerado pelo programa Praat). )

O formato original é assim:

File type = "ooTextFile"
Object class = "TextGrid"
xmin = 0 
xmax = 243.761375 
tiers? <exists> 
size = 17 
item []: 
    item [1]:
        class = "IntervalTier" 
        name = "phones" 
        xmin = 0 
        xmax = 243.761 
        intervals: size = 2505 
        intervals [1]:
            xmin = 0 
            xmax = 0.4274939687384032 
            text = "_" 
        intervals [2]:
            xmin = 0.4274939687384032 
            xmax = 0.472 
            text = "v" 
        intervals [3]:
[...]

(Isso é repetido para EOF, com intervalos [3 a n] para n Item (camada de anotação) em um arquivo.

Alguémpropôs uma solução usandoPacote rPython R.

Infelizmente:

Eu não tenho um bom conhecimento de PythonA versão do rPython não está disponível para R.3.0.2 (que estou usando).Meu objetivo é desenvolver esse analisador para minha análise exclusivamente em ambiente R.

No momento, meu objetivo é segmentar esse arquivo em vários quadros de dados. Cada quadro de dados deve conter um item (camada de anotação).

# Load the Data
txtgrid <- read.delim("./xxx_01_xx.textgrid", sep=c("=","\n"), dec=".", header=FALSE)
# Erase White spaces (use stringr package)
txtgrid[,1] <- str_trim(txtgrid[,1])
# Convert row.names to numeric 
num.row<- as.numeric(row.names(txtgrid))
# Redefine the original textgrid and add those rows (I want to "keep them in case for later process)
txtgrid <- data.frame(num.row,txtgrid)
colnames(txtgrid) <- c("num.row","object", "value")
head(txtgrid)

A saída dehead(txtgrid) é muito bruto, então aqui estão as primeiras 20 linhas da grade de textotxtgrid[1:20,]:

   num.row          object                value
1        1       File type           ooTextFile
2        2    Object class             TextGrid
3        3            xmin                   0 
4        4            xmax          243.761375 
5        5 tiers? <exists>                     
6        6            size                  17 
7        7        item []:                     
8        8       item [1]:                     
9        9           class        IntervalTier 
10      10            name              phones 
11      11            xmin                   0 
12      12            xmax             243.761 
13      13 intervals: size                2505 
14      14  intervals [1]:                     
15      15            xmin                   0 
16      16            xmax  0.4274939687384032 
17      17            text                   _ 
18      18  intervals [2]:                     
19      19            xmin  0.4274939687384032 
20      20            xmax               0.472 

Agora que eu o pré-processei, posso:

# Find the number of the rows where I want to split (i.e. Item)
tier.begining <- txtgrid[grep("item", txtgrid$object, perl=TRUE), ]
# And save those numbers in a variable
x <- as.numeric(row.names(tier.begining))

Essa variávelx fornece os números-1 onde meus dados devem ser divididos em vários quadros de dados.

Eu tenho 18 itens -1 (o primeiro item é o item [] e inclui todos os outros itens. Portanto, vectorx é :

     x
    [1]     7     8 10034 14624 19214 22444 25674 28904 31910 35140 38146 38156 38566 39040 39778 40222 44800
[18] 45018

Como posso saber para R : para segmentar esse quadro de dados em vários quadros de dadostextgrids$nameoftheItem de modo a obter o maior número de quadros de dados possível dos itens ?, por exemplo:

textgrid$phones
         item [1]:
            class = "IntervalTier" 
            name = "phones" 
            xmin = 0 
            xmax = 243.761 
            intervals: size = 2505 
            intervals [1]:
            xmin = 0 
            xmax = 0.4274939687384032 
            text = "_" 
            intervals [2]:
            xmin = 0.4274939687384032 
            xmax = 0.472 
            text = "v" 
            [...]
            intervals [n]:
textgrid$syllable
    item [2]:
            class = "IntervalTier" 
            name = "syllable" 
            xmin = 0 
            xmax = 243.761 
            intervals: size = 1200
            intervals [1]:
            xmin = 0 
            xmax = 0.500
            text = "ve" 
            intervals [2]:
            [...]
            intervals [n]:
    textgrid$item[n]

Eu queria usar

txtgrid.new <- split(txtgrid, f=x)

Mas esta mensagem está certa:

Warning message: In split.default(x = seq_len(nrow(x)), f = f, drop = drop, ...) : data length is not a multiple of split variable

Eu não recebo o resultado desejado, parece que os números das linhas não se seguem e que o arquivo está todo misturado.

Eu também tentei algunswhich, daply (porplyr) &subset funções, mas nunca as fez funcionar corretamente!

Congratulo-me com qualquer ideia de estruturar esses dados de maneira adequada e eficiente. Idealmente, eu deveria ser capaz de vincular itens (camadas de anotação) entre eles (xmin e xmax de diferentes camadas), bem como vários arquivos de grade de texto, este é apenas o começo.

questionAnswers(2)

yourAnswerToTheQuestion