gpt4 book ai didi

google-bigquery - SPLIT 可以与多个分隔符一起使用吗?

转载 作者:行者123 更新时间:2023-12-04 16:10:17 27 4
gpt4 key购买 nike

我想使用 SPLIT 函数对各种文本条目进行单词分析,在这个例子中是 git commit comments。通常一个单词由空格分隔,但我还想在分隔符列表中包含逗号、分号、冒号、句点、问号、感叹号、制表符、换行符。本质上使用 REGEX 模式来指定分隔符,如果找到它们中的任何一个,则将其视为分隔符。

例如:

SELECT 
split(commit_message, " ") as words,
FROM [project:dataset.table]
LIMIT 1000

如果输入数据是这样的:

"Commit message XYX:  Hello.  This is a test.  This is a fun test!  First, we'll run a test, then we'll check the results.  A test is currently running."

如果我们对单词进行 GROUP BY,我希望单词“test”的 COUNT 为 4,但使用上面的查询 test 只会计算一次。如果分隔符字段接受类似于下面的 REGEXP,那就太好了,但我认为这不可用,或者语法没有发布。

SELECT 
split(commit_message, "[\W]+") as words,
FROM [project:dataset.table]
LIMIT 1000

在上面的示例中,如果检测到一个或多个非单词字符,这些都将被视为分隔符。如果此功能不存在,是否可以考虑在未来进行改进?在这个时间点,我需要在“单词”列中取出结果并剥离所有非单词字符以获得我想要的。 (见下文)

SELECT
LOWER(REGEXP_EXTRACT(words, r'(\w+)')) as words
FROM
(
SELECT
split(commit_message, " ") as words,
FROM [project:dataset.table]
)
LIMIT 1000

如果您有避免提取非单词字符这一额外步骤的建议,我们将不胜感激。

最佳答案

SPLIT 函数只接受常量字符串作为分隔符。正则表达式分隔符没有隐藏语法。

您可以尝试的另一种方法是使用 REGEXP_REPLACE 将所有所需的分隔符替换为空格或任何单个分隔符,如下所示:

SPLIT(REGEXP_REPLACE(message, ",|;|:|\\.|\\?|!|\t|\n", " "), " ")

关于google-bigquery - SPLIT 可以与多个分隔符一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26637247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com