2013년 1월 27일 일요일

[IR]IR의 기본 배경 지식


정보 검색(Information Retrieval)



정보 검색(情報檢索)은 문서 내에 있는 내용, 문서 그 자체, 문서에 있는 메타데이터데이터베이스에서 정보를 찾는 것을 말한다. 구글야후라이브 검색(MSN 검색) 등이 가장 명백한 검색 엔진이다.
정보 검색은 흔히 데이터 검색(data retrieval)과 문서 검색(document retrieval)로 구분할 수 있다.
  • 데이터 검색: 구조가 있는 데이터(structured data)의 집합에 대하여 정확한 질의어(query)를 사용하여 조건에 맞는 결과 집합을 얻어내는 것으로, 일반적인 데이터베이스에서 SQL과 같은 문법에 의해 쿼리조건에 맞는 결과를 찾아내는 것을 말한다.
  • 문서 검색: 구조가 없는 데이터(unstructured data)에 대하여 자유로운 형식의 모호성있는 질의어를 사용하여 관련된 결과 목록을 얻는 것으로, 대표적인 예가 자연어질의에 대하여 관련 있는 순으로 결과 목록을 보여 주는 구글네이버 등의검색엔진을 들 수 있다.
이와 같이 문서 검색은 질의가 모호하고 그로 인해 검색 결과는 그 관련성에 따라 높은 것에서 낮은 순으로 제시되는 것이 일반적이라는 점에서 데이터 검색과 큰 차이가 있는데, 보통 검색엔진이라는 용어는 이러한 문서 검색을 수행하는 소프트웨어 시스템을 뜻한다.

정보 검색 요소

오늘날의 정보검색시스템은 크게 데이터집합, 색인, 랭킹, 표현, 사용자피드백이라는 다섯 가지 요소로 구성되어 있다.
  • 데이터집합: 검색의 대상이 되는 데이터로서 크게 DB형 데이터와 문서형 데이터로 구분될 수 있다. DB형 데이터는 날씨, 주가, 기차시간표 등과 같이 일정한 스키마를 갖고 DB에 저장되어 있는 데이터인 반면, 문서형 데이터는 제목과 본문, 생성날짜 등으로 구성된 데이터를 말한다. 문서형데이터는 다시 정형적 문서형데이터와 비정형적 문서형데이터로 나뉘는데, 정형적 문서형데이터는 지식검색데이터나 블로그데이터와 같이 비교적 나름대로의 서식을 갖추고 있는 데이터이고, 비정형적 문서형데이터는 웹문서와 같이 상대적으로 자유로운 형식의 데이터를 의미한다.
  • 색인: 색인(indexing)은 문서형데이터집합에 대하여, 각 단어별 문서리스트를 생성한 것을 의미하며, 흔히 역문서리스트(inverted list)라는 용어로도 표현된다. 한편 색인방식에 따라 데이터집합을 한꺼번에 색인하는 일괄색인(batch indexing)과 점증색인(incremental indexing)으로 구분될 수 있는데, 뉴스검색은 대표적으로 점증색인을 적용하는 분야이다. 정보검색을 위한 색인과정에서 중요한 것은 주어진 문서에서 색인어를 추출하는 과정인데, 언어적 특성과 상관없이 적용될 수 있는 n-gram 방식과, 자연언어처리의 형태소분석을 통한 방식이 존재한다.
  • 랭킹: 랭킹(ranking)은 입력된 질의(query)에 대하여 가장 적합한 순으로 문서형데이터들을 나열하는 작업을 의미하며, 이를 위한 다양한 검색알고리즘들이 존재한다. 여기서 적합성(relevance)은 질의와 문서와의 유사성(similarity), 문서의 최신성(freshness), 문서 고유의 품질(quality), 그리고 사용자 검색로그를 포함한 기타 여러 정보가 적절히 혼합되어 판단될 수 있다. 구글의 페이지랭크는 질의와는 상관없이 문서 고유의 품질을 문서간의 링크관계에 따라 규정하는 대표적인 품질측정 알고리즘이라 할 수 있다.
  • 표현: 검색의 결과는 구글과 같이 단순리스트형식으로 사용자에게 제시될 수도 있고, 유사한 결과들이 그룹화되어 제시될 수도 있으며, 데이터의 종류(이미지, 블로그, 웹문서)등으로 구분지어 제시될 수도 있다.
  • 사용자 피드백: 사용자피드백은 검색의 품질을 개선하는 데 활용되는 것으로, 사용자가 직접 검색결과에 피드백을 주는 명시적 피드백(explicit feedback)과 사용자의 검색행위를 기록해놓은 검색로그가 대표적인 암묵적 피드백(implicit feedback)으로 구분될 수 있다. 최근에는 암묵적 피드백 정보를 활용하여 검색결과를 개선하려는 연구가 활발히 진행되고 있다.


위의 문서는 위키피디아에서 발췌한 문서이다.


정보 검색을 문서 검색과 데이터 검색으로 구분 할 수 있다고 했는데, 본 저자는 문서검색을 바탕으로 설명하도록 하겠다.
  더욱이 구조한 데이터인 데이터베이스(Data Base:DB)의 데이터보다 인터넷과 웹이 발전으로 웹문서가 많아 짐에 따라 문서검색에 대한 연구가 활발 하게 이루어 졌다. 데이터베이스는 정형화된 쿼리를 만들면 원하는 정보를 100% 얻을수 있지만 웹문서 같은 경우는 형식이 너무나 많고 데이터 양도 많아서 100%로의 검색 결과를 얻기는 힘들기 때문에 최근 연구가 활발하게 이루어 지고 있다고도 볼 수 있다.




2013년 1월 18일 금요일

[C++]내가 정한 폴더안에 파일들 입력 받기(Windows에서)!!

내가 정한 폴더안에 있는 파일들을 입력 받아보자.

이 글은 운영체제를 Windows로 사용하고 Visual Studio 2010을 기준으로 설명하겠다.

 우선 Linux에서는 제공되나 Window에서는 제공이 안되는 "dirent.h" 헤더파일을 추가하여야 한다.

 개인 PC에 Visual Studio 2010이 설치된 폴더에 가면 VC폴더가 있고, VC폴더안에 include라는 폴더가 있다. 여기에 dirent.h 헤더파일을 추가 하자.

다운로드 : dirent.h




헤더 파일을 추가했다면 아래 소스파일 참고 하면된다.

 *조건 : C:\\documents 라는 폴더에 파일들이 존재

30~32 줄에 보면 이상한파일(?)을 제거하기위해서 미리 파일 포인터를 이동시키는 것을 확인 할 수있는데, Linux 사용자나 DOS 환경에서 컴파일을 해본 사람이면 알수 있는데, 상위폴더로 가는 "." 혹은 ".."을 넘기기 위해서이다. 즉 우리가 원하는 파일은 3번째에 나오는것을 알수 있었다.

다른 내용은 주석을 참고하면 충분히 확인할 수 있다.

참고로 Java와 다르게 c++에서의 string(Java - String)을 이용 할 수있는 블로그가 있어서 링크를 걸어 본다. 참고 하기 바란다.