如何将TextGrid文件的变量读入Python?

时间:2017-01-17 16:26:17

标签: python text

COSINE语言语料库的转录如下:

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格式。如何为每个区间提取变量xminxmaxtext

编辑:

可以将文件类型视为普通文本文件并逐行读取。这是我解决问题的方法。知道是否有一种从这些类型的文件中提取信息的特殊方法仍然很有趣。感谢您的回复。

2 个答案:

答案 0 :(得分:1)

在查看this是否对您有所帮助之前,我还没有使用过textGrid文件。如果它不是很容易编写你自己的功能来点这个。查看textGrid文件和​​它所附带的示例文件here,这些文件有一个设置格式。

•第1行和第2行 - &gt;档案信息

•第3行 - &gt;空白,分隔符

•第4 - 7行 - &gt;其他一些信息

第7行也表示文件中的大小或项目数。

我们可以将这些数据重建为变量,如下所示:

enter image description here

有关组合词典和列表的更多信息,请参阅this

我建议你做以下事情:

阅读文件line by line。根据需要对前7行中的信息进行操作。在第8行创建项目数组,然后您可以检查&#39;项目[x],类,名称,xmin,xmax,间隔:大小,间隔&#39;的存在。并将它们分配到列表/字典的相关位置。如果您不太熟悉,请参阅此link它很好地描述了数据结构。

然后您可以将值检索为

list[itemNumber]['class ']

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

等......

希望这会有所帮助。如果您需要任何进一步的帮助,请随时发表评论。

答案 1 :(得分: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'  

是的,使用write()函数将txtext保存到txt文件中,你很好。