我正在使用hive 0.13!我想找到多个令牌,如" hip hop"和"摇滚音乐"在我的数据中,用" hiphop"替换它们。和#34; rockmusic" - 基本上没有空格替换它们。我在hive中使用了regexp_replace函数。以下是我的查询,它适用于以上2个示例。
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个这样的bigrams / ngrams并希望能够在我删除空格的情况下有效地替换。我可以模仿匹配短语 - 嘻哈和摇滚乐,但在替换中我想简单地修剪白色空间。以下是我的尝试。我也尝试使用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
;
答案 0 :(得分:3)
您可以使用TRANSLATE
函数从字符串中删除所有出现的子字符串,以使用空字符串替换子字符串。对于您的查询,它将成为:
drop table vp_hiphop;
create table vp_hiphop as
select userid, ntext,
translate(ntext, ' ', '') as ntext1
from vp_nlp_protext_males
;