정규표현식 반복하기


주민등록번호를 정규표현식으로 나타내려면 어떻게 해야 할까? 


주민등록번호는 엄밀하게 말하면 모든 자리의 수가 0에서 9까지의 숫자로 이루어진 것은 아니지만 편의상 ○○○○○○-○○○○○○○ 형식의 앞에 6개의 숫자하이픈(-) 뒤에 7개의 숫자로 이루어진 일련의 문자열로만 다룬다고 할 때 정규표현식은 어떻게 될까?


앞서 우리는 [0-9]라는 문자 클래스를 이용하여 숫자들에 해당하는 하나의 문자를 지정하는 법을 배웠다.


그렇다면 정규표현식은 다음과 같을 것이다.


[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]


너무 길다. 이렇게 반복되는 경우를 효율적으로 처리할 방법이 필요하다.


정규표현식에서는 특정한 표현식을 반복하는 방법을 아래와 같이 제공하고 있다.


\{min,max\} → 앞의 내용이 min 이상 max 이하 반복됨

* 앞의 내용이 0 이상 반복됨

\+ 앞의 내용이 1 이상 반복됨


\{min,max\}를 이용하여 주민등록번호를 지정하면 다음과 같다


[0-9]\{6,6\}-[0-9]\{7,7\}

\{6,6\}은 최소 6번 최대 6번 이므로 그냥 6번 반복한다는 뜻이다.

\{7,7\}은 최소 7번 최대 7번 이므로 그냥 7번 반복한다는 뜻이다.


\{min,max\}에서 min0으로 할 경우 반복이 전혀 없는 경우도 해당된다.


[0-9]\{0,max\} 숫자가 0번 이상 max 이하 반복되므로 숫자가 전혀 없는 경우도 해당됨


\{min,max\}에서 max를 생략할 경우 반복 횟수에 제한이 없어진다. 따라서

 

*  \{0,\}과 동일하다.

\+ → \{1,\}과 동일하다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


033 vim의 정규표현식(7) 반복.apkg



효과적인 학습을 위하여 지식을 구조화하는 20가지 규칙 원문 링크는 다음과 같다.


https://www.supermemo.com/en/articles/20rules



역자의 자질 부족으로 상당수 의역이 있으니 잘 이해가 가지 않거나 원문이 궁금하신 분은 원문을 참고하시길 바란다.





효과적인 학습을 위하여 지식을 구조화하는 20가지 규칙(17번)

(The 20 rules of formulating knowledge in learning)




17. 여분의 학습(Redundancy)은 최소 정보원칙에 위배되지 않는다.


학습량의 초과, 여분의 학습의 의미는 간단하게 말하면 필요한 양보다 많은 정보량 또는 중복된 정보 등을 말한다. 여기서는 여분의 학습이라고 지칭하겠다(역자주). 이러한 여분의 학습을 하는 것이 앞서 언급한 최소 정보 원칙에 어긋나는 것처럼 보일 수 있지만 그런 것이 아니며 오히려 환영할만한 일일 수 있다. 이 짧은 텍스트에서 여분의 학습이라는 주제를 다루기에는 이 주제가 매우 광범위하고 지면은 너무 협소하다. 그래서 여기 몇 가지 사례만을 제시하려고 한다. 이 사례들은 최소 정보 원칙을 그저 컬렉션이나 학습 내용을 구성하는 문자의 수, 비트의 수로 단순하게 이해되어선 안 된다는 것을 보여주는 사례들이다



<수동적이고 동시에 능동적인 접근>


에스페란토 같은 외국어를 배운다면 종종 phone-telefono, language-lingvo, hope-esperanto와 같은 단어 쌍을 만들게 될 것이다. 이러한 단어 쌍들을 학습하는 방식은 영어를 에스페란토어로 전환하기 위하여 적극적으로 기억을 환기할 것을 요구한다. 하지만 적극적으로 에스페란토어를 환기시키는 훈련이 이루어져서 phonetelefono라고 바로 생각해낼 수 있다는 것이 역으로 telefono라는 단어를 볼 때 바로 phone을 떠올릴 수 있는 것을 보장하지 않는다. 그러므로 telefono-phone, lingvo-language 이나 esperanto-hope와 같이 뒤집힌 단어 쌍들을 인지하는데는 실패할 수 있다. 그러므로 학습 자료를 추가할 때 문제와 답을 뒤집은 항목을 같이 추가하면 이는 좀 중복된 지식이고 최소 정보 원칙에 어긋나 보이지만 실제로는 전혀 그렇지 않다. 학습할 내용들은 여전히 가장 단순한 형태이고 이런 단순한 형태의 학습 내용들을 더 얻게 되었을 뿐이다.


