Type-Token Google 工作表中的比率:如何处理长文本字符串(数百万个字符)

Type-Token Ratio in Google Sheets: How to manipulate long strings of text (millions of characters)

这是挑战。在 Google Sheets 电子表格中,我有一列可以在其中找到一系列单元格,其中包含用逗号分隔的单词列表,每行一个,最多一千行。每个列表显示从文本中提取的单词,按 alpha-numeral 顺序,从几百到几千个单词。我需要计算所有行中的单词总数,以及唯一单词形式的数量。换句话说,从自然语言处理的词汇表中,我想知道我的语料库中 tokens 的数量和 types 的数量,在为了计算type-token比率或词汇密度。

尤其是,在整个专栏中找到独特单词形式的数量已被证明是一项挑战。在一个 ARRAY FORMULA 中,使用相应的函数,我连接了字符串,拆分了单词,将它们换位,然后使用 UNIQUE 函数删除了重复项,然后计算了剩余的单词形式。这适用于由十多个单词列表组成的样本语料库,但是当我达到十五个左右的单词列表时失败了,这与我需要加入我的公式以获得结果的数千个列表相去甚远寻找。

据我所知,问题在于我打算处理的结果字符串超过 50,000 个字符。对于特定情况,我到处都发现了类似的问题和解决方法的建议,主要是通过自定义函数,但我无法复制结果。不用说,自己编写自定义函数超出了我的能力范围。有人建议使用 QUERY headers,但我也没想到这对我的情况是否有帮助。

我得出的公式如下:

通过所有列表获取单词(token)的总数: =COUNTA(ARRAYFORMULA(SPLIT(JOIN(",";1;B2:B);",")))

通过所有列表获取唯一词形(类型)的数量: =COUNTA(ARRAYFORMULA(UNIQUE(TRANSPOSE(SPLIT(JOIN(",";1;B2:B);",")))))

A sample in a spreadsheet can be found here.

编辑 1:

我已经包括了去除标点符号的文本列,从中生成单词列表,以及用于生成它们的公式。

编辑 2:

更改了标题以更好地反映总体意图。

对于项目总数,尝试:

=arrayformula(query(flatten(iferror(split(B2:B;",";1);));"select count(Col1) where Col1 !='' label count(Col1) '' ";0))

独特项目总数:

=arrayformula(query(unique(flatten(iferror(split(B2:B;",";1);)));"select count(Col1) where Col1 !='' label count(Col1) '' ";0))

如果 sheet 中的行太多,您可能会遇到问题。如果是这样,请将范围限制设置为 B2:B1000

将此添加到单元格 C1 以获得 'Comma separated items':

的列表
=arrayformula({"Comma separated items";if(B2:B<>"";len(regexreplace(B2:B;"[^\,]";))+1;)})

解释:

arrayformula() 允许计算从一个单元格向下级联 sheet。

所以在 arrayformula() 中,起点是 split(B2:B;",") 为每个逗号分隔的项目创建列。

iferror(split(B2:B;",");"") 在单元格没有逗号的地方留下空白(就像第 32 行的单元格一样)。我通常只使用 ;) 而不是上面显示的 ;""),删除 "" 所以 iferror 没有任何结果。

然后 flatten() 获取所有列并将它们展平为一个列。

需要

query() 来计算结果列 count(Col1),其中没有单元格为空 where Col1 !='',并且 label count(Col1) '' 删除一个标签 'count'通常会显示。

对于唯一值列表,unique()放在[=21=之前],flatten()之后。