【问题标题】:How to list the most frequent 3-word strings on Google Sheets如何在 Google 表格上列出最常见的 3 字字符串
【发布时间】:2020-04-06 18:46:32
【问题描述】:

我有一个行业列表以及相邻的行业列表来对它们进行分类。我想知道哪些行业是最常见的,但我没有设法让表格将两个词的类别解释为一个。

首先,我想知道总体上最常见的 5 个类别。另外我想知道前 5 个单字(黑色)、二字(红色)和三字(蓝色)类别。

另外,我想去掉逗号。

这是我想要实现的目标,以及我已在其中列出所有数据的 google 表格文档的链接:

https://docs.google.com/spreadsheets/d/13N8gc4POPhFhTvyqq-UugWS5GCgcONwliacSL8-MAr8/edit#gid=0

如何对这些类别进行分组和列出?

【问题讨论】:

  • 您能否使工作表可编辑,以便更轻松地演示/测试解决方案?
  • 我刚刚做了,@MattKing。我完全忘记了,对不起。
  • @MattKing 您可能已经知道,但为了让所有人都知道,您可以在任何电子表格上按File->Make a copy 以便能够编辑否则锁定的工作表。

标签: regex google-sheets transpose array-formulas google-sheets-query


【解决方案1】:

总词:

=ARRAYFORMULA(QUERY(TRANSPOSE(SPLIT(QUERY(B3:B11&",",,99^99), ", ")), 
 "select Col1,count(Col1) 
  group by Col1
  order by count(Col1) desc
  limit 5
  label count(Col1)''"))

整体短语:

=ARRAYFORMULA(QUERY(TRANSPOSE(SPLIT(QUERY(B3:B11&",",,99^99), ",")), 
 "select Col1,count(Col1) 
  group by Col1
  order by count(Col1) desc
  limit 5
  label count(Col1)''"))

一句话:

=ARRAYFORMULA(QUERY(TRIM(TRANSPOSE(SPLIT(QUERY(B3:B11&",",,99^99), ","))), 
 "select Col1,count(Col1)
  where not Col1 contains ' '
  group by Col1
  order by count(Col1) desc
  limit 5
  label count(Col1)''"))

两个字:

=ARRAYFORMULA(QUERY(TRIM(TRANSPOSE(SPLIT(QUERY(B3:B11&",",,99^99), ","))), 
 "select Col1,count(Col1)
  where Col1 matches '\w+ \w+'
  group by Col1
  order by count(Col1) desc
  limit 5
  label count(Col1)''"))

三个字:

=ARRAYFORMULA(QUERY(TRIM(TRANSPOSE(SPLIT(QUERY(B3:B11&",",,99^99), ","))), 
 "select Col1,count(Col1)
  where Col1 matches '\w+ \w+ \w+'
  group by Col1
  order by count(Col1) desc
  limit 5
  label count(Col1)''"))

【讨论】:

  • matches 似乎是一个危险的查询字符串,我很惊讶它甚至可以在这里工作,似乎当你使用 |在查询匹配它只在本地运行,而不是在谷歌服务器上。
  • 这似乎创造了奇迹。有什么办法可以使用这个公式来做这个完全相同的操作,但使用实际的句子?在这种情况下,我想省略在语言中经常使用的明显单词,如冠词、代词、最常见的动词等。理想情况下,我希望有副词、形容词和名词的组合。如果这是可能的,你有没有机会给我指出正确的方向?
  • @djur 您应该问一个单独的问题,该问题更具体,并提供您想要的行为样本。
  • @CodeCamper,我就是这么做的:stackoverflow.com/questions/61075050/…
【解决方案2】:

将问题分解为 3 个公式将允许您支持任意数量的“单词”。

第 1 步)将公式放入 D29 将所有单词视为一个单词(看看你的问题,这似乎是你真正需要的唯一步骤)

=query(arrayformula(trim(substitute(transpose(split(query({substitute(B3:B," ","_")},"select * where Col1 is not null",counta(B3:B)),", ")),"_"," "))),"select Col1, count(Col1) group by Col1 order by count(Col1) desc label Col1 'Descriptions', count(Col1) 'Frequency'")

步骤 2) 将公式放入F29 将下一个公式放在上面公式生成的表格旁边。如果你使用不同的范围,D30:D 应该被替换。

=arrayformula({"Words";if(D30:D="","",1+LEN(D30:D)-len(SUBSTITUTE(D30:D," ","")))})

第3步)将公式放入G29这将输出按字数排序的最大频率D29:F如果您使用不同的位置应该替换

=query({D29:F},"select * where Col1 is not null order by Col3,Col2 desc")

这样做的好处是您支持 1,2,3,4... 词频。

【讨论】:

  • 虽然第 1 步做了我想要实现的事情之一,但我不确定其他两个步骤到底在做什么。你能进一步解释一下吗?我已在同一文档的“副本 II”页面中汇总了您的答案。
  • @djur 尝试将第 1 步放在单元格 D29 中查看编辑我包含单元格以放置公式
  • 我刚刚意识到您的代码是如何工作的。快速提问:如何修改代码以排除某些值,例如介词或某个动词?
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2023-04-04
  • 2019-04-25
  • 1970-01-01
相关资源
最近更新 更多