규칙에 매치되지 않는 문자

19 views
Skip to first unread message

Heungsub Lee

unread,
Dec 30, 2010, 2:14:42 AM12/30/10
to Hangulize
==> とうめい 고속도로
>> 'トウメイ 고속도로'
.. 'トウメi 고속도로'   rewrite   イ|ィ -> i
.. 'トuメi 고속도로'    rewrite   ウ|ゥ -> u
.. 'touメi 고속도로'    rewrite   ト -> to
.. 'toumei 고속도로'    rewrite   メ -> me
.. 'doumei 고속도로'    rewrite   ^t -> d
.. 'domei 고속도로'     remove    {u|o}u
.. '.omei 고속도로'     hangulize d -> ㄷ
.. '.o.ei 고속도로'     hangulize m -> ㅁ
.. '.o.e. 고속도로'     hangulize i -> ㅣ
.. '.o... 고속도로'     hangulize e -> ㅔ
.. '..... 고속도로'     hangulize o -> ㅗ
=> 도메이 

위 변환과정을 보면 "고속도로"는 매치되는 규칙이 없어서 결과에서 아예 제거되고 있습니다. 각 언어의 `special` 변수에 지정된 문자(기본값: .,;?~"()[]{})는 그대로 보존이 가능한데:

==> (gloria,)
>> '(gloria,)'
.. '#gl;oria##' rewrite   l{@|m,|n,} -> l;
.. '#gl,;oria##'        rewrite   l -> l,
.. '#gloria##'  remove    ,;
.. '#.loria##'  hangulize g -> ㄱ
.. '#..oria##'  hangulize l -> ㄹㄹ
.. '#..o.ia##'  hangulize r -> ㄹ
.. '#..o.i.##'  hangulize a -> ㅏ
.. '#..o...##'  hangulize i -> ㅣ
.. '#......##'  hangulize o -> ㅗ
=> (글로리아,)

이런 식이죠. `special`에 지정된 문자 이외의 아무 규칙에도 매치되지 않은 문자도 보존하는 것이 어떨까 제안합니다.

==> とうめい 고속도로
>> 'トウメイ 고속도로'
.. 'トウメi 고속도로'   rewrite   イ|ィ -> i
.. 'トuメi 고속도로'    rewrite   ウ|ゥ -> u
.. 'touメi 고속도로'    rewrite   ト -> to
.. 'toumei 고속도로'    rewrite   メ -> me
.. 'doumei 고속도로'    rewrite   ^t -> d
.. 'domei 고속도로'     remove    {u|o}u
.. '.omei 고속도로'     hangulize d -> ㄷ
.. '.o.ei 고속도로'     hangulize m -> ㅁ
.. '.o.e. 고속도로'     hangulize i -> ㅣ
.. '.o... 고속도로'     hangulize e -> ㅔ
.. '..... 고속도로'     hangulize o -> ㅗ
.. '..... ####'         plain characters
=> 도메이 고속도로

-- 
Heungsub Lee

Brian Jongseong Park

unread,
Dec 30, 2010, 6:22:35 PM12/30/10
to hang...@googlegroups.com
I agree with this proposal. It sounds like a good idea. I can't write much because I'm travelling, so please excuse me.

2010/12/30 Heungsub Lee <he...@sublee.kr>

Heungsub Lee

unread,
Dec 31, 2010, 12:06:08 AM12/31/10
to hang...@googlegroups.com
막상 작업해보니 두 가지 문제가 있었습니다:
 
======================================================================
FAIL: http://korean.go.kr/09_new/dic/rule/rule_foreign_0102.jsp
----------------------------------------------------------------------
HangulizeAssertionError: Spanish
 * 'kapok' should be '카포크', but '카포크X' was given

======================================================================
FAIL: test_examples_of_iceager (tests.grc.AncientGreekTestCase)
----------------------------------------------------------------------
HangulizeAssertionError: AncientGreek
 * 'Σφίγξ' should be '스핑크스', but '스핑,크스' was given

======================================================================
  1. 위와 같이 변환 중 잔류하는 임시문자들이 그대로 표시돼버리는 문제가 있었습니다.
    해결방안: 테스트 결과를 참고하여 잔류하는 임시문자들을 모두 제거할 수 있도록 규칙 전부를 검토합니다.

  2. 로마자를 쓰는 언어규칙들에 일괄적으로 하이픈(-) -> ZWSP(#), 어퍼스트로피(') -> None 규칙을 추가해야합니다.
    해결방안: 로마자로 표현되는 언어들의 교집합을 하나의 클래스로 만들고 거기에 공통적으로 필요한 규칙들을 입력한 후 각각의 언어들이 이를 상속하게 합니다. 종성 님께서 클래스 상속에 대해 더 자세한 안내를 필요로 하신다면 별도로 알려드리겠습니다.
당장 번거로운 이 두 가지 작업을 필요로 하기 때문에 master 브랜치로 올리지는 않겠습니다.

2010년 12월 31일 오전 8:22, Brian Jongseong Park <ice...@gmail.com>님의 말:

Brian Jongseong Park

unread,
Jan 2, 2011, 4:24:48 PM1/2/11
to hang...@googlegroups.com
새해 복 많이 받으세요. 제가 며칠 간 여행 중이어서 한동안 답을 드리지 못했습니다.

이전에처럼 쉼표 등 일부 문장 부호를 그대로 통과시키던 것은 규칙에 매치되지 않는 모든 문자를 통과시키는 것으로 전환한 후에도 그대로 두어야겠습니다. 그래야 가령 체코어에서 "ak,"가 "아크," 대신 "악"으로 변환되는 것을 막을 수 있습니다.

현재 내부 규칙에서 쓰는 문자로 , ; % . 등이 있는데 스페인어의 X와 같은 것은 규칙을 수정하겠습니다. 어차피 모든 규칙을 다시 손봐야 하기 때문에 시간이 좀 걸릴 겁니다.

클래스 상속을 통해 일괄적으로 하이픈과 어포스트로피 규칙을 적용하려면 규칙 적용 순서에서 문제가 생깁니다. 예를 들어 네덜란드어에서는 't을 '엇'으로 변환해야 하니 이 규칙을 먼저 적용한 후 어포스트로피 -> None 규칙을 적용해야 합니다. 이를 일괄 적용하려면 규칙을 두 단계로 쪼갤 필요가 있을 것 같습니다.

2010/12/31 Heungsub Lee <he...@sublee.kr>

Heungsub Lee

unread,
Jan 3, 2011, 4:19:57 AM1/3/11
to hang...@googlegroups.com
https://github.com/sublee/hangulize/tree/keep_all_chars

바뀌는게 많아서 "keep_all_chars" 브랜치로 나눴습니다. ($ git pull origin keep_all_chars 입력하면 체크아웃 될겁니다...아마?)


각 변환규칙들에서 사용하는 임시문자를 `__tmp__` 멤버변수에 적어두었습니다. 사용자가 입력한 단어에 임시문자가 포함되어있다면 특수문자와 함께 통과되고, 변환규칙이 모두 적용된 후에도 잔류한 임시문자가 있다면 다 지워버립니다.

==> %aura&
>> '%aura&'
.. '#aU%ra#'    rewrite   au -> aU%
.. '#&aU%ra#'   rewrite   ^a -> &a
.. '#&aU%.a#'   hangulize r -> ㄹ
.. '#.aU%.a#'   hangulize & -> ㅇ
.. '#..U%..#'   hangulize a -> ㅏ
.. '#...%..#'   hangulize U -> ㅜ
=> %아우라&

제가 대충 임시문자로 보이는걸 모은데다 테스트만 통과하면 완료된걸로 간주했기때문에(테스트가 적을 경우 규칙에 오류가 남아있을 가능성이 클 것 같습니다) iceager 님께서 검수해주셨음 좋겠습니다.

2011년 1월 3일 오전 6:24, Brian Jongseong Park <ice...@gmail.com>님의 말:

Heungsub Lee

unread,
Jan 13, 2011, 8:36:14 PM1/13/11
to hang...@googlegroups.com
iceager 님!

keep_all_chars 브랜치의 검수 작업이 어떻게 진행되고 있는지 궁금합니다 :)

2011년 1월 3일 오후 6:19, Heungsub Lee <he...@sublee.kr>님의 말:

Brian Jongseong Park

unread,
Jan 15, 2011, 7:44:10 AM1/15/11
to hang...@googlegroups.com
그동안 소식이 없어서 죄송합니다. 새해 들어서는 좀처럼 집에서 작업할 기회가 많지 않아서요. 그래도 오늘 모처럼 시간이 좀 비니 진전이 있을 것 같습니다.

이 프로젝트에는 용례 마련이 매우 중요하다고 생각해왔는데 얼마 전에 그동안의 외래어 표기 용례집 자료를 검토하는 작업을 시작했습니다. 인명 자료부터 보고 있는 중인데 아쉽게도 생각보다 형편이 없더군요. 다른 것은 둘째치고 본 이름의 철자부터 틀린 것이 왜 이리 많은지.. 이를테면 프랑스어 이름 아드리앵(Adrien)을 Andrien으로 잘못 적고 '앙드리앵'으로 표기하는 식입니다. 아무래도 외래어 표기 용례는 하나 하나 원 표기와 발음을 제대로 확인하면서 우리가 처음부터 마련해야겠습니다.

이번에 독일어 발음 사전 두 종과 스웨덴어 발음 사전 하나를 구입했는데 특히 독일어 발음 사전은 독일어 뿐만이 아니라 다른 여러 언어 고유명사의 원 언어 발음까지 대폭 싣고 있어 기대보다 훨씬 큰 수확을 했습니다. 앞으로 용례 마련에 큰 도움이 될 것입니다.

2011/1/14 Heungsub Lee <he...@sublee.kr>
Reply all
Reply to author
Forward
0 new messages