2017-01-17 3 views
0

Транскрипции языка КОСИНУС корпуса выглядят следующим образом:Как читать переменные файла TextGrid в 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" 

Файлы в формате .TextGrid. Как можно продолжить извлечение переменных xmin, xmax и text для каждого из интервалов?

EDIT:

Тип файла можно рассматривать как обычный текстовый файл и читать построчно. Каково было мое решение проблемы. Было бы интересно узнать, есть ли специальный способ извлечения информации из этих типов файлов. Спасибо за ответы.

+0

Что вы попробовали? – MYGz

+0

Подсказка: http://stackoverflow.com/questions/2081836/reading-specific-lines-only-python Или вы можете использовать регулярное выражение. Попробуйте и обновите вопрос своей попыткой. – MYGz

ответ

1

Я не работал с файлами textGrid, прежде чем посмотреть, поможет ли вам this. Если вам не очень легко написать свою собственную функцию, чтобы расставить это. глядя на файл textGrid и файл с образцом here, он добавляет формат для этих файлов.

• линии 1 и 2 -> информация о файле

• строка 3 -> пустым, сепаратор

• линии 4 - 7 -> некоторая другая информация

также линия 7 указывает размер , или количество элементов в вашем файле.

Мы можем восстановить эти данные в переменную, как:

enter image description here

См this больше об объединении словарей и списков.

Я предлагаю вам сделать следующее:

Прочитайте файл line by line. Делайте по желанию информацию в первых 7 строках. На 8-й строке создайте массив элементов, затем вы можете проверить наличие «item [x], class, name, xmin, xmax, interval: size, interval» и назначить их соответствующему месту списка/dict. См. Это link, он хорошо описывает структуры данных, если вы мало знакомы.

, то вы можете получить значение в

list[itemNumber]['class '] 

или

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

так далее ...

Надеется, что это помогает. Пожалуйста, не стесняйтесь комментировать, если вам нужна дополнительная помощь.

+0

Привет, спасибо за ответ. Я пошел вперед и сохранил его как обычный текстовый файл, вручную удалив части, которые мне не нужны, и это получилось благодаря использованию пучка для циклов :) – ishido

+0

Отлично. Если это всего лишь однократная работа, это быстрее. –

0

вы можете написать скрипт python для этого. То, что я сделал

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' 

И да, сохранить txtext в текстовый файл с помощью записи функции() и вы хорошо.