30
네네네네네네네 네네네 네네네 네네네네 네네네 네네네

신개념 스마트폰 키보드 만들기

  • Upload
    -

  • View
    427

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 신개념 스마트폰 키보드 만들기

네오위즈인터넷 김태우

신개념 스마트폰 키보드 만들기

Page 2: 신개념 스마트폰 키보드 만들기
Page 3: 신개념 스마트폰 키보드 만들기
Page 4: 신개념 스마트폰 키보드 만들기
Page 5: 신개념 스마트폰 키보드 만들기
Page 6: 신개념 스마트폰 키보드 만들기
Page 7: 신개념 스마트폰 키보드 만들기
Page 8: 신개념 스마트폰 키보드 만들기

Input Method Ser-vice

Keyboard Keyboard View

안드로이드키보드 구성

Page 9: 신개념 스마트폰 키보드 만들기

Input Method Service생명주기

입력 시작

입력 종료

onCreate() / onInitializeInterface()

onCreateInputView()

onStartInput()

onStartInputView()

onFinishInputView()

onDestroy()

Page 10: 신개념 스마트폰 키보드 만들기

Keyboard클래스의 역할

가공된 Collection

데이터

XMLTEXTDB

타 클래스에정보제공

LOAD

GET

Page 11: 신개념 스마트폰 키보드 만들기

Keyboard View클래스의 역할 Lay-

outKey데이터

Key데이터

Key데이터InputMeth-

odService

이벤트핸들링

Keyboard클래스의데이터

Page 12: 신개념 스마트폰 키보드 만들기

한글 오토마타

초기상태

STATE 0

자음

STATE 1자음

back

back

모음

STATE 2

back

모음

모음

자음

자음 +모음

STATE 3

자음

모음

모음

back자음 +

모음+ 자음

STATE 4

자음

back

모음

자음

자음

Page 13: 신개념 스마트폰 키보드 만들기

문자 표현

음성 표현

?ㅋㅋㅋㅎㅎ

ㅎ뷁

Page 14: 신개념 스마트폰 키보드 만들기

이슈 1)서로 다른 뷰에서의 멀티 터치 private View otherView;

public boolean onTouchEvent(){switch(action)case ACTION_DOWN:

actionDown(this);case ACTION_POINTER_DOWN:

if ( 다른 뷰에서의 터치이면 )actionDown(otherView);

elseactionDown(this);

case ACTION_MOVE:if ( 다른 뷰에서의 터치이면 )

actionMove(otherView);else

actionMove(this);case ACTION_POINTER_UP: ACTION_UP:

if ( 다른 뷰에서의 터치였다면 )actionUp(otherView);

elseactionUp(this);

}

Page 15: 신개념 스마트폰 키보드 만들기

이슈 2)EditorInfo 사용하기

숫자 입력 영역에서는 숫자 키보드로 ..editorInfo.inputTypeEditorInfo.TYPE_CLASS_xxx

아이디 / 비번 입력 영역에서 아이디 입력 후 엔터는 탭 ..

editorInfo.imeOptionsEditorInfo.IME_ACTION_xxx

Page 16: 신개념 스마트폰 키보드 만들기

이슈 3)Easy Guide 만들기

imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

imm.getEnabledInputMethodList(); // 활성화 되어 있는 키보드 목록

new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS);

Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);

imm.showInputMethodPicker();

Page 17: 신개념 스마트폰 키보드 만들기
Page 18: 신개념 스마트폰 키보드 만들기

학습형 개인화단어예측 기능

단어 입력/ 단어 예측 단어 분리

저 장 분석 / 학습

Page 19: 신개념 스마트폰 키보드 만들기

데이터저장 (DB 구조 )table name : word

columns : word_idwordcompositionuse_cnt_totaluse_cnt_0 , … ,

use_cnt_20use_cnt_normaluse_cnt_email_addressuse_cnt_email_subjectuse_cnt_uriuse_cnt_postal_addressuse_cnt_numberuse_cnt_xxx_weightupd_dtcrt_dt

