Upload
-
View
427
Download
2
Embed Size (px)
Citation preview
네오위즈인터넷 김태우
신개념 스마트폰 키보드 만들기
Input Method Ser-vice
Keyboard Keyboard View
안드로이드키보드 구성
Input Method Service생명주기
입력 시작
입력 종료
onCreate() / onInitializeInterface()
onCreateInputView()
onStartInput()
onStartInputView()
onFinishInputView()
onDestroy()
Keyboard클래스의 역할
가공된 Collection
데이터
XMLTEXTDB
타 클래스에정보제공
LOAD
GET
Keyboard View클래스의 역할 Lay-
outKey데이터
Key데이터
Key데이터InputMeth-
odService
이벤트핸들링
Keyboard클래스의데이터
한글 오토마타
초기상태
STATE 0
자음
STATE 1자음
back
back
모음
STATE 2
back
모음
모음
자음
자음 +모음
STATE 3
자음
모음
모음
back자음 +
모음+ 자음
STATE 4
자음
back
모음
자음
자음
문자 표현
음성 표현
?ㅋㅋㅋㅎㅎ
ㅎ뷁
이슈 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);
}
이슈 2)EditorInfo 사용하기
숫자 입력 영역에서는 숫자 키보드로 ..editorInfo.inputTypeEditorInfo.TYPE_CLASS_xxx
아이디 / 비번 입력 영역에서 아이디 입력 후 엔터는 탭 ..
editorInfo.imeOptionsEditorInfo.IME_ACTION_xxx
이슈 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();
학습형 개인화단어예측 기능
단어 입력/ 단어 예측 단어 분리
저 장 분석 / 학습
데이터저장 (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
단어예측사용지표
친밀도 : 다음에 나온 단어는 이전 단어와 친밀하다 .
입력횟수 : 단어의 입력횟수가 많을 수록 입력될 확률이 높다 .
입력시간대 : 입력된 시각이 하루 중 어느 시기인가에 따라 패턴이 다를 수 있다 .
입력영역의 속성 : 입력되는 영역에서 입력되길 기대하는 내용
최근 입력 시각 : 살아있는 단어와 죽은 단어를 구분하자 .
단어예측지표별 확률계산
친밀도 기반 입력 확률
이미 입력된 단어 다음에 나왔던 단어들을 A1, A2, … , An 이라고 하면 ,
( Ai 가 입력될 확률 ) =
( Ai 입력횟수 )
Ak 입력 횟수K=1
n
단어예측최종 확률계산
( 최종 입력 확률 ) = P1 * W1 + P2 * W2 + P3 * W3 + P4 * W4
W1 + W2 + W3 + W4 = 1
단어예측Word Chaining
확률 > 0.95
친밀도가 매우 높다면 묶어서 추천하는게 합리적이다 .
예측된 단어
예측된 단어
단어분리
입력 완료 판단 시점
키보드가 내려간다 .
입력 영역이 초기화된다 .
기본적인 구분자 ( 띄어쓰기 , 줄넘김 ) 및 기호로 분리하며 ,기호는 앞 단어에 연결한다 .
분석 및 학습
P = P1 * W1 + P2 * W2 + P3 * W3 + P4 * W4
가중치 초기값 : W1 = 0.5W2 = 0.1W3 = 0.1W4 = 0.3
입력된 데이터들을 기반으로 가중치 갱신
분석 및 학습
입력 횟수 기반 확률에 대한 가중치 갱신
표준편차가 클수록 자주 입력되는 단어가 구분되어 입력 확률에 대한 신뢰도 증가
W2’ = (W2 초기값 ) * ( 1 + use_cnt_total 평균
)use_cnt_total 표준편차
분석 및 학습갱신된 가중치 보정
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’
분석 및 학습휴면단어 필터링
유효기간은 최초 60 일로 정하며 , 저장된 단어수 100 개 이상인 경우 갱신
각 단어별로 ( 현재시각 – 최근입력시각 ) 계산
시간차들을 오름차순 정렬하고 , 각 구간의 차이를 증가값이라 한다 .( 증가값들의 평균 ) < ( ( 증가값의 최대값 + 증가값의 최소값 ) / 2 ) * 0.8위 식을 만족할 경우 유효기간을 ( 증가값이 최대일 때의 시간차 ) 로 갱신
시간차 증가값
Here!
What’s next?andQ&A
THANK YOU