자연어 처리는


인간이 발화하는 언어 현상을 기계적으로 분석하여, 컴퓨터가 이해할수 있는 형태로 만드는 자연 언어 이해 

혹은 그러한 형태를 다시 인간이 이해할 수 있는 언어로 표현하는 제반 기술을 의미



컴퓨터가 이해할 수 있는 형태로 표현하고자 한다는 점에서 인공지능과 대단히 밀접한 관련이 있으며,

전산언어학과 거의 구별없이 비슷한 의미로 사용된다.

정의


기존 DBMS Tool(데이터베이스 관리도구) 의 능력을 넘어서는 

수십 TB 의 정형 또는 심지어 데이터베이스 형태가아닌 비정형 데이터의 집합 조차 포함한 데이터로부터 가치를 추출하고 결과를 분석하는 기술



2012년 가트너는 빅데이터 기존의 정의를 다음과 같이 개정하였다: 

“빅 데이터는 큰 용량(volume), 빠른 속도(velocity), 그리고(또는) 높은 다양성(veriety)을 갖는 정보 자산으로서 이를 통해 의사 결정 및 통찰 발견, 프로세스 최적화를 향상시키기 위해서는 새로운 형태의 처리 방식이 필요하다.”



분석기법


빅 데이터의 분석, 활용을 위한 빅 데이터 처리 기법은 크게 분석 기술, 표현 기술로 나뉜다.


분석 기술


  • 텍스트 마이닝: 비/반정형 텍스트 데이터에서 자연 언어 처리 기술에 기반하여 유용한 정보를 추출, 가공
  • 오피니언 마이닝: 소셜미디어 등의 정형/비정형 텍스트의 긍정, 부정, 중립의 선호도를 판별
  • 소셜 네트워크 분석: 소셜 네트워크의 연결 구조 및 강도 등을 바탕으로 사용자의 명성 및 영향력을 측정
  • 군집 분석: 비슷한 특성을 가진 개체를 합쳐가면서 최종적으로 유사 특성의 군집을 발굴


대규모의 정형/비정형 데이터를 처리하는 데 있어 가장 기본적인 분석 인프라로 하둡이 있으며, 데이터를 유연하고 더욱 빠르게 처리하기 위해 NoSQL 기술이 활용되기도 한다.


CharSet이 EUC-KR인 서버가 있습니다. 

클라이언트에서는 jQuery를 이용하여 Form을 다루려고 합니다.


myForm이라는 데이터를 전송하는 폼이 있습니다.

그 폼의 input 벨류들을 모두 jQuery의 .serialize()를 통해서 

직렬화하고(문자열로 만들고) 보내면 좋을것 같습니다.


그래서 아래처럼 함수를 작성했습니다.


var myForm = jQuery('#myForm');

jQuery.ajax({
type : myForm.attr('method'),
url : '/reimaginer/FormManager.ym',
data : myForm.serialize(),
success : function (res) {
if(res === 'SUCCESS') {
alert('등록되었습니다.');
} else {
alert('등록이 실패하였습니다.')
}
}
});



영어로 테스트 해봤는데 잘 됩니다. 오 좋다~ 하고 있는데, 한국어로도 테스트해봅니다.
그런데 깨집니다...


문제의 원인에 대해서 고민해보니, jQuery는 기본적으로 charSet이 UTF-8이라는게 기억납니다.
그럼이제 UTF-8로 인코딩된 언어를 어떻게 안 깨뜨리고 잘 가져올지 고민해봅니다.

예전에 모바일 프로젝트할때, 모바일 클라이언트는 charSet이 UTF-8이었습니다. 
그래서 UTF-8로 두번 인코딩하고, 서버에서 한번 자동으로 디코딩 된 후,
다시 한번, decodeUri를 통해서 한글을 가져온 것이 생각이 납니다.

인터넷을 뒤적거리다보니 비슷한 방법이 나옵니다.
.serialize() 하면 UTF-8로 한번 인코딩된 문자열이 나옵니다.
만약 폼에서 전송하려는 데이터가 '사과' 라는 문자열이라면,

'%EC%82%AC%EA%B3%BC' 

이런 놈이 반환되죠. 여기서 우리는 한번 더 인코딩합니다.
% 문자를 인코딩된 문자인 '%25'로 한번 더 바꿔주는 겁니다.
(= % 를 %25로 바꿔주기만 해도 한글이 깨지지 않고 넘어갑니다. )

"%25EC%2582%25AC%25EA%25B3%25BC" 이렇게요.

코드는 다음과 같습니다.


var myForm = jQuery('#myForm');

jQuery.ajax({
type : myForm.attr('method'),
url : '/reimaginer/FormManager.ym',
data : myForm.serialize().replace(/%/g, '%25'),
//data : encodeURI(myForm.serialize()), 위, 아래 두가지 방법 모두 같은 결과를 반환한다.
success : function (res) {
if(res === 'SUCCESS') {
alert('등록되었습니다.');
} else {
alert('등록이 실패하였습니다.')
}
}
})
;


그럼 서버 측에서는 어떻게 받아야 할까요.


String decodedData = URLDecoder.decode(encodedData, "UTF-8");


한번은 자동으로 decode되니까 '%EC%82%AC%EA%B3%BC' 이 문자열을 받았겠죠.

한번만 더 디코드 해줍니다.

'사과'

이제 이 한글을 잘 사용하면 됩니다!


+ Recent posts