Web Analytics Made Easy - Statcounter

생각나는대로

R로 비-ASCII 문자처리 답답해 😠

sleepy_wug 2024. 5. 9. 15:38

Hangul to IPA 이슈: 북한을 [pukɑn]으로 잘못 전사한다. 

 

디버깅을 하려고 시도하는데 진짜 정신나갈 것 같다. R은 그저 숫자를 통계처리할 때만 쓰기 때문에 RStudio 없이 그냥 통상적인 IDE에서 R plugin 통해 쓰는데, 문자열 처리가 진짜 고통스럽다.

 

이 기회에 아예 파이썬으로 포팅해버리고 싶다. 솔직히 말해서 디버깅하는 시간보다 새로 파이썬으로 다시 짜는 게 더 빠를 지경이다. 만약 Hangul to IPA 를 파이썬으로 다시 한다면 "둘뚤툴"(실시간으로 한국어 최소대립쌍 산출)처럼 좀더 아동틱(?)하거나 모바일 친화적인 UI를 만들까 하는 생각이 있다. (하지만 귀찮아서 안하겠지) 

 

파이썬처럼 UTF-8 기본으로 딱 정리되어 있으면 세상 편할텐데 R에서 문자열 처리할 때 늘 인코딩이 골치인 걸 보면, 애초에 R은 그 목적으로 사용되는 언어가 아닌 게 더더욱 확실해지는 듯하다.

 

하지만 반대로 파이썬에서 데이터 시각화 하려고 하면 답답.... 하기는 개뿔 잘 될 것같다. (하지만 배운게 도둑질이라고 R + Shiny 조합으로 데이터 시각화하는 인이 들어서 다른 방법은 시도조차 하기가 귀찮다)

 

근데 엄밀히 생각해보면 내가 굳이 Hangul to IPA를 유지보수해야 할 이유는 없다. 난 이미 답답해서 한글 -> IPA전사할 때 파이썬으로 해치워버린 지 오래됐다. (사실 IPA로의 전사보다는 박나영 선생님 식 전사체계로 전사를 더 자주한다. 내가 게으른건지 그냥 ascii 내에서 쇼부보는 게 맘편하다.ㅋㅋ)

 

목마른사람은 우물을 팔 것이고 내 입장에서는 목 안마른 데 자원봉사를 하면서 굳이 스트레스 받을 필요는 없다.

 

어쨌든 이건, 한 1시간정도 디버깅 위해 로컬에서 돌리려니 당장 인코딩때문에 스크립트 자체가 안 돌아가 화나서 쓰는 글. 언제나 우선순위는 내 밥상에 반찬 올려주는 RAship이지 자원봉사는 자원봉사일 따름이다.

 

 

R broken inside
R은 뭔가 잘못됐어

 

 

//

추가 (2024-05-10):

+ 나는 집착하는 성격인가보다. 금요일 저녁이 되었고, 일단 주말동안만 잡고 있어보기로 했다. 휘뚜루마뚜루 hanja_tools (漢字 -> 한자 변환)는 포팅을 마쳤다. 가장 주변부부터 핵심기능까지 차근차근 포팅을 해볼 생각이다. 작은 성취는 도파민을 주는데, 도파민 뿜뿜하는 계기가 될 것 같다.

+ 규칙적용 안하고 자모변환하는 데까지 마쳤다. 순수하게 한글->한자 변환하고 한글->자모 변환하는 데까진 완성.

+ New branch https://github.com/stannam/hangul_to_ipa/tree/porting_to_python

 

추가 (2024-05-11):

+ 집밖으로 나와 다른 작업을 하려고 했는데, 마치 마시다 만 커피처럼 자꾸 이 프로젝트가 생각나는 것이었다. 나는 밖에선 맥북을 사용하고 집에서는 Windows PC를 쓴다. Hangul-to-IPA 디버깅도 집에서 Windows PC로 하던 일이었다.

+ 할튼, 포팅 작업을 조금만 더 해볼까 하는 생각에 맥북으로 repo를 clone했다. 그리고 파이썬으로 코딩을 하다가, 도저히 내가 짠 R 스크립트가 뭔짓을 하는지 모르겠어서 돌려보고 싶어졌다. 그래서 R interpreter plugin을 깔고 스크립트를 돌렸는데, 인코딩 문제없이 깔끔하게 돌아갔다.

+ 이왕 이렇게 된 김에 R 디버깅으로 선회하였다. 문제는 간단했다. 이 프로그램은 규칙을 적용할지 말지 여부를 판단하기 위해 (그리고 규칙을 어디에 적용할지 판단하기 위해) 자모형과 CV형 이렇게 두 variable에 의지한다. 따라서 어떤 규칙이 적용되었으면 자모형과 CV형 두 변수를 업데이트해주어야 한다. 특히 그 규칙이 분절음의 개수를 줄이거나 늘릴 경우에는 반드시 업데이트가 필요하다.

+ 그런데 Aspiration 규칙이 적용된 다음 자모형만 업데이트 되고 CV형은 업데이트하지 않은 것이다. 즉, ㅂㅜㄱㅎㅏㄴ은 규칙 적용하면 ㄱㅎ가 fusion되어 ㅋ가 된다. 분절음 개수도 6개에서 5개로 줄어든다. 따라서 규칙적용은 CV형을 CVCCVC에서 CVCVC로 줄여야 한다. 그러나 CV형을 업데이트하지 않은 것이다.

+ 이게 당장은 문제가 되지 않는데, Coda neutralization 적용할 때 문제가 된 것이다. 이 규칙은 소위 '말음법칙'인데, 종성에 불가능한 자음을 가능한 자음으로 바꾸는 것이다. 자음이 어말이나 다른 자음에 선행하면 종성이라고 판단한다. 그런데 Aspiration 의 출력이자 Coda neutralization의 입력이 아래와 같으니

 

자모  
CV C V C C V C

 

coda neutralization의 입장에서는 빨간색 C 앞에 오는 파랑색 ㅋ를 중화시킬 필요가 있었던 것. 이것은 마치 "부엌층" 에서 제2음절이 "억"이 되는 것과 같다. ㅋ뒤에 자음이 오니 ㄱ로 중화한 것. 그래서 cv 업데이트하는 라인 하나 넣었더니 문제해결.

 

+ 별개로 R코드가 너무 걸레짝이 되어버려서 진짜 시간 나는데로 python으로 포팅을 해버려야겠다. R의 인코딩 문제는, 짐작건대, 내 Windows 머신에서 system-wide locale로 utf-8을 쓰지 않고, R에서 locale override 못한 결과가 아닌가한다. 즉, 띨빡한 R과 불친절한 Windows 그리고 무능한 개발자의 삼위일체였던 것.

 


  • 글이 유익하셨다면 후원해주세요. Toss (국내결제) || BuyMeACoffee(해외결제카드필요)
  • 아래에 댓글창이 열려있습니다. 로그인 없이도 댓글 다실 수 있습니다.
  • 글과 관련된 것, 혹은 글을 읽고 궁금한 것이라면 무엇이든 댓글을 달아주세요.
  • 반박이나 오류 수정을 특히 환영합니다.
  • 로그인 없이 비밀글을 다시면, 거기에 답변이 달려도 보실 수 없습니다. 답변을 받기 원하시는 이메일 주소 등을 비밀글로 남겨주시면 이메일로 답변드리겠습니다.