•what-studio/profiling •sublee/trueskill •what-studio/tossi •hangulize/hangulize 오픈소스 2744 385 110 53 개수는 2018년 9월 6일 기준 제가 주축이 된 오픈소스 프로젝트 중에 별이 많은 것만 한 번 추려봤는데
•what-studio/profiling •sublee/trueskill •what-studio/tossi •hangulize/hangulize 오픈소스 2744 385 110 53 개수는 2018년 9월 6일 기준 이 중에선 가장 별이 적은 〈한글라이즈〉가 오늘 발표의 주제입니다.
제1항 외래어는 국어의 현용 24 자모만으로 적는다. 제2항 외래어의 1 음운은 원칙적으로 1 기호로 적는다. 제3항 받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다. 제4항 파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다. 제5항 이미 굳어진 외래어는 관용을 존중하되, 그 범위와 용례는 따로 정한다. 외래어 표기법 자음 반모음 모음 국제 음성 기호 한글 국제 음성 기호 한글 국제 음성 기호 한글 모음 앞 자음 앞 또는 어 말 p ㅍ ㅂ, 프 j 이 i 이 b ㅂ 브 ɥ 위 y 위 t ㅌ ㅅ, 트 w 오, 우 e 에 d ㄷ 드 φ 외 k ㅋ ㄱ, 크 ɛ 에 g ㄱ 그 ɛ̃ 앵 f ㅍ 프 œ 외 v ㅂ 브 œ̃ 욍 θ ㅅ 스 æ 애 ð ㄷ 드 a 아 s ㅅ 스 ɑ 아
제1항 외래어는 국어의 현용 24 자모만으로 적는다. 제2항 외래어의 1 음운은 원칙적으로 1 기호로 적는다. 제3항 받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다. 제4항 파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다. 제5항 이미 굳어진 외래어는 관용을 존중하되, 그 범위와 용례는 따로 정한다. 외래어 표기법 자음 반모음 모음 국제 음성 기호 한글 국제 음성 기호 한글 국제 음성 기호 한글 모음 앞 자음 앞 또는 어 말 p ㅍ ㅂ, 프 j 이 i 이 b ㅂ 브 ɥ 위 y 위 t ㅌ ㅅ, 트 w 오, 우 e 에 d ㄷ 드 φ 외 k ㅋ ㄱ, 크 ɛ 에 g ㄱ 그 ɛ̃ 앵 f ㅍ 프 œ 외 v ㅂ 브 œ̃ 욍 θ ㅅ 스 æ 애 ð ㄷ 드 a 아 s ㅅ 스 ɑ 아 외래어 표기법은 이런 규칙집으로 이뤄져 있습니다.
제1항 외래어는 국어의 현용 24 자모만으로 적는다. 제2항 외래어의 1 음운은 원칙적으로 1 기호로 적는다. 제3항 받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다. 제4항 파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다. 제5항 이미 굳어진 외래어는 관용을 존중하되, 그 범위와 용례는 따로 정한다. 외래어 표기법 자음 반모음 모음 국제 음성 기호 한글 국제 음성 기호 한글 국제 음성 기호 한글 모음 앞 자음 앞 또는 어 말 p ㅍ ㅂ, 프 j 이 i 이 b ㅂ 브 ɥ 위 y 위 t ㅌ ㅅ, 트 w 오, 우 e 에 d ㄷ 드 φ 외 k ㅋ ㄱ, 크 ɛ 에 g ㄱ 그 ɛ̃ 앵 f ㅍ 프 œ 외 v ㅂ 브 œ̃ 욍 θ ㅅ 스 æ 애 ð ㄷ 드 a 아 s ㅅ 스 ɑ 아 국립국어원 홈페이지에서 누구나 자유롭게 볼 수 있죠.
제1항 외래어는 국어의 현용 24 자모만으로 적는다. 제2항 외래어의 1 음운은 원칙적으로 1 기호로 적는다. 제3항 받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다. 제4항 파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다. 제5항 이미 굳어진 외래어는 관용을 존중하되, 그 범위와 용례는 따로 정한다. 외래어 표기법 자음 반모음 모음 국제 음성 기호 한글 국제 음성 기호 한글 국제 음성 기호 한글 모음 앞 자음 앞 또는 어 말 p ㅍ ㅂ, 프 j 이 i 이 b ㅂ 브 ɥ 위 y 위 t ㅌ ㅅ, 트 w 오, 우 e 에 d ㄷ 드 φ 외 k ㅋ ㄱ, 크 ɛ 에 g ㄱ 그 ɛ̃ 앵 f ㅍ 프 œ 외 v ㅂ 브 œ̃ 욍 θ ㅅ 스 æ 애 ð ㄷ 드 a 아 s ㅅ 스 ɑ 아 하지만 워낙 복잡해서 아무리 잘 따르려 노력해도 틀리는 경우가 많습니다.
제92차 정부·언론외래어심의공동위원회 심의 결정안 (인명 52건, 일반용어 1건-재심의 2건) • 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아 여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자 인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을 강조하는 디자인으로 유명함. • 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA) 회장(1974~1998). 브라질 인. • 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사. 일본 간사이(關西)학원 원장(2007. 4.~ ).
제92차 정부·언론외래어심의공동위원회 심의 결정안 (인명 52건, 일반용어 1건-재심의 2건) • 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아 여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자 인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을 강조하는 디자인으로 유명함. • 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA) 회장(1974~1998). 브라질 인. • 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사. 일본 간사이(關西)학원 원장(2007. 4.~ ). 이건 외래어 심의위가 발표한 표기 심의 결정안 중 하나인데
제92차 정부·언론외래어심의공동위원회 심의 결정안 (인명 52건, 일반용어 1건-재심의 2건) • 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아 여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자 인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을 강조하는 디자인으로 유명함. • 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA) 회장(1974~1998). 브라질 인. • 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사. 일본 간사이(關西)학원 원장(2007. 4.~ ). 아버라, 암살러 그루블 심의위에서도 드물게 틀리는 경우가 있습니다.
제92차 정부·언론외래어심의공동위원회 심의 결정안 (인명 52건, 일반용어 1건-재심의 2건) • 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아 여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자 인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을 강조하는 디자인으로 유명함. • 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA) 회장(1974~1998). 브라질 인. • 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사. 일본 간사이(關西)학원 원장(2007. 4.~ ). 아버라, 암살러 그루블 원 단어의 발음을 잘못 유추하는 바람에 표기를 잘못 정하는 경우가 종종 있다고 해요.
정기적으로 회의를 열어 용례를 정하는 것으 로는 한계가 있다. 외래어 표기 심의 방식이 자동화되어 한글로 표기하고 싶은 외국어를 입력하자마자 한글 표기가 나와야 한다. http://iceager.egloos.com/2610028 8년 전, 종성 님은 블로그에 이런 글을 쓰셨어요.
정기적으로 회의를 열어 용례를 정하는 것으 로는 한계가 있다. 외래어 표기 심의 방식이 자동화되어 한글로 표기하고 싶은 외국어를 입력하자마자 한글 표기가 나와야 한다. http://iceager.egloos.com/2610028 정기적으로 회의를 열어 용례를 정하는 것으로는 한계가 있다.
정기적으로 회의를 열어 용례를 정하는 것으 로는 한계가 있다. 외래어 표기 심의 방식이 자동화되어 한글로 표기하고 싶은 외국어를 입력하자마자 한글 표기가 나와야 한다. http://iceager.egloos.com/2610028 한글로 표기하고 싶은 외국어를 입력하자마자 한글 표기가 나와야 한다.
정기적으로 회의를 열어 용례를 정하는 것으 로는 한계가 있다. 외래어 표기 심의 방식이 자동화되어 한글로 표기하고 싶은 외국어를 입력하자마자 한글 표기가 나와야 한다. http://iceager.egloos.com/2610028 그런 전 종성 님의 이 글을 보고 깊은 감명을 받았어요.
정기적으로 회의를 열어 용례를 정하는 것으 로는 한계가 있다. 외래어 표기 심의 방식이 자동화되어 한글로 표기하고 싶은 외국어를 입력하자마자 한글 표기가 나와야 한다. http://iceager.egloos.com/2610028 외래어 표기법이 자동화되면 당장 저에게도 도움될 것 같았고
정기적으로 회의를 열어 용례를 정하는 것으 로는 한계가 있다. 외래어 표기 심의 방식이 자동화되어 한글로 표기하고 싶은 외국어를 입력하자마자 한글 표기가 나와야 한다. http://iceager.egloos.com/2610028 그걸 만드는 과정도 굉장히 재밌어 보였죠.
gore> :import "github.com/hangulize/hangulize" gore> hangulize.Hangulize("rus", "Владивосто́ к") "블라디보스토크" 새 한글라이즈 2018년 5월- "새 한글라이즈"는 8년 만인 지난 5월부터 만들었어요.
gore> :import "github.com/hangulize/hangulize" gore> hangulize.Hangulize("rus", "Владивосто́ к") "블라디보스토크" 새 한글라이즈 2018년 5월- 옛 한글라이즈처럼 Go 환경에서 쓸 수 있는 간단한 라이브러리죠.
•패턴 찾아 바꾸기 •표음성 강화 2단계: Rewrite Rewrite Transcribe Phonemize si chuan "{s}i" -> "i," si, chuan "{h}uan" -> "wan" si, chwan "n$" -> "n," si, chwan, 두 번째 Rewrite 단계에선 일련의 패턴 찾아 바꾸기로
•패턴 찾아 바꾸기 •표음성 강화 2단계: Rewrite Rewrite Transcribe Phonemize si chuan "{s}i" -> "i," si, chuan "{h}uan" -> "wan" si, chwan "n$" -> "n," si, chwan, 따라서 소리글자라고 해도 실제 소리에 1:1 대응되는 경우는 별로 없는데
•패턴 찾아 바꾸기 •표음성 강화 2단계: Rewrite Rewrite Transcribe Phonemize si chuan "{s}i" -> "i," si, chuan "{h}uan" -> "wan" si, chwan "n$" -> "n," si, chwan, 한글로 옮기려면 의미가 아닌 발음이 필요하니까
•패턴 찾아 바꾸기 •표음성 강화 2단계: Rewrite Rewrite Transcribe Phonemize si chuan "{s}i" -> "i," si, chuan "{h}uan" -> "wan" si, chwan "n$" -> "n," si, chwan, 이 단계에서 철자로부터 발음을 최대한 유추합니다.
아제르바이잔어 벨라루스어 불가리아어 카탈로니아어 체코어 중국어 웨일스어 독일어 그리스어 에스페란토어 에스토니아어 핀란드어 고대 그리스어 세르보크로아트어 헝가리어 아이슬란드어 이탈리아어 일본어 일본어최영애-김용옥 조지아어제1안 조지아어제2안 라틴어 라트비아어 리투아니아어 마케도니아어 네덜란드어 폴란드어 포르투갈어 브라질 포르투갈어 루마니아어 러시아어 슬로바키아어 슬로베니아어 스페인어 알바니아어 스웨덴어 터키어 우크라이나어 베트남어 웨일스어중세 한글라이즈엔 현재 일본어, 헝가리어 등 총 40개의 전사 규칙이 들어있어요.
/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~- ]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d- \x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9- ]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0- 5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0- 9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e- \x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/ 이메일 정규표현식 http://emailregex.com/ 텍스트 매칭하는 데에 다들 한 번 쯤은 써보셨을 것 같아요.
Thompson 류 "aaa" a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 그 다음 앞쪽 가능성이 참일 경우에 뒤따르게 될 다음 가능성을 두 번째 "a"에 매치해보고
Thompson 류 "aaa" a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a 세 번째 "a"에서도 같은 일을 반복합니다.
Thompson 류 "aaa" a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a 매치! 그러면 패턴 끝까지 도달한 가능성이 하나 나타나는데
Thompson 류 "aaa" a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a 매치! 바로 매치를 찾은 것이죠.
Thompson 류 "aaa" a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a 매치! 퇴각검색 방식을 쓰는 Spencer 류에서와 달리
Thompson 류 "aaa" a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a 매치! Thompson 류에서 대상 문자열의 각 글자는 단 한 번씩만 읽히는데
Thompson 류 "aaa" a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a 매치! 즉, 되돌아가는 일 없이 전진만 하는 것입니다.
Spencer 류 Thompson 류 "aaa" "aaa" a? a? a? aaa a? a? aaa a? aaa a? aaa aaa aaa aaa aaa 2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a x+1
Spencer 류 Thompson 류 "aaa" "aaa" a? a? a? aaa a? a? aaa a? aaa a? aaa aaa aaa aaa aaa 2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a x+1 이 벤치마크에서 Spencer 류가 탐색하는 가능성은 2ˣ개인데 반해
Spencer 류 Thompson 류 "aaa" "aaa" a? a? a? aaa a? a? aaa a? aaa a? aaa aaa aaa aaa aaa 2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a x+1 그래서 Spencer 류의 탐색 횟수는 지수적으로 증가하고
Spencer 류 Thompson 류 "aaa" "aaa" a? a? a? aaa a? a? aaa a? aaa a? aaa aaa aaa aaa aaa 2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa a?a?a?aaa 첫 번째 a 두 번째 a 세 번째 a x+1 이 때문에 특정한 경우에 둘 사이에서 극단적인 성능차이를 볼 수 있습니다.
"foo{bar}" foo인데 bar 바로 전 "foo{~bar}" foo인데 bar가 아닌 것 바로 전 "{bar}foo" foo인데 bar 바로 뒤 "{~bar}foo" foo인데 bar가 아닌 것 바로 뒤 "foo{bar}"라고 쓰면 "bar" 바로 앞에 있는 "foo"에만 매치되고
"foo{bar}" foo인데 bar 바로 전 "foo{~bar}" foo인데 bar가 아닌 것 바로 전 "{bar}foo" foo인데 bar 바로 뒤 "{~bar}foo" foo인데 bar가 아닌 것 바로 뒤 "foo{~bar}"라고 쓰면 "bar"가 아닌 것 바로 앞에 있는 "foo"에만 매치되죠.
"foo{bar}" foo인데 bar 바로 전 "foo{~bar}" foo인데 bar가 아닌 것 바로 전 "{bar}foo" foo인데 bar 바로 뒤 "{~bar}foo" foo인데 bar가 아닌 것 바로 뒤 "{bar}foo", "{~bar}foo" 처럼 "{}"가 앞에 올 수도 있습니다.
"foo{~bar}" "{~bar}foo" 네거티브 룩어라운드 대안 /()(foo)()/ /()(foo)()/ 뒤쪽이 /^bar/이면 건너뛰기 앞쪽이 /bar$/이면 건너뛰기 배제 패턴 그러고 나서 "{~}" 속에 있는 배제 패턴을 매치됐던 곳 앞뒤에 한 번 더 매치시켜 봅니다.
"foo{~bar}" "{~bar}foo" 네거티브 룩어라운드 대안 /()(foo)()/ /()(foo)()/ 뒤 3글자가 /^bar/이면 건너뛰기 앞 3글자가 /bar$/이면 건너뛰기 bar에 맞춰서 길이 제한 배제 패턴이 매치될 수 있을 만한 최대 길이로 제한하고 있어요.
syntax.Parse("a?|b", syntax.Perl) import "regexp/syntax" Alternate '|' Literal 'b' Quest '?' Literal 'a' regexp/syntax 표준 라이브러를 쓰면 정규식을 해석한 추상구문트리를 얻을 수 있는데
• 한글 판별 •자모 분리 및 조립 • 한글 획 세기 import "github.com/suapapa/go_hangul" hangul.Join('ㅎ', 'ㅏ', 'ㄴ') == '한' hangul.Split('한') == 'ㅎ', 'ㅏ', 'ㄴ' hangul.IsJaeum('ㅋ') == true hangul.IsMoeum('ㅋ') == false 호민 님 감사합니다. 이 라이브러리엔 한글을 다루기 위한 유용한 기능이 많이 있어요.
•중국 한자를 병음으로 변환 •단순 사전이라 빠르다. •의외로 용량도 안 크다. (800KB) import "github.com/mozillazg/go-pinyin" args := pinyin.NewArgs() pinyin.SinglePinyin('青', args) == "Qīng" "go-pinyin"이라는 라이브러리를 쓰면 손쉽게 병음을 구할 수 있습니다.
•중국 한자를 병음으로 변환 •단순 사전이라 빠르다. •의외로 용량도 안 크다. (800KB) import "github.com/mozillazg/go-pinyin" args := pinyin.NewArgs() pinyin.SinglePinyin('青', args) == "Qīng" 이 라이브러리는 단순한 사전이어서 속도도 빠르고
•중국 한자를 병음으로 변환 •단순 사전이라 빠르다. •의외로 용량도 안 크다. (800KB) import "github.com/mozillazg/go-pinyin" args := pinyin.NewArgs() pinyin.SinglePinyin('青', args) == "Qīng" 의외로 데이터도 별로 크지 않아서 800KB 밖에 되지 않습니다.
陸カ審月名検ナレチカ可栄1経断ヒヲカツ宅意へざン丁可ホ 載省末応をじいく行昧7年てぼかせ答予シ告断ハヌカサ武元 争ちぞけみ。26丈なづ広靱増理ソヒタセ士定ワオトヘ整判 べっ集遺ワサヤイ聞出じどれな勝際ずンれ線芸せ年今ロエヒ 常政よのトッ上日やみぎね告創ゅど。作ケヨワ逮氏ッじルへ 地能どぜ祉83派あ織口ケ更探づを車下べひく毎旅まひづゅ意 幕づ務鋼けぶ要情ハリス択著乞伍トごへれ。 일본어 형태소 분석 일본어 로렘 입숨
陸カ審月名検ナレチカ可栄1経断ヒヲカツ宅意へざン丁可ホ 載省末応をじいく行昧7年てぼかせ答予シ告断ハヌカサ武元 争ちぞけみ。26丈なづ広靱増理ソヒタセ士定ワオトヘ整判 べっ集遺ワサヤイ聞出じどれな勝際ずンれ線芸せ年今ロエヒ 常政よのトッ上日やみぎね告創ゅど。作ケヨワ逮氏ッじルへ 地能どぜ祉83派あ織口ケ更探づを車下べひく毎旅まひづゅ意 幕づ務鋼けぶ要情ハリス択著乞伍トごへれ。 일본어 형태소 분석 일본어 로렘 입숨 다음은 일본어인데
陸カ審月名検ナレチカ可栄1経断ヒヲカツ宅意へざン丁可ホ 載省末応をじいく行昧7年てぼかせ答予シ告断ハヌカサ武元 争ちぞけみ。26丈なづ広靱増理ソヒタセ士定ワオトヘ整判 べっ集遺ワサヤイ聞出じどれな勝際ずンれ線芸せ年今ロエヒ 常政よのトッ上日やみぎね告創ゅど。作ケヨワ逮氏ッじルへ 地能どぜ祉83派あ織口ケ更探づを車下べひく毎旅まひづゅ意 幕づ務鋼けぶ要情ハリス択著乞伍トごへれ。 일본어 형태소 분석 일본어 로렘 입숨 일본어는 특히 처리하기 까다로웠던 것 같아요.
陸カ審月名検ナレチカ可栄1経断ヒヲカツ宅意へざン丁可ホ 載省末応をじいく行昧7年てぼかせ答予シ告断ハヌカサ武元 争ちぞけみ。26丈なづ広靱増理ソヒタセ士定ワオトヘ整判 べっ集遺ワサヤイ聞出じどれな勝際ずンれ線芸せ年今ロエヒ 常政よのトッ上日やみぎね告創ゅど。作ケヨワ逮氏ッじルへ 地能どぜ祉83派あ織口ケ更探づを車下べひく毎旅まひづゅ意 幕づ務鋼けぶ要情ハリス択著乞伍トごへれ。 일본어 형태소 분석 일본어 로렘 입숨 일본어에선 뜻글자인 한자와 소리글자인 가나를 섞어 씁니다.
陸カ審月名検ナレチカ可栄1経断ヒヲカツ宅意へざン丁可ホ 載省末応をじいく行昧7年てぼかせ答予シ告断ハヌカサ武元 争ちぞけみ。26丈なづ広靱増理ソヒタセ士定ワオトヘ整判 べっ集遺ワサヤイ聞出じどれな勝際ずンれ線芸せ年今ロエヒ 常政よのトッ上日やみぎね告創ゅど。作ケヨワ逮氏ッじルへ 地能どぜ祉83派あ織口ケ更探づを車下べひく毎旅まひづゅ意 幕づ務鋼けぶ要情ハリス択著乞伍トごへれ。 일본어 형태소 분석 일본어 로렘 입숨 그리고 띄어쓰기를 사용하지 않아요.
陸カ審月名検ナレチカ可栄1経断ヒヲカツ宅意へざン丁可ホ 載省末応をじいく行昧7年てぼかせ答予シ告断ハヌカサ武元 争ちぞけみ。26丈なづ広靱増理ソヒタセ士定ワオトヘ整判 べっ集遺ワサヤイ聞出じどれな勝際ずンれ線芸せ年今ロエヒ 常政よのトッ上日やみぎね告創ゅど。作ケヨワ逮氏ッじルへ 地能どぜ祉83派あ織口ケ更探づを車下べひく毎旅まひづゅ意 幕づ務鋼けぶ要情ハリス択著乞伍トごへれ。 일본어 형태소 분석 일본어 로렘 입숨 여기 붙여 둔 문단은 일본어 로렘 입숨인데 보시다시피 띄어쓰기가 없습니다.
陸カ審月名検ナレチカ可栄1経断ヒヲカツ宅意へざン丁可ホ 載省末応をじいく行昧7年てぼかせ答予シ告断ハヌカサ武元 争ちぞけみ。26丈なづ広靱増理ソヒタセ士定ワオトヘ整判 べっ集遺ワサヤイ聞出じどれな勝際ずンれ線芸せ年今ロエヒ 常政よのトッ上日やみぎね告創ゅど。作ケヨワ逮氏ッじルへ 地能どぜ祉83派あ織口ケ更探づを車下べひく毎旅まひづゅ意 幕づ務鋼けぶ要情ハリス択著乞伍トごへれ。 일본어 형태소 분석 일본어 로렘 입숨 전각문자 마침표와 띄어쓰기처럼 보이는 이것도 사실은 전각문자 1개죠.
Hangulize("jpn", "任天堂") Hangulize("jpn", "新海誠") Hangulize("jpn", "天空の城ラピュタ") == "닌텐도" == "신카이 마코토" == "덴쿠노시로라퓨타" kagome 덕분에 새 한글라이즈는 웬만한 일본어 문장까지도 지원할 수 있게 됐습니다.
import "github.com/hangulize/hangulize" import "github.com/hangulize/hangulize/phonemize/furigana" func main() { hangulize.UsePhonemizer(&furigana.P) fmt.Println(hangulize.Hangulize("jpn", "秋葉原")) // Output: 아키하바라 } 플러그인 직접 UsePhonemizer를 호출해야만 중국어와 일본어도 제대로 다룰 수 있습니다.
// $ go test -run TestLang/ita func TestLang(t *testing.T) { t.Run("jpn", testJpn) t.Run("chi", testChi) t.Run("ita", testIta) } 서브테스트 testing에서 인상적인 점 중 하나는 바로 서브테스트 기능이었어요.
// $ go test -run TestLang/ita func TestLang(t *testing.T) { t.Run("jpn", testJpn) t.Run("chi", testChi) t.Run("ita", testIta) } 서브테스트 본격적인 서드파티 테스트 프레임워크에서나 지원할 법한 걸
// $ go test -run TestLang/ita func TestLang(t *testing.T) { t.Run("jpn", testJpn) t.Run("chi", testChi) t.Run("ita", testIta) } 서브테스트 한글라이즈에선 각 언어 별 용례집을 검증하는 테스트를
// $ go test -run TestLang/ita func TestLang(t *testing.T) { t.Run("jpn", testJpn) t.Run("chi", testChi) t.Run("ita", testIta) } 서브테스트 이런 식으로 서브테스트를 이용해 만들었습니다.
// $ go test -bench . // BenchmarkF 100 1078834 ns/op func BenchmarkF(b *testing.B) { for i := 0; i < b.N; i++ { f() } } 벤치마크 또 벤치마크 기능까지 제공하는 점도 신선했는데
// $ go test -bench . // BenchmarkF 100 1078834 ns/op func BenchmarkF(b *testing.B) { for i := 0; i < b.N; i++ { f() } } 벤치마크 "Benchmark"로 시작하는 함수에서 testing.B를 인자로 받아
// $ go test -bench . // BenchmarkF 100 1078834 ns/op func BenchmarkF(b *testing.B) { for i := 0; i < b.N; i++ { f() } } 벤치마크 b.N바퀴 도는 반복문 코드를 작성하는 식으로 만들더라고요.
// $ go test -bench . // BenchmarkF 100 1078834 ns/op func BenchmarkF(b *testing.B) { for i := 0; i < b.N; i++ { f() } } 벤치마크 테스트 실행할 때 "-bench" 옵션을 지정하면
// $ go test -bench . // BenchmarkF 100 1078834 ns/op func BenchmarkF(b *testing.B) { for i := 0; i < b.N; i++ { f() } } 벤치마크 벤치마크를 돌려본 후 루프 한 바퀴에 얼마나 걸렸는지 알려줍니다.
func BenchmarkF(b *testing.B) { b.Run("1", genBenchmarkF(1)) b.Run("10", genBenchmarkF(10)) b.Run("100", genBenchmarkF(100)) b.Run("1000", genBenchmarkF(1000)) } 서브벤치마크 BenchmarkF/1 BenchmarkF/1000 시간 벤치마크에서도 서브테스트와 같은 방식으로 서브벤치마크를 만들 수 있는데
func BenchmarkF(b *testing.B) { b.Run("1", genBenchmarkF(1)) b.Run("10", genBenchmarkF(10)) b.Run("100", genBenchmarkF(100)) b.Run("1000", genBenchmarkF(1000)) } 서브벤치마크 BenchmarkF/1 BenchmarkF/1000 시간 덕분에 알고리즘의 시간복잡도에 더 집중할 수 있었고
import "github.com/stretchr/testify/assert" func TestF(t *testing.T) { assert.Equal(t, 42, f()) assert.NotEqual(t, 21, f()) } 전 테스트케이스를 좀 더 편하게 쓰기 위해 서드파티 라이브러리인 "testify"를 쓰고 있습니다.
import "github.com/stretchr/testify/assert" func TestF(t *testing.T) { assert.Equal(t, 42, f()) assert.NotEqual(t, 21, f()) } 테스트 코드 작성도 훨씬 간편하고 테스트 실패 보고서도 읽기 더 좋더라고요.
$ go doc github.com/hangulize/hangulize PACKAGE DOCUMENTATION package hangulize import "github.com/hangulize/hangulize" Package hangulize transcribes non-Korean words into Hangul. "Hello!" -> "헬로!" Hangulize was inspired by Brian Jongseong Park (http://iceager.egloos.com/2610028). Based on this idea, the original 커맨드라인 문법이 이렇게 단순한 건 GoDoc이 웹 사이트 뿐만 아니라
$ go doc github.com/hangulize/hangulize PACKAGE DOCUMENTATION package hangulize import "github.com/hangulize/hangulize" Package hangulize transcribes non-Korean words into Hangul. "Hello!" -> "헬로!" Hangulize was inspired by Brian Jongseong Park (http://iceager.egloos.com/2610028). Based on this idea, the original 커맨드라인 커맨드라인 출력도 중요하게 다루기 때문이라고 합니다.
$ go test --- FAIL: ExampleComposeHangul_perfect (0.00s) got: 하느글라이스 want: 한글라이즈 FAIL exit status 1 FAIL github.com/hangulize/hangulize 1.949s 예제 코드 방부처리 예제 코드가 테스트 코드의 일종이다 보니 혹시 나중에 그 내용이 틀리게 되더라도
$ go test --- FAIL: ExampleComposeHangul_perfect (0.00s) got: 하느글라이스 want: 한글라이즈 FAIL exit status 1 FAIL github.com/hangulize/hangulize 1.949s 예제 코드 방부처리 테스트가 바로 실패해서 언제나 올바른 상태를 유지할 수 있도록 도와주더라고요.
- [한글라이즈 재제작기] 이흥섭(넥슨 왓 스튜디오) 〈한글라이즈〉는 외국어 단어를 외래어 표기법에 따라 한글로 옮겨 적어주는 도구입니다. "Espresso"를 "에스프레소"로, "東京 "을 "도쿄"로 변환할 수 있죠. 본래 Python으로 구현했던 한글라 이즈를 Go로 재구현하면서 겪은 경험과 느낀점을 공유합니다. Go에 근자감 어떻게 보면 근자감일 수도 있는데 결국 이 발표까지 하게 됐습니다.
- [한글라이즈 재제작기] 이흥섭(넥슨 왓 스튜디오) 〈한글라이즈〉는 외국어 단어를 외래어 표기법에 따라 한글로 옮겨 적어주는 도구입니다. "Espresso"를 "에스프레소"로, "東京 "을 "도쿄"로 변환할 수 있죠. 본래 Python으로 구현했던 한글라 이즈를 Go로 재구현하면서 겪은 경험과 느낀점을 공유합니다. Go에 근자감 이번 발표를 준비하면서
- [한글라이즈 재제작기] 이흥섭(넥슨 왓 스튜디오) 〈한글라이즈〉는 외국어 단어를 외래어 표기법에 따라 한글로 옮겨 적어주는 도구입니다. "Espresso"를 "에스프레소"로, "東京 "을 "도쿄"로 변환할 수 있죠. 본래 Python으로 구현했던 한글라 이즈를 Go로 재구현하면서 겪은 경험과 느낀점을 공유합니다. Go에 근자감 명확하게 정리하지 않고 넘어갔던 부분도 명확하게 이해할 수 있었고
- [한글라이즈 재제작기] 이흥섭(넥슨 왓 스튜디오) 〈한글라이즈〉는 외국어 단어를 외래어 표기법에 따라 한글로 옮겨 적어주는 도구입니다. "Espresso"를 "에스프레소"로, "東京 "을 "도쿄"로 변환할 수 있죠. 본래 Python으로 구현했던 한글라 이즈를 Go로 재구현하면서 겪은 경험과 느낀점을 공유합니다. Go에 근자감 한글라이즈를 더 많이 발전시킬 수 있는 기회가 되기도 했습니다.
- [한글라이즈 재제작기] 이흥섭(넥슨 왓 스튜디오) 〈한글라이즈〉는 외국어 단어를 외래어 표기법에 따라 한글로 옮겨 적어주는 도구입니다. "Espresso"를 "에스프레소"로, "東京 "을 "도쿄"로 변환할 수 있죠. 본래 Python으로 구현했던 한글라 이즈를 Go로 재구현하면서 겪은 경험과 느낀점을 공유합니다. Go에 근자감 발표 준비하는 동안 한글라이즈 코딩도 평소보다 더 많이 했던 것 같아요.