在我的 Google 表格中,我有一列包含句子(每行一个),例如:
How is it going?
I am going to the store.
He is going to play baseball.
Run Code Online (Sandbox Code Playgroud)
我想创建另一个包含唯一单词列表的列(每行一个单词,忽略大写,好像所有内容都是小写),因此其中的几行可能如下所示:
how
is
it
going
I
am
to
the
store
Run Code Online (Sandbox Code Playgroud)
等等。
此外,作为奖励,我希望创建另一个列,其中每个单词出现的数量。例如,前几行可能如下所示:
1
1
1
2
Run Code Online (Sandbox Code Playgroud)
因为how
, is
, 和it
出现一次又going
出现两次。
这是一种方法。
我写了一个自定义函数来将句子分解成单词,删除标点符号等。你可以在 TOOLS>SCRIPT EDITOR 下添加它
function WORDS(input) {
var input = input.toString();
var inputSplit = input.split(" ");
Logger.log(inputSplit);
inputSplit = inputSplit.toString();
var punctuationless = inputSplit.replace(/[.,\/#!$%\?^&\*;:{}=\-_`~()]/g," ");
var finalString = punctuationless.replace(/\s{2,}/g," ");
finalString = finalString.toLowerCase();
return finalString.split(" ") ;
}
Run Code Online (Sandbox Code Playgroud)
完成并保存后,您可以像这样使用它 =WORDS(A1:A3)
从那里我只使用了可用的 Google 函数。
=unique(c2:c)
给我们列表中的唯一单词,
=COUNTIF(C2:C,"="&D2)
然后计算单词的出现次数
有一个工作示例这里
我不确定它在大规模上的表现如何,但它可以设置为处理较小的范围。
假设该列表位于 A 列中。
将此公式粘贴到单元格 C2 中:
=ArrayFormula(TRANSPOSE(REGEXEXTRACT(SPLIT(JOIN(" ",A:A)," "),"\w+")))
Run Code Online (Sandbox Code Playgroud)
这将给出所有单词的列表。
然后将此公式粘贴到任何空闲单元格中:
=QUERY({C:C,C:C},"select Col1, count(Col2) where Col1 <> '' group by Col1",1)
Run Code Online (Sandbox Code Playgroud)
结果是:
单一公式解决方案也是可能的:
=QUERY({{"Words";ArrayFormula(TRANSPOSE(REGEXEXTRACT(SPLIT(JOIN(" ",A:A)," "),"\w+")))},{"Words";ArrayFormula(TRANSPOSE(REGEXEXTRACT(SPLIT(JOIN(" ",A:A)," "),"\w+")))}},"select Col1, count(Col2) where Col1 <> '' group by Col1",1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4414 次 |
最近记录: |