2016-08-05 3 views
-2

R에서 해시 태그 추출 함수를 만들려고합니다.이 함수는 게시물에서 해시 태그를 추출하고,있는 경우 빈칸을 제공합니다. 내 기능은R 프로그래밍의 Hashtag Extract 함수

hashtag_extract= function(text){ 
       match = str_extract_all(text,"#\\S+") 
       if (match) { 
       return match 
       }else{ 
       return ''}} 
String="#letsdoit #Tonewbeginnign world is on a new#route 

비슷하지만 내 기능은 errors.like 1 오류 나에게 t을 보여주는, 그래서

hashatag_extract(string) 

과로 적용 할

Error: unexpected symbol in: 
     " if (match) { 
    return match" 

되어 작동하지 않습니다 대답은 다음과 같아야합니다.

#letsdoit ##Tonewbeginnign #route 

그리고 결국에는 전체 열에서이 함수를 적용하기 위해 sapply를 사용할 것이므로 If 부분이 중요합니다. R에 대한 중요하지 이후, R 내 들여 쓰기를 무시하지만 모든 제안은 도움이

+1

정확하게 무엇입니까 (여기에서 관련이 있습니까)? 주어진 기능이 작동하지 않거나 모든 경우에 기능이 없거나 "기능"이 누락 되었습니까? 질문에 추가하십시오. 감사. – Dilettant

+0

@docendodiscimus 그것은 중요했습니다. 편집 완료 –

+0

작은 예제 트윗을 추가하면 도움이 될 것입니다. –

답변

11
  1. 해시 태그의 정규 표현식에 나는 당신이 일반적으로 받아 들여지는 "규칙"에 대한 이해 확실하지 않다
  2. 간단하지 않은 것입니다하시기 바랍니다 내가 str_extract_all()을 믿지 않는 해시 태그
  3. 은 당신이 RLY 트윗
  4. ,369 분석을 중지해야이
  5. 그냥 stringr 기능
  6. 밥상 위에 구축 stringi을 사용하는 것입니다 생각 반환 '

    get_tags <- function(x) { 
        # via http://stackoverflow.com/a/5768660/1457051 
        twitter_hashtag_regex <- "(^|[^&\\p{L}\\p{M}\\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7])(#|\uFF03)(?!\uFE0F|\u20E3)([\\p{L}\\p{M}\\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7]*[\\p{L}\\p{M}][\\p{L}\\p{M}\\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7]*)" 
        stringi::stri_match_all_regex(x, hashtag_regex) %>% 
        purrr::map(~.[,4]) %>% 
        purrr::flatten_chr() 
    
    } 
    
    tests <- c("#teste_teste  //underscore accepted", 
          "#teste-teste  //Hyphen not accepted", 
          "#leof_gfg.sdfsd //dot not accepted", 
          "#[email protected]#6fgh6 // @ not accepted", 
          "#leo#leo2#asd  //followed hastag without space ", 
          "#6663    // only number accepted", 
          "_#asd_   // hashtag can't start or finish with underscore", 
          "-#sdfsdf-   // hashtag can't start or finish with hyphen", 
          ".#sdfsdf.   // hashtag can't start or finish with dot", 
          "#leo_leo__leo__leo____leo // decline followed underline") 
    
    
    get_tags(tests) 
    ## [1] "teste_teste"    "teste"     
    ## [3] "leof_gfg"     "f34234"     
    ## [5] "leo"      NA       
    ## [7] NA       "sdfsdf"     
    ## [9] "sdfsdf"     "leo_leo__leo__leo____leo" 
    
    your_string <- "#letsdoit #Tonewbeginnign world is on a new#route" 
    
    get_tags(your_string) 
    ## [1] "letsdoit"  "Tonewbeginnign" 
    

    당신은 당신이 각 입력 벡터로 그룹화 할 수 해시 태그의 각 세트가 필요한 경우 기능을 조정할해야하지만 당신은 정말 didn를 : 1,363,210

이 전부는 아니더라도, 케이스를 대부분을 처리해야 당신이 실제로 이루고자하는 것을 자세하게 설명합니다.

+0

고맙습니다. , str_extract_all 나를 위해 정말 좋은 일하고 있지만 여전히, pls 내 기능을 도와주세요 –

+1

이 대답으로 필요한 모든 것을 가지고 있어야합니다. 요구 사항을 충족시키지 못하면 기꺼이 삭제 해 드리겠습니다. – hrbrmstr

+0

'map'과'flatten_chr'의 멋진 작업 흐름. 나는 placeholder 대신'.x'가'map (~ .x [, 4])'와 같이 필수적이라고 생각했다. 알아두면 좋은 분 – aurelien

1

@manu sharma 내부에있는 경우에는 적용 할 필요가 없다고 말하고 싶습니다. 일치하지 않는 행이 'NA'값을 갖도록합니다. 그리고 함수를 적용한 후에는 빈 칸으로 바꾼다. 희망 내 코드는 데 도움이 : 그것은 샬리의 대답과 거의 유사하다 생각, 내가 어떻게 든 일을 가지고, 모든 도움

aaa <- readLines("C:\\MY_FOLDER\\NOI\\file2sample.txt") 
ttt <- function(x){ 

    r <- sapply(x, function(x) { matches <- str_match(x,"#\\w+\\s+")}) 
    r 


    } 

y <-ttt(aaa) 
y[is.na(y)]='' 
0

모두에게 감사를 메시지

message[is.na(message)]='abc' 

에 모든 NAS를 1.replacing 전체 칼럼에 해시 태그

hashtag_extrac= function(text){ 
match = str_extract_all(text,"#\\S+") 
if (match!= "") { 
match 
} else { 
'' }} 

에게 적용 기능 추출 2.function 0
hashtags= sapply(message, hashtag_extrac) 

+0

if 문은 왜 거기에 있습니까? 그것은 아무것도하지 않습니다 ... 만약 그것이 비어 있지 않다면, 아무 것도하지 마십시오. 비어있는 경우 비워 두십시오. 위의 훨씬 더 높은 품질의 대답을 사용하지 않는 이유는 당황 스럽습니다. – cory

+0

정말 고마워요! 그러나 나는 스크립트에서조차도 침착성을 유지할 것을 요구할 것입니다. 우리는 우리 자신의 사례와 사용법을 가지고 있습니다. 우리는 한 마디로 설명 할 수없고 확실하게 그들은 더 나은 대답을합니다. –

+0

그래서 당신은 @ Shalini의 대답을 받아들입니다. - 이해합니다. 그런 식으로, 또는 내가 그것을 잘못 읽었습니까? – Dilettant