我是 praat 脚本的新手,所以请耐心等待:我设置了一个 for 循环,我想从三层中提取数据。我的前两层工作得很好,但我在第三层遇到了麻烦。
所以在第三层,在循环中的给定点,可能有 1 个或 2 个元素,(我的语言学研究员让我写这个;我不完全了解我到底在提取什么)和我不知道如何检查有多少元素。有没有我可以使用的函数让我在给定的时间间隔内获取元素的数量?我目前的思路是在循环中的那个点获取第三层中的元素数量。如果只有一个,则获取那个,将其分配给正确的变量名,然后继续。如果有两个,抓住两个。
我是 praat 脚本的新手,所以请耐心等待:我设置了一个 for 循环,我想从三层中提取数据。我的前两层工作得很好,但我在第三层遇到了麻烦。
所以在第三层,在循环中的给定点,可能有 1 个或 2 个元素,(我的语言学研究员让我写这个;我不完全了解我到底在提取什么)和我不知道如何检查有多少元素。有没有我可以使用的函数让我在给定的时间间隔内获取元素的数量?我目前的思路是在循环中的那个点获取第三层中的元素数量。如果只有一个,则获取那个,将其分配给正确的变量名,然后继续。如果有两个,抓住两个。
我可以想到两种方法来做到这一点,“手动”和提取 TextGrid 的一部分。
让我们想象一下(为了清楚起见),您想要计算落在给定区间内的点数。这与计数间隔之间存在一些差异,这些差异属于间隔,但只是小步。
我的意思是手动获得区间内“第一个”点的索引(区间开始后的第一个点)和“最后一个”点的索引,然后减去(注意围栏错误!)。如果第一个是3
,最后一个是8
,你知道你的区间有 6 个点。
假设我们有这个:
textgrid = selected("TextGrid")
main_tier = 1 ; The tier with the main interval
sub_tier = 2 ; The tier with the elements you want to count
interval = 3 ; The interval in the main tier
start = Get start point: main_tier, interval
end = Get end point: main_tier, interval
然后我们可以这样做:
first = Get high index from time: sub_tier, start
last = Get low index from time: sub_tier, end
total = last - first + 1
appendInfoLine: "There are ", total, " points within interval ", interval
(或者您可以使用tgutils CPrAN 插件中的“Count points in range...”命令)。
如果你计算间隔,你必须稍微改变一下:
first = Get high interval at time: sub_tier, start
last = Get low interval at time: sub_tier, end
或者,如果您只想计算完全落在主区间内的区间
first = Get high interval at time: sub_tier, start
last_edge = Get interval edge from time: sub_tier, end
last = last_edge + 1
一种完全不同的方法是对 TextGrids 使用“提取部分...”命令。您可以提取属于您的时间窗口内的 TextGrid 部分,然后仅使用该部分。计算该部分中的间隔数将只是计算该新 TextGrid 中的间隔总数的问题。
当然,这不会检查您被认为在范围内的间隔是否完全在范围内。
一个简单的例子:
Extract part: start, end, "yes"
# And then you just count the intervals
intervals = Get number of intervals: sub_tier
# or points
points = Get number of points: sub_tier
如果您想重复执行此操作(例如,对于主层中的每个间隔),上面提到的tgutils 插件有一个“爆炸” TextGrids的脚本 。尽管名称可能有点令人不安,但这只是使用给定层中的间隔将 TextGrid 分成间隔大小的块(通过调用上面提到的相同命令)。例如,如果您使用具有 5 个间隔的间隔层“分解” TextGrid,您将得到 5 个较小的 TextGrid,对应于每个原始间隔。
该脚本可以保留生成的 TextGrid 的时间戳,以便更轻松地参考原始文件。如果在选择 TextGrid 和 Sound 的情况下运行,它也会“爆炸” Sound,因此您也可以处理这两个对象的组合。
(完全披露:我写了那个插件)。