[블로그 유입 증가를 위한 키워드 추출 프로그램 제작]

 (바로가기를 클릭하시면 해당 게시글로 넘어갑니다.)



Ⅰ 후보 키워드 추출 함수 제작


1. 명사 추출, 갯수 카운트 (바로가기)



Ⅱ 키워드 정보(검색량 상대지수 등) 요청 함수 


2. Naver Data Lab API를 이용한 키워드 정보 받아오기 (예정)


3. Naver 검색 키워드 정보 정제 및 정렬 (예정)


4. 프로그램 전체 코드 (예정)


(참고) Naver Data Lab API 이용하기 (예정)




'Python project > 01' 카테고리의 다른 글

[Python Project 01-1] 명사 추출, 빈도수 확인  (0) 2018.04.25

[인스타그램 해시태그(#) 검색 시 관련 여행 국가 출력]

 (바로가기를 클릭하시면 해당 게시글로 넘어갑니다.)



Ⅰ 필요 데이터 제작


1. 전세계 모든 국가, 일부 도시명 리스트 영어, 한국어, 일본어 번역(Google Translate API) (바로가기)


2. 도시의 위도, 경도 얻기(ggmap, Google Map API) (바로가기)


3. 공항 리스트 얻어오기(출처: ICAO) (바로가기)


(참고) 데이터 자동 번역을 위한 Google translate API Key 발급 (예정)


(참고) 데이터프레임에서 중복값이 있는 필드(행) 제거하기(예정)



Ⅱ 해시태그(#) 얻어오기


4. 특정 해시태그(#)가 포함된 글의 모든 해시태그 얻어오기 (예정)


(참고) ...  (예정)



Ⅲ 추출된 해시태그(#)를 관련 공항으로 연결시키기


5. 해쉬태그와 가장 관련이 높은 도시 연결하기(도시명 리스트 이용) (예정)


6. 해당 도시와 가장 가까운 공항 연결하기(같은 국가 내에서만 위, 경도를 통해 거리 계산) (예정)


7. 공항 출력 (예정)







# 1-1. 파일 불러오기


travel_ht <- readLines("travelproject1_travelholic.txt")

head(travel_ht, 3)

str(travel_ht)


> head(travel_ht, 3)

 [1] "<div><div class=\"_havey\" style=\"padding-top: 0px; padding-bottom: 5294.9px;\"><div class=\"_6d3hm _mnav9\"><div class=\"_mck9w _gvoze _tn0ps\"><a href=\"/p/Bf5wpmgBIKh/?taken-by=travelholic_insta\"><div class=\"_e3il2\"><div class=\"_4rbun\"><img alt=\"." [2] "#그라나다, #Granada, #스페인, #Spain" [3] "."


> str(travel_ht)

chr [1:335] "<div><div class=\"_havey\" style=\"padding-top: 0px; padding-bottom: 5294.9px;\"><div class=\"_6d3hm _mnav9\"><"| __truncated__ ...


'instaR'이라는 패키지를 이용하면 API를 이용하여 해시태그(#)를 바로 받아올 수 있습니다. 하지만 간단한 자연어 처리 연습을 위하여 분석 대상 계정의 html 소스 중 해시태그(#)가 포함된 부분을 텍스트 파일로 저장해서 불러왔습니다.




# 1-2. 전처리


html_rm <- c("class", "alt", "h1", "img", "div", "sizes",

             "srcset", "span", "header", "jpg", "style",

             "css", "com", "http", "tagged", "javascript", "src", "script")

travel_ht01 <- str_replace_all(travel_ht, "[<>,.?/=\"\':;*&^%$@!~]", " ")

travel_ht02 <- str_replace_all(travel_ht01, html_rm, " ")


> str(travel_ht03)

chr [1:335] "divdiv  _havey stylepadding-top  px padding-bottom  pxdiv  _ d hm _mnav div  _mck w _gvoze _tn psa hrefpBf wpmg"| __truncated__ ...


명사를 추출하기 전, 정제 대상이 아닌 것을 제거해주는 과정입니다. 간단하게 html_rm 벡터(html 코드에서 눈에 띄는 태그들을 정리)를 만들어 한꺼번에 제거하였습니다. 또한, 원래대로라면 특수문자를 나타내는 정규표현식 '//W'를 사용하면 되지만 해시태그(#)를 제거하면 안 되기에 다른 특수문자들을 따로 입력하여 제거했습니다. 특정 문자(열) 제거에는 'stringr'패키지에 있는 'str_replace_all'을 이용하여 띄어쓰기 한 칸으로 치환하는 방법을 사용했습니다. (명사 추출을 위한 공백 유지)




# 1-3. 명사 추출


travel_ht03 <- extractNoun(travel_ht02)

str(travel_ht03)


> str(travel_ht03)

List of 335

 $ : chr [1:27] "divdiv" "havey" "stylepadding" "top" ...

 $ : chr [1:5] "#그라나다" "#Granada" "#스페인" "#Spai" ...

 $ : chr ""

 $ : chr [1:6] "헤네랄리페" "정원" "풍경" "동화" ...

 $ : chr [1:5] "여름" "별장" "사용" "" ...

 $ : chr [1:3] "풍경" "이유" ""

 $ : chr ""

 $ : chr ""

 $ : chr [1:2] "dalkom" "j"


한국어 명사를 추출해주는 'koNLP' 패키지를 사용하기 위해서는 JAVA JRE가 설치되어 있어야 합니다. (공식 홈페이지 다운) 해당 패키지에서 'useNIADic'을 로드하여 extractNoun을 사용하면 위와 같이 명사가 추출됩니다. 한국어 스페인의 경우 정상적으로 추출되었는데 Spain의 경우 Spai로 추출된 것을 보면 영어 명사 추출에 적합한 패키지는 아닌 것 같습니다.




# 1-4. 해시태그(#) 포함 단어만 추출


travel_ht04 <- grep("#", travel_ht03)

str(travel_ht04)


> str(travel_ht04)

 int [1:220] 28 29 30 31 52 53 55 206 207 238 ...


본 프로젝트에서 필요한 해시태그(#)를 뽑아내기 위해, 특정 문자(열)가 포함된 단어만 추출해주는 'grep'을 사용했습니다. 해당 함수는 값이 아닌 인덱스를 결과로 내므로 값을 찾아오는 단계를 거쳐야 합니다.




# 1-5. 값 불러오기


travel_ht05 <- travel_ht03[travel_ht04]

head(travel_ht05, 20)


> head(travel_ht05, 20)

 [1] "#그라나다"      "#Granada"      "#스페인"        "#Spai"      

 [5] "#여행에미치"    "#일상을여행으"  "#Travelholic"  "#오만"      

 [9] "#Oma"          "#여행에미치"    "#일상을여행으"  "#Travelholic"

[13] "#타타코아"      "#Tatacoa"      "#콜롬비아"     "#Colombi"   

[17] "#여행에미치"    "#일상을여행으"  "#Travelholic"  "#밀라노"


값을 불러오는 방법은 간단합니다. '원 데이터[결과 데이터]'로 불러와 새로운 변수에 담아주면 됩니다. 'head'로 20개를 출력해보니 'grep'을 이용한 처리가 잘 되어 해시태그(#)가 포함된 단어만 남아있었습니다.




# 1-6. 해시태그(#) 제거


travel_ht06 <- str_replace_all(travel_ht05, "#", "")

head(travel_ht06, 40)


> head(travel_ht06, 40)

 [1] "그라나다"     "Granada"      "스페인"       "Spai"         "여행에미치"

 [6] "일상을여행으" "Travelholic"  "오만"         "Oma"          "여행에미치"

[11] "일상을여행으" "Travelholic"  "타타코아"     "Tatacoa"      "콜롬비아"  

[16] "Colombi"      "여행에미치"   "일상을여행으" "Travelholic"  "밀라노"    

[21] "Milano"       "이탈리아"     "Ital"         "여행에미치"   "일상을여행으"

[26] "Travelholic"  "유후인"       "Yufuin"       "일본"         "Japa"      

[31] "여행에미치"   "일상을여행으" "Travelholic"  "발베크"       "Baalbek"   

[36] "레바논"       "Lebano"       "여행에미치"   "일상을여행으" "Travelholic"


추출된 해시태그를 다른 데이터와 비교하여 교집합을 추출하기 위해 '#'을 제거하고, 아래와 같이 데이터 형태와 열 이름 등을 정리했습니다.




# 1-7. 데이터 프레임으로 내보내기


travel_ht07 <- as.data.frame(travel_ht06, stringsAsFactors = FALSE)

str(travel_ht07)

head(travel_ht07)


> head(travel_ht07, 2)

       travel_ht06

1 그라나다

2  Granada




# 1-8. 열 이름 변경


travel_ht07 <- travel_ht07 %>% rename(tag = travel_ht06)

head(travel_ht07)    


> str(travel_ht07)

'data.frame':  220 obs. of  1 variable:

 $ tag: Factor w/ 120 levels "","Afric","Aruba",..





+ Recent posts