1

我有一个由Prosodylab-Aligner生成的 textGrid 文件,我可以在Praat. 有没有可能从中得到一个看起来像这样的文本文件:

Word in text | Pronounciation started at
Hello          0:0:0.000
my             0:0:1.125
friends        0:0:2.750

编辑

附加文本网格文件:

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

xmin = 0.0
xmax = 2.53
tiers? <exists>
size = 2
item []:
    item [1]:
        class = "IntervalTier"
        name = "phones"
        xmin = 0.0
        xmax = 2.53
        intervals: size = 13
            intervals [1]:
                xmin = 0.0
                xmax = 0.62
                text = "sil"
            intervals [2]:
                xmin = 0.62
                xmax = 0.78
                text = "K"
            intervals [3]:
                xmin = 0.78
                xmax = 0.81
                text = "L"
            intervals [4]:
                xmin = 0.81
                xmax = 0.92
                text = "IH1"
            intervals [5]:
                xmin = 0.92
                xmax = 1.02
                text = "K"
            intervals [6]:
                xmin = 1.02
                xmax = 1.07
                text = ""
            intervals [7]:
                xmin = 1.07
                xmax = 1.22
                text = "T"
            intervals [8]:
                xmin = 1.22
                xmax = 1.31
                text = "UW1"
            intervals [9]:
                xmin = 1.31
                xmax = 1.51
                text = "S"
            intervals [10]:
                xmin = 1.51
                xmax = 1.67
                text = "T"
            intervals [11]:
                xmin = 1.67
                xmax = 1.85
                text = "AA1"
            intervals [12]:
                xmin = 1.85
                xmax = 1.88
                text = "P"
            intervals [13]:
                xmin = 1.88
                xmax = 2.53
                text = "sil"
    item [2]:
        class = "IntervalTier"
        name = "words"
        xmin = 0.0
        xmax = 2.53
        intervals: size = 6
            intervals [1]:
                xmin = 0.0
                xmax = 0.62
                text = "sil"
            intervals [2]:
                xmin = 0.62
                xmax = 1.02
                text = "CLICK"
            intervals [3]:
                xmin = 1.02
                xmax = 1.07
                text = "sp"
            intervals [4]:
                xmin = 1.07
                xmax = 1.31
                text = "TO"
            intervals [5]:
                xmin = 1.31
                xmax = 1.88
                text = "STOP"
            intervals [6]:
                xmin = 1.88
                xmax = 2.53
                text = "sil"
4

2 回答 2

1

TextGrid 文件的语法有点奇怪。对于您的限制目的,单词列表及其起点,您的解析器可能非常简单:

  1. 查找包含 8 个空格和字符串 'name = "words"' 的文本行

  2. 检查以下所有行并在下一次出现 8 个空格和字符串 'name = "' 时停止

    2a。保存紧跟在 12 个空格和字符串 'xmin = ' 之后的浮点数

    2b。保存紧跟在 12 个空格和字符串 'text = ' 之后的字符串

此过程的结果将是:

0.0 0.62 1.02 1.07 1.31 1.88

“sil” “点击” “sp” “TO” “停止” “sil”

现在只需重新排序这两个数组,您将拥有您的表格(数字是以秒为单位给出的起点)。

请记住,“sil”是元标记“silence”的缩写,“sp”是“speech pause”的缩写。虽然预期在话语的开头和结尾会出现沉默,但语音停顿可能是错误的,因为“TO”这个词的爆破音 /t/ 以发音闭塞开头,这与语音停顿非常相似,但它的一部分爆破音。

于 2014-07-01T19:07:12.313 回答
0

由于这是一个Praat文件,并且您说可以在其中打开它Praat,因此我认为更好的解决方案是使用Praat它来解决它。像下面这样的脚本涉及的信仰飞跃要少得多:

form Parse TextGrid...
  sentence File /path/to/your.TextGrid
  integer Tier 2
endform
Read from file: file$
intervals = Get number of intervals: tier
writeInfoLine: "Word in text", tab$, "Pronounciation started at"
for i to intervals
  label$ = Get label of interval: tier, i
  if label$ != ""
    start = Get start point: tier, i
    appendInfoLine: label$, tab$, string$(start)
  endif
endfor

如果将其保存到某个脚本中,则可以Praat从命令行调用praat /path/to/your/script.praat "/path/to/your.TextGrid" 2并从stdout.

您也可以手动运行它,也可以使用来编写您的文件。

于 2014-07-16T04:23:07.240 回答