使用Regexp进行Google Bigquery Proximity搜索

时间:2017-10-16 16:34:46

标签: regex google-bigquery

我有标题文字,例如“英国最危险的五大工作”。 我想查找包含单词“dangerous”的所有行和单词“UK”,它们之间的距离为3个单词。

与上述文字一样,它应符合我的条件,因为文字包含“危险”和“英国”字样,它们之间的距离也是3字。

我尝试了下面的语法:

   SELECT PubName,Title
   From emp.final_month
   WHERE REGEXP_CONTAINS(Title,r'\b?(dangerous).*(UK)\b?')

(以上查询给出了所有包含“危险”和“英国”字样但不基于它们之间位置的内容。)

不确定如何在上述查询中放置位置。任何人都可以帮助获得BigQuery支持的正则表达式的正确语法。

也欢迎Regex中的语法。

2 个答案:

答案 0 :(得分:2)

尝试以下方法作为方向的想法 - 它适用于BigQuery Standard SQL

#standardSQL
WITH `emp.final_month` AS (
  SELECT 'Top 5 most dangerous jobs in the UK' AS title UNION ALL
  SELECT 'Top most dangerous 5 jobs in the UK' AS title  
),
words AS (
  SELECT title, word, pos
  FROM `emp.final_month`, UNNEST(REGEXP_EXTRACT_ALL(title, r'[\w_]+') ) AS word WITH OFFSET pos
  WHERE word IN ('dangerous', 'UK')
  ORDER BY title, pos
)
SELECT w1.title title 
FROM words w1 JOIN words w2
ON w1.title = w2.title
AND w1.word != w2.word
AND w1.pos > w2.pos
GROUP BY title
HAVING MIN(w1.pos - w2.pos - 1) = 3

答案 1 :(得分:1)

你可以试试这个正则表达式:

\bdangerous\b (?:\w+[- ]){3}\bUK\b

请注意,它区分大小写,并且不会考虑“危险”之间的标点符号。和'英国'。

\bdangerous\b : the word 'dangerous' followed by a space
(?:       ): a non-capturing group...
(  \w+    ): consisting of one or more word characters...
(     [- ]): followed by either a hyphen or a space...
{3}: repeated three times (i.e. three words)
\bUK\b: the word 'UK'