SuperMemo 2000/2002에서는 복제 (Ctrl + Alt + D) 및 스왑 (Ctrl + Shift + S)을 사용하여 스왑 된 단어 쌍 항목을 신속하게 생성 할 수 있다.(Anki에서는 노트 유형을 바꾸거나, 카드 템플릿을 바꿔 간단하게 할 수 있다.)



<추론 단서>


 학습에는 다양한 형태가 있고, 학습을 통하여 기르는 능력도 몇 가지가 있다. 그 중 한 가지는 바로 추론능력이다. 몇 가지 단서를 이용하여 어떤 문제에 대한 해결 방식을 추론하는 방식으로 질의를 함으로써 추론 능력을 올리고 싶을 때가 종종 있게 된다. 아마도 단순히 답을 외우는 것 대신 간단한 수학 방정식을 푸는 것처럼 재빨리 추론의 단계를 밟아서 답을 만들어내는 방식으로 해보고 싶을 것이다. 이러한 경우 해답에다가 추론 과정에 대한 힌트 즉, 추론 단서를 제시해놓으면 반복 학습을 할 때마다 항상 올바른 경로를 따라가는데 도움이 된다.



<유도 단계>


복잡한 수학 문제를 풀 경우와 같이 좀 더 복잡한 문제를 풀고자 할 경우 개별적으로 유도된 추론 단계를 일일이 외우는 것이 최고다. 이걸 단순히 주입식으로 쑤셔 넣는 것이라고 비난할 것은 아니다. 이렇게 하면 그 문제를 풀면서 두뇌가 항상 가장 빠른 길을 따라갈 수 있도록 확실하게 해주는 것이다. 창의력과 지능을 향상시키는 읽기 방법에 대한 자세한 내용은 다음을 참조하기 바란다. Roots of genius and creativity와 좀 더 구체적으로는 Derivation, reasoning and intelligence를 참조하기 바란다.

 


<다양한 의미의 표현>


동일한 지식이 전혀 다른 각도와 관점에서 드러나는 경우가 매주 많다. 기억할만한 가치가 있는 지식이라고 판단되면 동일한 내용에 대하여 다양하게 표현된 것을 기억하기를 권고하는 바이다.



<유연한 반복>


하나의 질문에 대하여 타당한 응답이 여러 개 있을 경우 이러한 다양한 응답들 중에서 다른 응답들과 동일하면서도 가장 높은 성적을 받게 해줄 대표적인 표현을 선택하라. 가령, 언어를 공부할 경우, 어떤 단어와 개념적인 정의가 일치하는 부분이 있는 모든 동의어를 전부 외워야겠다고 생각하는 것과 같은 터무니없는 생각을 하지 말아야 한다. 동의어로써 가장 충분하다고 판단되는 하나의 동의어를 고려해서 학습하는 것이 훨씬 더 적절하다.




본 문서는 Anki 2.0 유저 매뉴얼을 번역한 문서입니다.


기본적으로 구글 번역을 통해서 초벌을 번역하고 이를 수정하는 방식으로 번역했습니다. 


또한, 본문에 충실한 직역보다는 매뉴얼을 숙지하기 쉽도록 의역 위주로 번역하였습니다.



Anki 매뉴얼 전체 개요 페이지 가기

 


Introduction

 


Anki는 무언가를 쉽게 기억할 수 있도록 도와주는 프로그램이다.

 

Anki를 이용한 학습은 전통적인 학습보다 훨씬 효율적이기 때문에 공부에 소모되는 시간은 줄이고 공부하는 양은 크게 늘릴 수 있다.

 

Anki는 내용과 상관없이 이미지, 오디오, 비디오들을 지원하고 LaTeX를 통해 과학 마크 업을 지원하는 등 무한한 가능성을 가진 프로그램으로써 일상에서 무언가 기억할 것이 있다면 Anki를 적절히 이용해서 효과를 볼 수 있다.


예를 들면 :

 - 언어 공부

 - 의학이나 법학 시험 준비

 - 사람들의 이름과 얼굴 암기

 - 지리학적인 구분

 - 긴 시를 마스터하기

 - 또는 기타 코드를 연습하기


 

Anki에는 두 가지 간단한 핵심개념을 구현하고 있다.

 

하나는 능동적 기억환기(Active Recall Testing)이고 다른 하나는 간격 반복(spaced repetiton)이다. 

 

이 두가지 개념은 수년간 과학 문헌에서 논의되고 있었지만 대부분의 학습자들에게는 잘 알려지지 않은 개념이다.

 

이러한 개념의 작동방식을 이해하면 보다 효과적인 학습이 가능해질 것이다. 


 

 

 Active Recall Testing(능동적 기억환기)



능동적 기억환기는 질문을 받고 그 해답을 기억하려고 노력하는 식의 시도를 의미한다.

 

