2017-01-17 3 views
0

Die Transkriptionen des Kosinus Sprachkorpus wie folgt aussehen:Wie lese ich die Variablen der TextGrid-Datei in Python?

File type = "ooTextFile" 
Object class = "TextGrid" 

xmin = 0 
xmax = 3931.56874994773 
tiers? <exists> 
size = 8 
item []: 
    item [1]: 
     class = "IntervalTier" 
     name = "Phrases" 
     xmin = 0 
     xmax = 3931.56874994773 
     intervals: size = 1938 
     intervals [1]: 
      xmin = 0 
      xmax = 3.59246613841739 
      text = "Good morning" 
     intervals [2]: 
      xmin = 3.59246613841739 
      xmax = 3.77632771424237 
      text = "the dog likes me" 
     intervals [3]: 
      xmin = 3.77632771424237 
      xmax = 8.15464058223137 
      text = "fish swim" 
     intervals [4]: 
      xmin = 8.15464058223137 
      xmax = 8.53678424963039 
      text = "Sure." 
     intervals [5]: 
      xmin = 8.53678424963039 
      xmax = 9.54622035219737 
      text = "Just keep swimming" 

Die Dateien in .TextGrid-Format sind. Wie könnte man die Variablen xmin, xmax und text für jedes der Intervalle extrahieren?

EDIT:

Der Dateityp kann als normale Textdatei und lesen Sie Zeile für Zeile behandelt werden. Welches war meine Lösung für das Problem. Es wäre dennoch interessant zu wissen, ob es eine spezielle Möglichkeit gibt, Informationen aus diesen Dateitypen zu extrahieren. Danke für die Antworten.

+0

Was haben Sie versucht? – MYGz

+0

Hinweis: http://stackoverflow.com/questions/2081836/reading-specific-lines-only-python Oder Sie können Regex verwenden. Probieren Sie es aus und aktualisieren Sie die Frage mit Ihrem Versuch. – MYGz

Antwort

1

Ich habe nicht mit TextGrid-Dateien gearbeitet, bevor Sie sehen, ob this Ihnen hilft. Wenn es nicht sehr einfach ist, eine eigene Funktion zu schreiben, um dies zu tun. Blick auf TextGrid-Datei und die Beispieldatei here es scheint, gibt es ein festgelegtes Format für diese Dateien.

• Linie 1 und 2 -> Datei Informationen

• Linie 3 -> blank, ein Separator

• Linie 4 - 7 -> einige andere Informationen

auch Zeile zeigt 7 die Größe oder die Anzahl der Elemente in Ihrer Datei.

Wir können diese Daten in eine Variable wie folgt rekonstruieren:

enter image description here

Siehe this für mehr über Wörterbücher und Listen kombiniert.

Ich schlage vor, Sie folgendes zu tun:

die line by line Datei lesen. Tun Sie wie gewünscht zu den Informationen in den ersten 7 Zeilen. In der 8. Zeile erstellen Sie das Elementarray, dann können Sie das Vorhandensein von 'item [x], class, name, xmin, xmax, Intervalle: size, intervals' überprüfen und sie der entsprechenden Stelle der Liste/dict zuweisen. Sehen Sie link es beschreibt gut über Datenstrukturen, wenn Sie nicht sehr vertraut sind.

dann können Sie die Werte als

list[itemNumber]['class '] 

oder

list[itemNumber]['intervals'][intervalNumber-1]['xmin'] #index starts from 0 

so weiter abrufen ...

Hoffnung, das hilft. Bitte zögern Sie nicht zu kommentieren, wenn Sie weitere Hilfe benötigen.

+0

Hallo danke für die Antwort. Ich ging voran und speicherte es als eine normale Textdatei, löschte manuell Teile, die ich nicht benötige, und es funktionierte durch die Verwendung einer Reihe von for-Schleifen :) – ishido

+0

Großartig. Wenn das nur ein einmaliger Job ist, der schneller ist. –

0

Sie können ein Python-Skript dazu schreiben. Was ich tat, war

with open('file.Textgrid','r') as f: 
    data = f.read() 
#print data #Use this to view how the code would look like after the program has opened the files 
txttext = '' 
for lines in data[9:]: #informations needed begin on the 9th lines 
    line = re.sub('\n','',line) #as there's \n at the end of every sentence. 
    line = re.sub ('^ *','',line) #To remove any special characters 
    linepair = line.split('=') 
    if len(linepair) == 2: 
    if linepair[0] == 'xmin': 
     xmin == linepair[1] 
    if linepair[0] == 'xmax': 
     xmax == linepair[1] 
    if linepair[0] == 'text': 
     if linepair[1].strip().startswith('"') and linepair[1].strip().endswith('"'): 
     text = linepair[1].strip()[1:-1] 
     txttext += text + '\n' 

Und ja, speichern Sie den Txtext in eine TXT-Datei mit der Funktion write() und du bist gut.

Verwandte Themen