创建包含在另一列中出现的句子中使用的单词列表(唯一)的列?

pai*_*ski 0 google-sheets

在我的 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出现两次。

Tom*_*ard 6

这是一种方法。

我写了一个自定义函数来将句子分解成单词,删除标点符号等。你可以在 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)然后计算单词的出现次数

有一个工作示例这里

我不确定它在大规模上的表现如何,但它可以设置为处理较小的范围。


Max*_*rov 6

假设该列表位于 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)