급하고 아쉬운 상황에서 우물을 판다고...
단순 반복 번역 일거리가 생겼다.. 영문명을 국문으로 그대로 옮겨적은 글자를 다시 영문명으로 바꾸는 것..
한 두개면 상관이 없는데... 양이.. 생각보다 많았다..
그래서 찾아보았다.. 번역 API 를 쓰기로.. 몇가지 후보가 있었는데 ..
1. 구글
2. 파파고
3. 빙
4. 카카오
1. 구글..
API 정책이 변경된지 한참 된 것 같다. 유료로 과금이 들어가는.. 50만자 이하는 무료인거 같기도 하고 아닌거 같기도 하고.. 다음에 도전을 해봐야겠다. 지금 당장은 삽질도 해야 하기 때문에 다른 API를 사용하기로 했다.
2. 파파고
해외여행갈때 그 기술을 입증받은.. 우리의 파파고.. 일일 제한 음.절. 이 1,000자로 제한 적이다.. 패스.
3. 빙
무료고 구글과 비슷한 정확도를 갖고 있는 것 같은데.. 도대체 아무리 봐도 사용법을 모르겠어서 패스.. 이것은 조만간 다시 재도전..
4. 카카오
마지막 수단으로 사용한 번역 API.. 제공되는 용량도.. 300만자 정도 되고.. 삽질을 하고 하는데 큰 문제가 없어서 진행..
결과는 마지막에...
1. 카카오 개발자 아이디 만들기 및 API key 받기 (초간략)
카카오개발자 홈페이지 : https://developers.kakao.com/에서 회원가입하고 번역 탭에서 API key를 할당받는다.
2. 필수 정보 확인
Host : kapi.kakao.com
GET or POST : /v1/translatioin/translate
Authorization : KakaoAK {app_key}
그리고,
필수 호출값
query = 번역할거...
src_lang = 번역대상 언어
target_lang = 번역결과 언어
끗.
p.s 지원언어는 개발가이드 페이지를 통해 확인 할 수 있다.
3. 코드 짜기... (본론)
1) 필요 패키지
library(httr)
library(stringr)
library(XML)
library(data.table)
기본 정보
kakao_api = "발급받은 api key"
url = c("https://kapi.kakao.com/v1/translation/translate") # HOST와 GET 주소
target=c("?target_lang=en") #번역결과 언어.. 나는 en 영어..
src=c("&src_lang=kr&query=") #번역하고자 하는 언어 kr 과.. 번역 대상을 포함시켰다.
사실은 query=는 따로 뽑아놔도 되지만, 내가 원하는것은 data.frame에서 단어를 한개씩 넣어 번역을 반복 시킬 것이기 때문에 함께 포함시켰다.
raw=read.csv("df.csv", header=T)
df=raw
df$before=as.character(df$before) #before하나로 구성되어 있는 데이터 테이블
size=NROW(df$before) # for문에서 반복 시킬 최종 숫자가 된다.
이제 .. 본격적인 시작.. 사실 for 문에서 가장 많은 시간을 소요했다.
삽질의 연속.. 생활코딩러는... 아무것도 몰라요...
기존에 포스팅한 글을 계속 보면서 무한 반복...
2017/10/26 - [데이터 갖고 놀기/공공데이터 갖고 놀기] - 공공데이터 open api _ R
공공데이터 open api _ R
공공데이터 open api 듣기는 많이 들었는데... 실제로는 api 호출법을 몰라서 어떻게 하는것인지 인터넷을 한참 찾아봤다... 다들 api를 호출해서 xml 형태를 data.frame으로 바꾸고 csv로 저장해서.... 비전공자..
poiopzxcv.tistory.com
거짓말 안하고 ... 삽질하는 내내 약 10일간.. R 스튜디오와 해당 포스팅을 항상 켜두고 왔다갔다하며.. 계속 처다봤다..
그리고 마침내 답을 얻었다. (사실 포스팅하고 .. 이유 모르게 다시 작동이 안돼서 한참 묵혀뒀다가 다시 코드 짰..)
result=list()
for(i in 1:size){
temp1=list()
temp2=list()
text=df$before[i]
res=POST(str_c(url, target, src, text),
add_headers("Authorization"=str_c("KakaoAK ", kakao_key))
)
temp1=content(res)
temp2[[i]]=data.table(
before=text,
trans=temp1$translated_text[[1]][[1]],
stringsAsFactors = T) # 비어있는 컬럼 (NULL 을 포함한 데이터테이블을 만든다)
temp3[[i]]=rbindlist(temp2)
result=rbindlist(temp3, fill=T)
}
언급해주고 싶은 것은...
GET과 POST의 차이는 아직도 모르겠다.. 같은 기능이고 속도의 차이 뭐 이런거라는데... 뭘 해도 작동은 되지 않을까..?싶다.
API를 돌리는데 번역이 안되는 부분이 있었다. 그것까지는 이해를 했는데, 이걸 data.frame 행태로 묶으려니 묶이지 않아 생각해보니, 번역에 실패한 값이 결측값이 되어, 결국엔 data.frame이 생성이 되지 않는 것 . 찾다 찾다 help(rbindlist)를 통해 되지도 않은 영어를 읽어가며, 옵션을 이것저것 만져봐 만족스런 결과를... (역시 사람은 삽질을 해야한다.)
result=rbind(result, fill=T)
fin=result
fin
write.csv(fin, "translate.csv")
사실, rbindlist의 옵션인 fill=T가 중복되는것 같지만... 귀찮아서 어차피 맥락은 같을 거라고 생각해서 그대로 작성..
이후 , 해당 csv 파일을 열어보면 아마.. 번역전(before)와 번역후 (trans) 형태로 컬럼이 구성되어 있고, 번역결과가 나열 되어 있을 것이다.
번역 결과를 보니.. 그렇게 만족할 수준은 아니다. 내가 번역하고자 하는 단어들이 화학물질의 영문명이기에 더욱 정확한 번역이 필요한데 의외로 결측값들이 많이 발생하여 온갖 셀에 NA가 떴다. 아무래도 google 또는 bing 의 API를 다시 활용해봐야겠다.
웃긴거는 해당 단어를 카카오i 번역을 이용하면 제대로 번역이 된다... 하지만 카카오i는 아직 api를 제공 안해주는것 같다. 베타라 그런가...
아시는분은 댓글로 방법좀...
R을 전문적으로 사용하는 사람도 아니고, 전문 교육기관에서 배운 사람도 아닙니다.
단순히 googling과 stackoverflow, 페이스북 Ruck에서 보고 어깨넘어로 배운 생활코딩러입니다.
해당 코드의 자세한 기능과 설명은 잘 모릅니다. 참고해주세요
Naver Papago Api를 활용한 Nmt 번역
네이버 API 활용법 #1 Dr.Kevin 04/17/2019
mrkevinna.github.io
'데이터 갖고 놀기 > 실전 전투 R' 카테고리의 다른 글
코로나 바이러스 현황 보기 (1) | 2020.03.05 |
---|---|
API R로 여행 계획 짜기 (with daum kakao) (2) | 2020.02.14 |
gsub_원하는 단어만 찾아바꾸기_R (0) | 2019.11.26 |
복수응답 카운팅하기 (0) | 2018.06.26 |
function() 만들기 (0) | 2017.11.21 |