한글에서 초성 뽑아내기 방법은?
글쓴이: shean0 / 작성시간: 월, 2003/02/10 - 9:07오후
안녕하세요..
임의의 텍스트에서 초성을 뽑아서 DB에 저장하려구 합니다.
예를들어 "가나다" ==>"ㄱㄴㄷ"
그런데... 이것의 방법을 그냥 간단하게 매 2byte씩 마다 & 0xF 를 하여서
뽑을려구 하였더니...안 되더군요..
한글의 초성을 어떻게 뽑아내죠??
그리고 임의의 첫 글자가 한글인지? 아니면 영어인지 구별하는 방법은?
일단 제 생각에는 tmp[0] & 0xF 해서 bit로 '100' 이상이면 한글이다
즉 int_c=(tmp[0] & 0xF)
if(int_c >= 6) 한글이다
else 한글이 아니다
이렇게 생각하고 있습니다.
관련된 자료와...팁을 부탁드립니다.
Forums:
한글처리
한글코드 변환에 대해서 검색해 보시면 괜찮은 답을 구하실 수 있을 것 같군요.
일단 한글영역과 자음만 표시하는 영역이 다르기 때문에.
한글영역에서 자음으로 변환하는 과정이 추가적으로 요구 될 것 같습니다.
한글과 코드( http://trade.chonbuk.ac.kr/~leesl/code/ ) 페이지를 살펴보시면 도움이 될 것 같습니다.
유니코드로 일단 변환하세요.
iconv 등을 이용해 유니코드의 Hangul Syllables 영역으로 바꾼 다음
수식으로 간단하게 Hangul Jamo를 뽑아낼 수 있습니다.
http//gnome.or.kr/moin.cgi/HangulSyllables
안녕하세요..말씀하신 문서를 보면서..고민중에 있습니다.[quote]
안녕하세요..말씀하신 문서를 보면서..고민중에 있습니다.
일단 제가 한것을 말씀드리면. (아 환경은
) 입니다.이런식으로 로그가 만들어 지더군요..
( buf[i] & 0x80 )으로 매 2바이트씩(첫바이트/2바이트중)하여서 결과가 나오면 한글로 간주하고 다음( i+1)[즉2방이트]를 한글로 간주한다.
첫번째 buf[i]가 "자음"이다
라고 결론을 낼려구 합니다. 이것은 일견 맞게 생각되구요..
중간에 space나 영어 숫자가 나오면 1칸 건너뛰고 다음바이트를 다시 검색하도록 할 것입니다.
여기서 문제에 봉착하였습니다.
일단 한글에서 자음을 찿는것은 2바이트 마다 첫 바이트를 자음으로 간주한다
라고 하면 될듯 한데..
그 바이트를 어떻게 이용해서 DB(오라클) 에 넣어야 할지...
일단은 insert into AAA ( name_han_first ) value ( 'ㄱㄴㄷㄹ' ); 이렇게 생각하고 있습니다.
조언을 부탁드리며
소스를 올릴 필요는 없지만..보시면..어떤 의도인지 더 잘 아시겟죠?
다음 추가로 조언부탁들릴때는 proc로 짠것으로 올리겠습니다.
언제나 즐프를 꿈꾸며~
[quote]일단 한글에서 자음을 찿는것은 2바이트 마다 첫
완성형 한글은 자체에 자소 정보가 없기 때문에 자소 정보를 추출할 수 있는 한글 코드로 변환해서 추출해야 합니다. 위에 kz님이 말씀하신 것처럼 유니코드로 변환한 뒤 공식을 이용해서 자음을 뽑아내는 게 가장 쉬운 방법일 듯 합니다. 유니코드 한글은 완성형겸 조합형이라는 특이한(?) 성질이 있어서 여러모로 좋습니다.
조합형으로 변환해야 할 것 같은데요...
방준영님 말씀대로 한글 코드 변환이 필수적인것 같네요.
일단 완성형은... 별도로 테이블을 가지고 있지 않는 이상은
힘들것 같구요. 유니코드로 변환하면 초성은 그렇다처도
중성이나 종성을 뽑아내기는 쉽지 않을 것 같습니다.
뭐, 필요 없다면 그정도로 상관없겠지만요.
중성이나 종성까지도 필요하다면 별수 없이 조합형으로
변환하는 수 밖에 없을 것 같죠...
더불어 DB에 저장하는 것도 제가 보기은 'ㄱ'을 저장하는
것 보다는 각 자모에 대응되는 숫자를 저장하는게
더 유용하지 않을까 생각되네요.
걱정은... 문제의 확장 완성형인데요... 이거 참 걱정되는
코드죠... 지원할 수도 없고 안할 수도 없고... 참 애매합니다...
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
재미없는 일은 하지 않겠다는 인간 쓰레기. ㅡ,.ㅡ;;
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
오해하셨네요.
유니완성형에서 첫소리만 뽑아낼 수 있는 건 아닙니다. 그렇게 허술하면 그렇게 유명하겠습니까? )
확장완성형은 유니코드를 지원하면 그냥 해결되는 문제입니다.
몰랐군요.
너무 오래된 이야기였었나봅니다. -.-;
유니코드 2.0에서 지웠됐다고 나오네요.
(음.. 그럼 내가 봤던 문서들은 뭐야... -.-; 95년에 제정된거라는데... -.-;)
프로그래머가 게을러야 할 때가 있고 게을러서는 안되는
영역도 있나봅니다....
(죽자, 죽어... -.-;)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
재미없는 일은 하지 않겠다는 인간 쓰레기. ㅡ,.ㅡ;;
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
ㅋ
ㅆㅂ=띠발
댓글 달기