我正在使用 hive 0.13!我想在我的数据中找到多个标记,例如“嘻哈”和“摇滚音乐”,并用“hiphop”和“rockmusic”替换它们-基本上将它们替换成没有空格。我在 hive 中使用了regexp_replace函数。下面是我的查询,它对于上面的两个示例非常有用。
drop table vp_hiphop;
create table vp_hiphop as
select userid, ntext,
regexp_replace(regexp_replace(ntext, 'hip hop', 'hiphop'), 'rock music', 'rockmusic') as ntext1
from vp_nlp_protext_males
;
但是我有100个这样的双字母组/ ngram,并且希望能够在仅删除空白的地方进行有效的替换。我可以匹配短语-嘻哈和摇滚音乐,但在替换中,我想简单地修剪空白。下面是我尝试过的。我也尝试将triexp与regexp_replace一起使用,但它想要regexp_replace函数中的第三个参数。
drop table vp_hiphop;
create table vp_hiphop as
select userid, ntext,
regexp_replace(ntext, '(hip hop)|(rock music)') as ntext1
from vp_nlp_protext_males
;
最佳答案
您可以使用TRANSLATE
函数从字符串中删除所有出现的子字符串,以将子字符串替换为空字符串。对于您的查询,它将变为:
drop table vp_hiphop;
create table vp_hiphop as
select userid, ntext,
translate(ntext, ' ', '') as ntext1
from vp_nlp_protext_males
;