능동적 기억환기와 대조적인 것이 일반적으로 수행하는 정적이고 수동적인 공부들이다.

 

가령, 우리가 무언가를 읽고 듣는 식으로 공부할 때, 만일 해당 내용을 알고 있다면 그것에 대해서 잠시라도 숙고해보지 않고 넘어가는데 이것이 정적이고 수동적인 공부방식이라면 능동적 환기를 요구하는 공부방식은  질문을 받고 그에 대한 해답을 기억하려고 적극적으로 노력하는 방식이다. 

 

연구에 따르면 능동적 기억환기는 정적이고 수동적인 공부보다 강력한 기억을 구축하는 데 훨씬 효과적이다.

 

이것에는 다음의 두 가지 이유가 있다.

 - 뭔가에 대한 기억을 환기하려고 하는 행위 자체가 기억을 강화하고 그것을 다시 기억해낼 가능성을 높인다.

 - 질문을 받았을 때 해답을 말할 수 없었다면 다시 공부하거나 복습할 필요성을 느껴 복습할 수 있다.

  

 

당신은 깨닫지 못했겠지만 아마도 학교에서 능동적 기억환기를 해봤을 것이다. 

 

훌륭한 선생님은 교육 문건을 읽은 후 대답해야할 일련의 질문을 주거나 매주 진행 정도를 점검하는 테스트를 수행하거나 한다.

 

이때, 이러한 테스트는 단순히 해당 내용을 이해했는지 여부를 확인하기 위해서만 한 것이 아니라 테스트를 통해 능동적으로 해당 내용을 환기하도록 하여 미래에 해당 내용을 기억할 수 있는 가능성을 늘리고 있는 것이다. 

 

능동적 기억환기를 공부에 도입하는 좋은 방법이 플래시 카드를 사용하는 것이다.

 

전통적인 종이 플래쉬 카드를 사용하는 방법은 카드의 한면에 질문을 쓰고 다른면에 해답을 적는다. 

 

그리고 답을 생각해 낼 때까지 카드를 뒤집지 않는 식으로 능동적으로 기억환기를 하는 것이다.

 

이는 단지 수동적으로 내용을 흝어 보는 것보다 효과적인 학습을 가능케 한다.

 



 Use It or Lose It(사용하지 않으면 잊는다.)



우리의 두뇌는 매우 효율적인 기계여서 별로 쓸모없어 보이는 정보는 빠르게 폐기한다.

 

가령, 2주 전 월요일의 저녁 식사에 대해서 기억이 전혀 안날 수 있다.

 

왜냐하면 이러한 정보는 별로 쓸모가 없기 때문이다.

 

하지만 당신이 2주전 그날 정말 환상적인 레스토랑에 갔고 지난 2주 동안 사람들에게 그게 얼마나 대단하고 환성적이었는지 말하고 다녔다면 아마도 세부 사항까지 생생하게 기억날 것이다.


우리의 두뇌는 "사용하지 않으면 잊는다"라는 원칙 하에 움직이인다.

 

그리고 이러한 원칙은 우리의 학습에도 그대로 적용된다.

 

만일 오후시간 내내 뭔가 어려워보이는 과학 용어를 암기하고 2주 동안 그 암기한 것에 대해 전혀 생각하지 않았다면 아마 대부분 잊어 버리게 된다.

 

실제로 연구에 따르면 학습한 내용의 75%를 48시간 이내에 잊어 버리는 것으로 나타났다.

 

연구 결과에 따른 정보 손실을 생각한다면 정말 많은 정보를 배워야 하는 상황이 매우 우울하게 느껴질 것 같다. 


해결책은 복습으로 매우 간단하다. 새로 학습한 정보를 다시 복습함으로써 잊어버리는 내용을 크게 줄일 수 있다. 


유일한 문제는 전통적으로 복습을 하는 것이 실질적으로 쉽지 않다는 점이다.

 

종이 플래쉬카드를 사용하여 복습하는 상황을 생각해보라.

 

다시 검토하고 복습할 내용이 플래쉬 카드 30개만으로 충분하다면 간단하게 복습할 수 있다.

 

하지만 복습할 내용이 많아져서 필요한 카드의 수가 300 또는 3000으로 커지면 종이 플래쉬 카드로 다루기 힘들어진다.

 

 

 

 Spaced Repetition(간격 반복)

 
 

간격 효과는 1885년 독일의 심리학자에 의해 보고되었다.

 

그는 한 세션에서 여러 번 반복하여 공부하는 것 보다 복습 세션을 여러 시간에 걸쳐서 갖는 것이 좀 더 기억에 효과적인 것으로 나타나는 것을 관찰했다.

 

1930년대 이래로 이러한 간격 효과를 사용하여 학습을 향상시키고자 하는 많은 제안이 있었다.

 

