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

时间:2016-10-04 16:59:28

标签: google-sheets spreadsheet

在我的Google文档电子表格中,我有一个包含句子的列(每行1个句子):

How is it going?
I am going to the store.
He is going to play baseball.

我想创建另一个列,其中包含一个唯一的单词列表(每行1个单词,忽略大写,好像所有内容都是小写的),所以它的几行可能看起来像:

how
is
it
going
I
am
to
the
store

另外,作为奖励,我希望创建另一个列,其中每个单词都会出现。例如,前几行可能如下所示:

1
1
1
2

因为"",""和""它"出现一次,"去"出现两次。

编辑:有人可以向我解释为什么这已经被投票了?

4 个答案:

答案 0 :(得分:3)

这是一种方法。

我写了一个自定义函数来将句子分解成单词,删除标点符号等。你可以在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(" ") ;
}

完成并保存后,您可以像=WORDS(A1:A3)

一样使用它

从那时起,我刚刚使用了Google功能。

=unique(c2:c)为我们提供了列表中的唯一字词 =COUNTIF(C2:C,"="&D2)然后计算单词

的出现次数

有一个有效的例子here

我不确定它在大规模上表现得如何,但它可能会处理较小的范围。

答案 1 :(得分:2)

Ussume,列表在A列中。

将此公式粘贴到单元格C2中:

=ArrayFormula(TRANSPOSE(REGEXEXTRACT(SPLIT(JOIN(" ",A:A)," "),"\w+"))) 

这将给出所有单词的列表。

然后将此公式粘贴到任何空闲单元格中:

=QUERY({C:C,C:C},"select Col1, count(Col2) where Col1 <> '' group by Col1",1)

结果是:

enter image description here

单一配方解决方案也是可能的:

=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)

答案 2 :(得分:1)

我复制了汤姆·伍德沃德(Tom Woodward)的脚本,并添加了一行从输出中删除单个字母词。

var noSingleLetterWords = punctuationless.replace(/\b[a-zA-Z]{1}\b/g,"");

这是最终结果。

function WORDS(input) {
    var input = input.toString();
    var inputSplit = input.split(" ");
    Logger.log(inputSplit);
    inputSplit = inputSplit.toString();

    var punctuationless = inputSplit.replace(/[.,\/#!$%\?^&\*;:{}=\-_`~()]/g," ");
    var noSingleLetterWords = punctuationless.replace(/\b[a-zA-Z]{1}\b/g,"");
    var finalString = noSingleLetterWords.replace(/\s{2,}/g," ");
    finalString = finalString.toLowerCase();
    return finalString.split(" ") ;
  }

答案 3 :(得分:0)

@Max Makhrov的出色A稍长,但不区分大小写(例如,Hehe在诸如{ {1}}和数字(例如He said he would.中的711)不会引起错误:

I am going to the 711 store.

另一方面,确实将=unique(ArrayFormula(lower(TRANSPOSE(split(join(" ",left(A1:A3,len(A1:A3)-1))," "))))) is算入其中,例如"is"

对于QUERY,我会按字母顺序添加一种排序方式:

How is "is" going?

或按频率:

=QUERY({C:C,C:C},"select Col1, count(Col2) where Col1 <> '' group by Col1 order by Col1",1)

虽然可能所需要的仅仅是:

=QUERY({C:C,C:C},"select Col1, count(Col2) where Col1 <> '' group by Col1 order by count(Col2) desc",1)

复制以适合(假设各个单词在ColumnB中,从Row1开始),例如使用以下公式表示:

=countif(B:B,B1)