2015-02-03 5 views
3

하이브 0.13을 사용하고 있습니다! 내 데이터에서 "힙합"및 "록 음악"과 같은 여러 토큰을 찾고이를 "힙합"및 "록 음악"으로 바꾸고 싶습니다. 기본적으로 공백없이 바꾸십시오. 하이브에서 regexp_replace 함수를 사용했습니다. 아래는 내 쿼리이며 위의 두 가지 예제에서 잘 작동합니다.하이브 - 여러 문자열에 대한 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 개의 bigrams/ngrams가 있으며 공백을 제거한 위치에서 효율적으로 교체 할 수 있기를 원합니다. 나는 힙합과 락 음악과 일치하는 패턴을 만들 수 있지만 대체 할 때 단순히 공백을 자르고 싶습니다. 아래는 내가 시도한 것이다. 나는 또한 regexp_replace를 사용하여 trim을 시도했지만 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 
; 

답변

3

당신은 빈 문자열로 문자열을 대체 할 TRANSLATE 함수를 사용하여 문자열에서 문자열의 모든 항목을 제거 할 수 있습니다. 귀하의 질문에 대해서는 다음과 같이됩니다 :

drop table vp_hiphop; 
create table vp_hiphop as 
select userid, ntext, 
     translate(ntext, ' ', '') as ntext1 
from vp_nlp_protext_males 
;