이때 명칭이 간격효과에서 간격 반복(spaced repetition)으로 지칭되었다.

 

한 예로 1972년에 독일의 세바스찬 라이트너(Sebastian Leitner)라는 과학자가 종이 플래쉬 카드를 이용하여 간격을 두고 반복하는 방법을 대중화 한 것이 있다.

 

우선 종이 카드를 일련의 상자에 나누어 두고 복습을 하면서 카드를 성공과 실패로 나눈다. 성공 또는 실패한 카드를 다른 상자로 옮김으로써 해당 카드가 얼마나 잘 외어졌는지 아니면 언제쯤 다시 복습을 해야 하는지 대략적으로 추정할 수 있었다.

 

이 방법은 하나의 카드 상자만을 사용하는 것에 비해 큰 발전이었으고 플래쉬 카드를 컴퓨터의 소프트웨어로 전환하면서 이 방법이 널리 도입되었다. 

 

그러나 이 방법은 복습해야할 정확한 날짜를 제시할 수 없고 다양한 난이도의 학습내용을 잘 다루지 못하는 다소 대략적인 접근법이다.

 

지난 30년 동안 간격 반복의 가장 큰 발전은 간격 반복을 구현한 상업용 플래시 카드 프로그램인 SuperMemo의 저자로부터 나왔다.

 

SuperMemo는 학습한 내용을 복습해야할 이상적인 일정을 따르면서 동시에 사용자가 얼마나 학습을 잘했는지에 따라서 스스로를 최적화하는 시스템이라는 개념을 개척한 것이다.


SuperMemo의 간격 반복 시스템에서는 질문에 답할 때마다 얼마나 기억하기 용이했는지, 즉 답을 하는 사용자가 느낀 주관적인 난이도를 프로그램에 제시하도록 되어 있다.

 

완전히 잊어먹은 것인지, 그저 작은 실수를 한 것인지, 기억하는데 문제가 있었지만 기억을 해냈다던지, 쉽게 기억했는지 등등을 사용자가 프로그램에 피드백한다.

 

프로그램은 이 피드백을 이용하여 당신에게 질문을 다시 보여줄 최적의 시기를 결정한다.

 

능동적으로 기억환기를 성공적으로 할 때마다 기억은 더욱 강해지기 때문에 다시 복습이 필요해지는 시기는 점점 뒤로 밀린다.

 

그래서 어떤 카드를 처음 본 다음에는 3일 후, 그 다음에는 15일 후, 다시 45일 후 등등 학습간격이 점점 늘어나게 된다.

 

이것은 필요한 최소한의 노력으로 자료를 습득하고 유지할 수 있다는 것을 의미하는 학습 혁명이었다.

 

SuperMemo의 슬로건은 공간 반복을 통해 망각을 잊어 버릴 수 있다고 하는 것이었다.

 

 
 

 Why Anki?(왜 Anki인가?)

 

 

SuperMemo가 학습 현장에 주었던 큰 충격을 부정할 수 없지만 동시에 문제가 전혀 없다고 할 수 없었다.

 

이 프로그램은 자주 버그가 나타나고 탐색하기가 어렵다는 비판을 받았다.

 

, Windows 컴퓨터에서만 실행이 되었다.

 

독점 소프트웨어로, 사용자는 해당 프로그램을 확장하거나 원시 데이터에 액세스 할 수 있는 권한이 없다.

 

현대적인 용도로는 거의 사용하기 어려운 아주 오래된 버전만 무료로 제공된다.

 

Anki는 이러한 문제들을 해결하고 있다.

 

많은 플랫폼에서 Anki를 무료로 사용할 수 있는 클라이언트가 많아서 예산에 구애받는 고학생들과 선생들도 사용할 수 있다.

 

오픈소스이므로 이미 많은 사용자들이 만든 풍부한 애드온 라이브러리가 제공된다.

 

또한, Windows, Mac OSX, Linux/FreeBSD 및 일부 모바일 장치에서 실행되는 멀티 플랫폼이다.

 

그리고 SuperMemo보다 훨씬 사용하기가 쉽다.

 

내부적으로, Anki의 간격 반복 시스템은 SM2라고하는 이전 버전의 SuperMemo 알고리즘을 기반으로 한다.

 

SM2의 후속 버전은 학습 효율을 조금 더 쥐어짜내는데 성공했지만 복잡성이 크게 증가하였고 실제 사용에서도 학습일정에서 발생하는 오류가 체감될 정도가 되었다.

 

간격반복과 학습일정 알고리즘의 차이점에 대한 더 자세한 설명은 자주 묻는 질문(FAQ)의 해당 절을 참조하라.



Anki 매뉴얼 전체 개요 페이지 가기

 

+ Recent posts