table name : next_word_group

columns : wordnext_worduse_cnt

Page 20: 신개념 스마트폰 키보드 만들기

단어예측사용지표

친밀도 : 다음에 나온 단어는 이전 단어와 친밀하다 .

입력횟수 : 단어의 입력횟수가 많을 수록 입력될 확률이 높다 .

입력시간대 : 입력된 시각이 하루 중 어느 시기인가에 따라 패턴이 다를 수 있다 .

입력영역의 속성 : 입력되는 영역에서 입력되길 기대하는 내용

최근 입력 시각 : 살아있는 단어와 죽은 단어를 구분하자 .

Page 21: 신개념 스마트폰 키보드 만들기

단어예측지표별 확률계산

친밀도 기반 입력 확률

이미 입력된 단어 다음에 나왔던 단어들을 A1, A2, … , An 이라고 하면 ,

( Ai 가 입력될 확률 ) =

( Ai 입력횟수 )

Ak 입력 횟수K=1

n

Page 22: 신개념 스마트폰 키보드 만들기

단어예측최종 확률계산

( 최종 입력 확률 ) = P1 * W1 + P2 * W2 + P3 * W3 + P4 * W4

W1 + W2 + W3 + W4 = 1

Page 23: 신개념 스마트폰 키보드 만들기

단어예측Word Chaining

확률 > 0.95

친밀도가 매우 높다면 묶어서 추천하는게 합리적이다 .

예측된 단어

예측된 단어

Page 24: 신개념 스마트폰 키보드 만들기

단어분리

입력 완료 판단 시점

키보드가 내려간다 .

입력 영역이 초기화된다 .

기본적인 구분자 ( 띄어쓰기 , 줄넘김 ) 및 기호로 분리하며 ,기호는 앞 단어에 연결한다 .

Page 25: 신개념 스마트폰 키보드 만들기

분석 및 학습

P = P1 * W1 + P2 * W2 + P3 * W3 + P4 * W4

가중치 초기값 : W1 = 0.5W2 = 0.1W3 = 0.1W4 = 0.3

입력된 데이터들을 기반으로 가중치 갱신

Page 26: 신개념 스마트폰 키보드 만들기

분석 및 학습

입력 횟수 기반 확률에 대한 가중치 갱신

표준편차가 클수록 자주 입력되는 단어가 구분되어 입력 확률에 대한 신뢰도 증가

W2’ = (W2 초기값 ) * ( 1 + use_cnt_total 평균

)use_cnt_total 표준편차

Page 27: 신개념 스마트폰 키보드 만들기

분석 및 학습갱신된 가중치 보정

W1 + W2 + W3 + W4 = 1

W2 + W3 + W4 = 1 - W1 ( W1 은 갱신되지 않는다 . )

W2 = W2’ *

1 - W1W2’ + W3’ + W4’

W3 = W3’ *

1 - W1W2’ + W3’ + W4’

W4 = W4’ *

1 - W1W2’ + W3’ + W4’

Page 28: 신개념 스마트폰 키보드 만들기

분석 및 학습휴면단어 필터링

유효기간은 최초 60 일로 정하며 , 저장된 단어수 100 개 이상인 경우 갱신

각 단어별로 ( 현재시각 – 최근입력시각 ) 계산

시간차들을 오름차순 정렬하고 , 각 구간의 차이를 증가값이라 한다 .( 증가값들의 평균 ) < ( ( 증가값의 최대값 + 증가값의 최소값 ) / 2 ) * 0.8위 식을 만족할 경우 유효기간을 ( 증가값이 최대일 때의 시간차 ) 로 갱신

시간차 증가값

Here!

Page 29: 신개념 스마트폰 키보드 만들기

What’s next?andQ&A

Page 30: 신개념 스마트폰 키보드 만들기

THANK YOU