KR100798008B1 - 빈도수 카운팅을 위한 방법 및 장치 - Google Patents

빈도수 카운팅을 위한 방법 및 장치 Download PDF

Info

Publication number
KR100798008B1
KR100798008B1 KR1020057016686A KR20057016686A KR100798008B1 KR 100798008 B1 KR100798008 B1 KR 100798008B1 KR 1020057016686 A KR1020057016686 A KR 1020057016686A KR 20057016686 A KR20057016686 A KR 20057016686A KR 100798008 B1 KR100798008 B1 KR 100798008B1
Authority
KR
South Korea
Prior art keywords
count
event
event type
frequency
storage
Prior art date
Application number
KR1020057016686A
Other languages
English (en)
Other versions
KR20050117541A (ko
Inventor
한누 티. 티. 토이보넨
안티 소르바리
마르쿠스 캐해리
Original Assignee
노키아 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 노키아 코포레이션 filed Critical 노키아 코포레이션
Priority to KR1020057016686A priority Critical patent/KR100798008B1/ko
Publication of KR20050117541A publication Critical patent/KR20050117541A/ko
Application granted granted Critical
Publication of KR100798008B1 publication Critical patent/KR100798008B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Systems or methods specially adapted for specific business sectors, e.g. utilities or tourism
    • G06Q50/10Services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • G06F16/9562Bookmark management

Abstract

다양한 이벤트들의 빈도수를 카운팅하기 위한 메모리 효율적인 방법 및 전자 장치가 개시된다. 빈도수 데이터를 저장하기 위한 구조는 1차 스토리지(204) 및 2차 스토리지(206)을 포함하는데, 이들은 상이한 정확도 레벨에서 빈도수 데이터(208,210,214)을 포함한다. 1차 스토리지(204)는 이벤트 타입 및 카운트 정보 단위를 최대 복원가능한 형태로 저장하는 정밀한 스토리지이다. 2차 스토리지(206)은 자주 이용되지 않는 이벤트들을 위해 낮은 정밀도 레벨을 가지고 사용되며 이벤트 타입을 입력으로 이용하는 해시 함수에 의하여 어드레싱된 카운트 값들의 어레이 형태로 구성된다. 다른 옵션은, 해시 함수를 이용하여 이벤트 타입으로부터 단축화된 ID 를 유도하고, 이 ID를 상응하는 카운트를 위한 어드레싱 키로서 이용하는 것이다. 검출된 이벤트 타입 빈도수에 따라서 이벤트들은 1차 스토리지(204) 및 2차 스토리지(206) 간에서 이동된다. 본 발명은 추천 엔진에 이용되어 인터넷에 액세스 하기 위하여 사용되는 브라우저 내에 저장된 북마크들의 그레이딩 및 정렬 작업을 위해 사용될 수 있다.

Description

빈도수 카운팅을 위한 방법 및 장치{A method and a device for frequency counting}
본 발명은 일반적으로 다양한 이벤트들의 빈도수를 카운팅하기 위한 방법 및 장치에 관한 것이다. 특히, 본 발명은 인터넷에 액세스하기 위한 브라우저에 저장된 북마크들을 그레이딩(grading) 및 정렬하는데 관한 것이다.
지난 10년간, 정보를 정렬 및 분류하기 위한 전체적인 필요성이 현저히 증가되어 왔다. 이러한 현상은 단지 정보 및 불운하게도 불건전 정보(disinformation)의 방대한 창고(archive)인 인터넷상에서만 일어난 것이 아니다. 사람들은 인터넷에서 웹 서핑을 하고, 뉴스, 흥미있는 이야기, 취미에 관한 자료들, 토론 광장, 펜팔 등과 같은 것들을 검색하면서 즐거워하는 경향이 있는데, 현재 당면 된 문제 및 골치 아픈 문제들에 대한 특정 정보를 검색하는 것이 얼마나 중요한지에 대해서는 누구나 알고 있다. 어떤 페이지 및 특정 정보는, 자주 어느 사용자의 즐겨 찾기(favorite) 또는 "시작(top)" 링크로서 결정되어 웹 브라우저 내에 북마크라고 불리는 형태로 저장된다. 그러면, 이러한 페이지들은 저장된 상기 북마크들의 목록으로부터 상응하는 링크를 선택하는 것에 의하여 손쉽게 선택될 수 있다. 전형적으로, 북마크에는 식별 목적으로 사용되는 명칭 및 목적 사이트 및/또는 페이지에 찾아가기 위한 URL(Uniform Resource Locator)를 포함하고, 북마크는 연속되는 링크 요소들을 나타내는 한 줄의 형태로 표시되거나, 상기 요소들을 포함하는 노드(nodes)들 및 리프(leafs)들의 더욱 자세한 트리 구조(tree structure)의 형태로서 자주 도시된다. 다수 개의 북마크들이 일정한 기준에 의하여 트리 구조의 형태로 정렬된다면, 연결된 리프들로부터 원하는 페이지를 손쉽고 신속하게 검색할 수 있다. 여기서, 트리 구조를 구성하는 몇 가지 기준의 예를 들면, "뉴스", "스포츠", "취미", 또는 "업무"와 같은 것들을 노드 명칭으로 이용함으로써 참조된 페이지들의 관심 대상(subject matter)을 설명하는 링크 클래스(link class)와 같은 것이 있다. 도 1은 WAP(Wireless Application Protocol) 포털인 Excite의 사이트 지도가, 계층적인 트리 구조로서 제공되어 있는 일 실시예를 예시하는데, 도 1에서는 또 다른 관심 대상 독립 사이트들이 좌측에 추가적으로 제공된다. 도 1에 도시된 실시예는 브라우저 내에서 우리가 자주 볼 수 있는 북마크들의 도시 방법에 일치한다.
그러나, 종래 기술에 의한 웹 브라우저들은 특별히 지시되지 않는다면 북마크들을 분류 또는 정렬하지 않기 때문에, 사용자들은 트리 구조를 생성하고 적합한 슬롯에 링크 요소들을 삽입해 넣음으로써 수작업으로 직접 북마크들을 분류 및 생성하는 동작을 수행하여야 한다. 웹 서핑을 많이 하는 사람들은 역동적으로 관심있는 신규 페이지를 검색하며, 그들의 북마크 콜렉션(collection)은 흔히 후 백 또는 수천 개의 링크들을 포함하게 되는 일이 발생한다. 이렇게 많은 개수의 북마크들을 꾸준히 관리할 수 있는 사람들은 없으며, 결과적으로 북마크들을 수작업으로 종렬하는 동작은 아마도 시간 낭비인 것으로 비춰져 외면되고 말 것이다.
소니-에릭슨(Sony-Ericsson) 사는 "MOVA SO 211i" 라고 불리는 I-모드 듀얼 밴드 전화기를 출시했는데, 이 전화기는 "전자 우편 랭킹(e-mail ranking)" 이라고 불리는 새로운 특징을 포함한다. "전자 우편 랭킹"이라는 기능은 일반적으로 전자 우편 주소들을 빈도수 순으로 목록화 하는 기능이다. 사용자에게 제공되는 표시 화면으로서 소형 디스플레이와 같은 한정적인 데이터 표시 수단을 갖는데 불과한 일반적인 휴대 전화기에서, 사용자로 하여금 수많은 다른 데이터로부터 그들에게 필요한 데이터를 신속하게 채택하도록 돕는 이러한 기능은 매우 중요한 기능이다.
정보를 수동으로 정렬하는 방법의 한 가지 문제점은, 생성된 트리 구조가 전형적으로 트리 요소들(tree elements) 간의 실제 본드들(factual bonds)만을 반영한다는 전술된 사실에서 발견될 수 있는데, 여기서 실제 본드는 취미, 뉴스, 업무, 및 메인 페이지 및 서브 페이지 간의 관련성, 등과 같은 관심 대상(subject matter)에 기반한 분류를 나타낸다. 그러므로, 상응하는 일시적 또는 통계적인 상호관련성(interrelations)은 저장되지 않는다. 예를 들어, 특성 웹 페이지가 최종적으로 사용된 시점이 언제인가, 또는 전체 액세스 횟수에 따른 저장된 링크들의 랭킹(ranking)과 같은 통계적인 측면과 같은 일시적 측면(temporal aspects)들이, 실제적 측면(factual one)의 경우보다 정보를 찾는 사용자들에게는 더욱 값진 정보가 될 수도 있다.
예를 들면, 인터넷 서비스 관리/북마크 기법의 문제점이 독립적인 다수 개의 논문[1-3]에서 보고된 바 있는데, 이러한 연구들은, 선호하는 콘텐츠는 모든 사용 자에게 의하여 용이하게 액세스될 수 있어야 하며, 유용한 서비스들은 자주 재방문 된다는 사실을 나타낸다(심지어 유선 웹 환경에서 페이지 방문자의 81%가 재방문인 것으로 판단된다). 더 나아가, 북마크의 수동 관리는 UI(사용자 인터페이스(가 훌륭한 개인용 컴퓨터 내에서도 힘든 작업이고, 사용자는 단지 하나의 포털 사이트를 이용하는 것이 아니라 선택적으로 광범위한 특정 서비스들에 액세스하기 때문에, 솔루션(solution)들은 다중 서비스에 대해서도 처리할 수 있어야 한다. 뿐만 아니라, 사용자들은 자신의 프라이버시에도 관심이 많기 때문에, 단지 서버 측에서만 제공되는 솔루션(server-side solutions)들에는 높은 신뢰를 보이고 있지 않다. 목록화된 결과들 중 많은 것들이 고정된 인터넷 사용에 기인한다. 그러나, 서비스 관리/북마크 작업의 적응성(adaptivity) 요청은 이동 장치들에는 특히 매우 중요한데, 이러한 장치들은 크기가 소형이기 때문에 한정된 사용자 인터페이스 및 연산 처리 능력을 가진다.
본 발명의 목적은 전술된 바와 같은 문제점들을 완화시키고 다양한 이벤트 들의 빈도수 카운팅을 위한 자동화된 솔루션을 제공하는 것이다. 이러한 목적은 적어도 두 개의 세부 레벨(levels of detail)에 이벤트 빈도수를 저장하도록 구현되는 방법 및 장치에 의하여 실현된다. 제1 레벨로서 더 상세한 레벨은 빈번히 발생되는 이벤트들을 위하여 사용되지만, 자주 발생되지 않는 이벤트들에 대한 정보는 덜 상세한 2차 스토리지 내에 유지된다. 본 발명에 따른 방법은 최상위 빈도수를 가지는 일군의 이벤트 타입들에 변화가 발생되는 것에 적응한다(accommodate). 이러한 동작은 1차 스토리지 및 2차 스토리지 간에 이벤트 타입을 이동시킴으로써 수행된다. 또한, 본 발명에 따른 방법은 종래의 이벤트에 대하여 신규한 이벤트에 더 높은 가중치(weight)를 할당함으로써 이벤트 빈도수 내의 변화에 대한 고속 적응성(fast adaptivity)을 지원할 수도 있다. 본 발명에 따른 솔루션은 연산할 때의 부담이 적으며 연산을 수행하기 위한 메모리 요구 사양도 현저히 낮다. 본 발명의 산업상 이용 가능성의 예를 들면, 브라우저 추천 엔진(browser recommendation engine), 재다이얼기(redialler), 전화 메뉴 액세스, 파일 액세스, 음성 명령, 필기 인식 및 문자열 자동 완성 등이 있을 수 있다. 본 발명은 PDA(Personal Digital Assistant) 또는 이동 단말기와 같은 휴대용 장치들 내에 실장되기에 적합하며, 이러한 장치들은 표준 데스크톱 컴퓨터 용으로 설계된, 연산 사양이 더 높은 다른 장치들과는 다르다.
"이벤트" 라는 용어는 본 명세서에서 빈도수 카운팅 방법에 의하여 주목되고(noticeable) 카운팅될 수 있는 동작(action)을 의미하는 것이다.
"이벤트 타입"이라는 용어는 어떠한 이벤트에 특정한 속성에 의하여 다른 이벤트들과 분리될 수 있는 이벤트를 나타내는 것이다. 그러므로, 동일한 타입으로 매핑(mapped)된 이벤트는 하나 뿐일 수도 있고 부분적으로 상이한 복수 개의 이벤트들이 존재할 수도 있다.
이벤트 타입들은 사용자에 의하여 정의될 수 있는 것이 바람직한데, 예를 들면, 특정 www 사이트/페이지가 액세스되는 모든 경우에, 그 특정한 사이트/페이지(이벤트 타입)에 한번 액세스하게 되면 그 사이트/페이지의 카운트가 증가된다. 이와 부가적으로, 또는 이와 달리, 동일한 이벤트 타입 정의(event type definition)가 액세스된 모든 사이트/페이지들에 적용된다면, 액세스된 모든 www 사이트/페이지들에 대해서 오직 하나의 공용 카운트(common count) 만이 증가된다. 그러므로, 일반적으로 말하면, 이벤트 타입 정의들은 좁은 개념일 수도 있고(예를 들면, 특정 URL 또는 특정 프로그램의 설치가 이와 같은 이벤트 타입이다), 또는 넓은 개념(예를 들어, 어떤 페이지 또는 프로그램이 실제적으로 액세스되거나 설치되었는지에 무관하게, 이벤트 타입은 "웹 페이지의 한번 액세스(a web page access" 또는 "프로그램 설치 한번(a program launch)")일 수도 있다. 전술된 (협의/광의)의 이벤트 타입 정의들은 동일한 빈도수 연산 엔티티(frequency calculation entity) 내에서도 사용될 수 있다. 더 나아가, 예를 들어 인터넷 브라우징의 경우에, 빈도수 연산의 대상이 된 모든 이벤트 타입들(사이트들/페이지들)을 수동으로 정의하는 것은 매우 귀찮은 일일 것이기 때문에, 이러한 이벤트 타입 정의 동작은 적어도 일부에 있어서는 자동으로 및/또는 동적으로 수행되어야 한다. 예를 들어, 만일 빈도수 카운팅 방법에 의하여 인터넷 액세스가 모니터링 되는 경우, 신규한 사이트/페이지(또는 상응하는 URL)는 자동적으로 카운팅 되어야 하는 신규한 이벤트 타입으로 인식되는데, 이러한 인식 동작은 신규한 사이트/페이지에 특정한 소정 조건(예를 들어 특정 URL은 빈도수 연산 동작에서 제외되어야 한다는 조건과 같은)이 적용되지 않는 경우에 수행된다.
"이벤트 빈도수"라는 용어는 빈도수 카운팅 방법에 의하여 감지된 이벤트 들의 발생 횟수를 나타내는 것이다. 이러한 이벤트들에는, (특정) 웹 페이지에 대한 찾아가기, 프로그램 설치, 및 전자 우편 열기 등과 같은 이벤트들이 포함될 수 있다는 것은 전술된 바와 같다. 그러나, 어떠한 이벤트들에 대해서는, "빈도수" 라는 개념은 통상적이 좁은 의미를 가지는 것에 직접적으로 연관되는 경우가 있는데, 이러한 경우는, 예를 들어 "한 시간에 타이핑된 문자의 개수"와 같이 이벤트가 시간에 관련되어 정의될 경우에 발생된다. 어떠한 경우에도, 이벤트 카운팅은, 예를 들어 사용자의 선호도에 기반하여 이벤트에 특정될 수 있는 추가적인 규칙들을 본 발명에 의한 빈도수 카운팅 방법에 도입함으로써 더욱 한정될 수도 있다. 예를 들어, 특정 웹 페이지에 대한 전체 방문 횟수가 카운팅 되어야 한다면, 그 이벤트의 카운트를 세션당 한번씩 또는 시간 당 한번씩 추가함으로써 그 페이지가 하위 서브 페이지에 액세스하기 위하여 반복적으로 로딩되는 경우에도 카운트가 불필요하게 증가되는 것을 방지할 수 있도록 하는 것이 더욱 유익할 수 있다.
수동으로 빈도수 카운팅 및 북마크 작업을 수행하는 것에 비하여 본 발명은 몇 가지 장점을 제공한다. 사용가능한 이벤트 타입의 개수는 이론적으로는 무제한이며, 예를 들어, 브라우저 추천 엔진에서 상이한 URL(Universal Resource Locator)의 개수는 본 발명에 따른 방법을 실장하는 장치의 현존 메모리 및 연산 능력에 좌우되며, 상당히 많은 개수일 수 있다. 이러한 방법은 점진적으로 카운팅을 증가시키는 형식이기 때문에, 이벤트들이 목격될 때마다 최소한의 노력으로 카운팅을 수행할 수 있도록 한다. 추천 엔진의 경우에, 브라우저는 액세스된 URL 각각을 상기 추천 엔진으로 전달하는데, 사용자는 언제든지 추천 엔진에 가장 높이 랭크된 URL이 무엇인지 문의할 수 있다. 이제 더 이상 사용자는 명확하게 페이지를 북마크할 필요가 없다. 더 나아가, 본 발명은 방대한 서비스에의 적응적 액세스(adaptive access)를 제공하는데, 이러한 서비스는 특정 포털 사이트 또는 검색 엔진에 의하여 지원되는 서비스에 한정되는 것이 아니며, 상이한 커리어(carrier)를 총괄하는 서비스를 포함한다(예를 들어, 데이터 콜, 블루투스, WLAN:Wireless Local Area Network 등). 데이터 보안에 대해서 고려하면, 모든 데이터는 서비스 제공자의 장비 내에 저장되는 것이 아니라, 예를 들어 이동 전화 단말기와 같은 개인용 통신 장치로서 본 발명에 따른 방법을 실행하는 장치 내에 저장되는 것이 더욱 높은 레벨의 프라이버시를 보장한다. 더 나아가, 예를 들면 통신 장치의 상이한 사용자 계정에 대해서 별개의 빈도수 스토리지를 할당하는 등의 방법으로 사용자별로 독립적으로 이러한 데이터가 저장될 수도 있다. 다른 방식은 예를 들면 SIM(Subscriber Identity Module) 카드와 같은 메모리 카드와 같은 휴대용 매체 내에 빈도수 데이터를 저장하는 방식이 가능한데, 이러한 경우 메모리 카드는 그 장치를 사용하는 사용자에 따라서 용이하게 교체될 수 있다. 본 발명에 따른 방법은 심지어 사용자 콘텍스트(user context)에 적응될 수 있는데, 이것은 콘텍스트 정보를 일반적으로 단말기에서 사용할 수 있기 때문이다. 본 발명은, 브라우저에서 사용되는 것 중 케이스에 특이성(case specific)을 가지고 아마도 사용자를 번거롭게 하는 서비스의 사용자 인터넷 대신에, 강력하고(appealing) 고속인 사용자 인터페이스로서, 예를 들어 광범위하게 테스트되고 신뢰되는 단말기 사용자 인터페이스와 같은 사용자 인터넷을 채택할 수 있으며, 아마도 다양한 단말기 응용 프로그램과 통합될 수 있을 것이다. 전술된 바와 같이, 사용자가 어떠한 인터넷 서비스를 사용하는 습관을 가지는지에 대한 정보를 가지고 있으므로 본 발명에 따른 추천 엔진을 포함하고 있는 적응형 브라우저는, 종래 기술에 의한 수동 서비스 관리의 상당 부분을 자동화하는데 도움을 줄 수 있으며, 그 예를 들면 자주 사용되는 서비스에 대한 바로 가기(shortcut)를 제공하거나, 북마크를 정렬하거나, 완전히 신규한 북마크들을 제안하고, 액세스 이력(access history)을 재작성하거나 재구성하는 등의 서비스들에 도움을 줄 수 있다. 이와 동일한 개념이 이벤트들의 빈도수 카운팅이 수행되는 다양한 다른 환경에도 적용될 수 있다.
본 발명에 따른 이벤트의 빈도수 카운팅 방법으로서 데이터를 처리 및 저장할 수 있는 기능을 가지는 전자 장치에서 실행될 수 있는 방법에서, 빈도수 정보는 높은 정밀도를 가지는 1차 스토리지 및 낮은 정밀도를 가지는 2차 스토리지에 저장되며, 본 발명에 따른 방법은,
- 빈도수가 카운팅될 적어도 하나의 이벤트 타입을 정의하는 정의 단계,
- 카운팅될 타입의 이벤트가 발생될 경우 검출하는 검출 단계,
- 상기 이벤트 타입이 이미 상기 1차 스토리지 내에 포함되어 있는지를 점검하는 점검 단계,
- 만일 포함되어 있다면, 상기 1차 스토리지 내에 포함된 이벤트 타입의 카운트를 증가시키는 증가 단계,
- 만일 포함되어 있지 않다면, 상기 2차 스토리지 내에 포함된 이벤트 타입의 카운트를 갱신하는 갱신 단계를 포함하는 것을 특징으로 한다.
본 발명의 다른 면에 따르면, 원격 통신 네트워크에서 동작 가능한 개인용 통신 장치에 있어서, 명령 및 데이터를 처리하고 저장할 수 있는 처리 수단 및 메모리 수단을 포함하는 개인용 통신 장치로서, 빈도수가 카운팅될 적어도 하나의 이벤트 타입을 정의하는 정의 동작, 카운팅될 타입의 이벤트가 발생되면 검출하는 검출 동작, 상기 이벤트 타입이 이미 상기 1차 스토리지(704) 내에 포함되어 있는지를 점검하는 점검 동작, 만일 포함되어 있다면, 상기 1차 스토리지(704) 내에 포함된 이벤트 타입의 카운트를 증가시키는 증가 동작, 만일 포함되어 있지 않다면, 상기 2차 스토리지(706) 내에 포함된 이벤트 타입의 카운트를 갱신하는 갱신 동작을 수행하도록 구현되는 것을 특징으로 하는 개인용 통신 장치가 제공되는데, 여기서 상기 메모리 수단은 높은 정밀도를 가지는 1차 스토리지 및 낮은 정밀도를 가지는 2차 스토리지를 포함하여 빈도수 정보를 저장한다.
본 발명의 일 실시예에서, 기본적인 빈도수 연산 방법이 제공된다. 1차 스토리지는 <이벤트 타입, 빈도수> 쌍을 포함하는 테이블이다. 이벤트 타입들은 문자열(character strings)의 형태로 제공된다. 2차 스토리지는 두 가지 방법에 의하여 선택적으로 구현될 수 있는데, 첫 번째 옵션에서 2차 스토리지는 카운터, 해시 테이블들의 어레이로서 해싱 이벤트 타입에 의하여 인덱싱된다. 이벤트 타입 자신들은 2차 스토리지 내에 저장되지 않는다. 두 번째 옵션에서, 2차 스토리지는 <이벤트 타입 서명(event type signature), 빈도수> 쌍을 포함하는데, 여기서 서명은 해시 함수에 의하여 획득된다. 이벤트 타입은 콘덴싱되어(condensed) 예를 들어 4 바이트의 길이를 가지는 해시 값으로 변환된다. 또한, 이러한 솔루션은 서명들 간의 충돌이 전혀 발생하지 않거나, 단지 수 개의 충돌만이 발생되는 정확한 빈도수 정보를 제공할 수 있는데, 서명의 충돌 개수는 연산되어야 하는 전체 이벤트의 총 개수, 사용되는 해시 함수, 및 서명의 길이 등에 따라서 좌우된다. 뿐만 아니라, 두 번째 옵션에서는 이벤트들을 2차 스토리지 내에서 정렬하는 기능도 가능하다. 또한, 빈도수 가중치 방법(frequency weighting method)이 제공되는데, 그 이유는 다수의 적응형 응용 프로그램에서 빈도수 자체는 그다지 용이하지 않고 최신의 이벤트에는 더 많은 가중치를 부여함으로써 사용자의 기호가 바뀌는 것에 더욱더 효과적으로 적응할 수 있도록 하는 것이 바람직하기 때문이다.
본 발명의 다른 실시예에서 본 발명은 이동 브라우저 추천 엔진용으로 특히 실장됨으로써, 개인별로 적응된 링크(personal adaptive link)들을 사용자가 방문하고자 하는 서비스로 용이하게 항해해 들어갈 수 있도록 함으로써 이동 인터넷 서비스의 액세스 가능성(accessibility)을 향상시킬 수 있다. 이벤트 타입은 상이한 URL을 나타낸다. 추천 엔진은 자동으로 추천들을 생성, 랭킹, 정렬, 및 제거한다. 본 발명에 따른 엔진은 자주 액세스되어온 페이지들에 높은 우선권(higher priority)을 부여함으로써 유용한 것으로 보이는 추천들을 최근에 액세스되어 온 페이지들에 제공함으로써 변화하는 사용자 기호에 적응할 수 있으며, 또한 유용한 추천들을 시의 제1 페이지에 부여함으로써 방대한 양의 사이트로부터 적은 개수의 추천만을 생성함으로써 다양성 및 방대한 개수의 페이지에 대한 액세스를 가능하도록 보장할 수 있다.
종속항들은 본 발명에 따른 수 개의 바람직한 실시예들을 개시한다.
이하, 본 발명은 첨부된 도면을 참조하여 상세히 설명된다.
도 1은 좌측에 표시된 수 개의 독립적 사이트들과 함께 WAP(Wireless Application Protocol) 포털 사이트의 사이트 맵을 예시한다.
도 2는 1차 스토리지 및 2차 스토리지와 같은 필수적 특징 및 제안된 방법을 실행하기 위한 제어 엔티티(control entity)를 포함하는 본 발명의 전체적 개념을 도시한다.
도 3은 본 발명의 제1 실시예를 도시하는 흐름도이다.
도 4는 단말기 디스플레이에 표시된 빈도수에 따라 정렬된 링크 목록을 예시한다.
도 5는 고정된 감쇄 상수(decay constant)를 가지는 상이한 사용예에서의 스코어를 예시한다.
도 6은 두 개의 상이한 화면인 사이트 뷰(site view) 및 사이트에 관련된 페이지 뷰(page view)를 가지는 단말기 디스플레이 상에서 빈도수에 따라서 정렬된 URL을 예시한다.
도 7은 그 자체로서의 포털 사이트의 메인 메뉴 및 빈도수 카운트에 의하여 정렬된 메인 페이지의 링크들의 다른 화면을 예시한다.
도 8은 본 발명에 따라 빈도수를 계산할 수 있는 장치의 블록도로서, 본 명세서에서는 실질적으로 이동 전화 단말기의 블록도를 도시한다.
도 1은 종래 기술에 대한 설명과 관련하여 이미 전술되었다. 만일 전체 링크들의 개수가 충분히 많다면, 특정 링크에 대한 평균 검색 시간은, 그 링크들에 의하여 어드레싱되는 웹 페이지들의 관심 대상(subject matter)과 같은 것에 기반하여 수행되는 완전 수동 정렬 방법에도 불구하고 필수적으로 증가한다.
도 2를 참고하면, 본 발명의 기술적 사상에 관련된 필수적 구성 요소는 1차 스토리지(204) 및 2차 스토리지(206)인 두 개의 스토리지들 및 제어 엔티티(202) 인데, 스토리지들은 이벤트 데이터를 저장하는 역할을 담당하고 제어 엔티티(202)는 갱신 및 빈도수에 관련된 정보를 제공하기 위해 요구되는 동작들을 실질적으로 수행한다. 1차 스토리지(204) 및 2차 스토리지(206) 및 제어 엔티티(202)는 동일한 물리적 장치(201) 내에 포함될 수도 있고 기능적으로 상호 연결된 수 개의 장치들에 분리되어 실장될 수도 있다. 1차 스토리지(204)는 208에 도시된 바와 같이 구성되는데, 208은 문자열로서 저장된 이벤트 타입 및 예를 들어 정수 또는 실수로서 저장된 이벤트 타입의 전체 카운트를 포함한다. 또한, 이벤트 타입에 좌우되는 기반(event type dependent basis)을 정의함으로써 도 2에 도시된 바와 같이 빈도수를 연산하는 것 역시 가능한데, 예를 들어, 전체 사용은 시간 단위로 측정되지만 액세스된 웹 페이지들은 방문된 횟수에 의하여 측정되도록 구현되는 것이 가능하다. 2차 스토리지(206) 내의 데이터는 하위의 상세 레벨(level of detail)을 가지고 저장되는데, 즉, 이벤트 타입 또는 이벤트 타입의 파생 인자(derived factor)를 입력으로 이용하여 해시 함수에 의하여 어드레싱될 수 있는 해시 테이블 내에 단지 이벤트 카운트(210)만을 포함하도록 구현될 수 있다. 만일 어느 정도의 메모리 공간이 2차 스토리지(206)에 할당될 수 있다면, 해당 이벤트 타입의 실 식별자(true identifier)를 저장하는 것이 바람직한데, 예를 들어 214에서 볼 수 있듯이 이벤트 타입으로부터 유도된 한정된 길이를 가지는 해시 값등을 저장하는 것이 바람직하다. 1차 스토리지(204)의 내부를 예시하는 다른 옵션(216)도 도 2에 제공된다. 도 2에 도시된 실시예에서, 본 발명에 따른 빈도수 카운팅 방법은 특히 인터넷 사이트/페이지 액세스들의 빈도수를 카운팅하기 위하여 사용된다. 기본적으로, 액세스된 모든 사이트/페이지는 본 발명에 의한 빈도수 카운팅 방법에 의하여 식별자로서 분리되어 처리되고, 동시에 이벤트 타입들의 자동 정의 동작은 액세스된 사이트/페이지들의 개별 URL들에 기반한다. 그러나, 서로에 대하여 비례하는 것이 분명한 사이트 및 페이지 빈도수는, 사이트/페이지 빈도수 모두의 독립적 빈도수 연산 동작을 수행하는 것이 선호되는 경우 두 개의 독립적 스토리지 내에 배치될 수도 있다. 그러면, 본 발명의 제1 실시예에서, 빈도수 카운팅을 수행하기 위한 기본적 방법이 더욱 상세히 설명된다.
도 3은 적용된 하드웨어 및 소프트웨어 솔루션들에 독립적인 기능적 레벨(functional level) 상에서 구현되는 제안되는 방법의 흐름도를 도시한다. 도 3에 도시된 방법이 개시된 이후(302), 빈도수가 카운팅될 이벤트 타입들이 304 단계에서 정의된다. 정의된 이벤트 타입들은 흔히 사용되는 사용 용도에 기반하여 가변 형태(flexible manner)로 선택되는 것이 바람직할 수 있는데, 그 예를 들면, 액세스된 웹 페이지들, 웹 페이지/사이트에 특이한 액세스, 전자 우편 읽기/보내기, 사용 시간 등과 같은 용도에 따라 선택될 수 있다. 반면에, 특히 알고리즘이 웹 브라우저와 같은 단일 응용 프로그램 내에 포함된다면, 알고리즘이 몇 가지 선결된 설정치들을 가지도록 하는 것이 좋은데, 예를 들어, 카운팅될 이벤트 타입들과 같은 설정치를 가지는 것이 바람직하며, 그 알고리즘은 시작 단계로부터도 독립적으로 동작함으로써 사용자는 자신이 명백하게 설정치를 바꾸기를 희망하지 않는 한 사용자는 설정치를 조작하느라고 시간을 보낼 필요가 없다. 단계 306에서, 어떠한 이벤트가 발생하고, 그 이벤트 타입이 카운팅될 이벤트 타입들의 목록에 포함되어 있는지 여부가 본 발명을 구현하는 회로/소프트웨어에 의하여 점검된다(308). 만일 해당 이벤트 타입이 카운팅될 목록에 포함되어 있지 않다면, 시스템은 후속 이벤트가 발생되도록 단지 대기한다. 또한, 이벤트 타입이 카운팅될 이벤트 타입들의 목록에 포함되어 있다면, 1차 스토리지(204)를 트래버싱(traversing)하는 방법으로(예를 들어 요소 대 요소 단위로), 해당 이벤트 타입이 이미 1차 스토리지(204)에 포함되어 있는지 여부를 점검한다(310). 1차 스토리지(204) 내의 단일 요소는 예를 들어 이벤트 타입 식별자를 위한 문자열 및 정수로 표시되는 카운트 값과 같은 두 가지 정보 단위(information unit)를 포함할 수 있다. 만일 이벤트 타입이 검색되면, 상응하는 카운트가 증가되고(312) 그 이후에 스토리지 요소들은 해당 스토리지 내의 선호된 정렬 방식을 유지할 수 있도록 재정렬되는데, 많은 경우에 가장 유리한 정렬 방법은 내림차순에 의한 것이다. 이벤트 타입이 검색되지 않는다면, 검출된 이벤트 타입에 관련된 2차 스토리지 내의 카운트는 증가되거나(314), 또는 해당 이벤트 타입이 전혀 검색되지 않을 경우에는, 해당 이벤트 타입에 대하여 2차 스토리지 내에 신규한 엔트리가 생성되고 초기화된다.
2차 스토리지에 액세스하기 위한 어드레싱 모드는 선택된 스토리지 기법에 좌우된다. 만일 해당 스토리지 내의 개별 요소들의 크기가 최소화되어야 한다면, 해당 이벤트 타입이 해시 함수의 입력으로서 사용될 수 있는데, 이 해시 함수는 해당 스토리지 내에 그 이벤트의 카운트에 대한 인덱스를 반환한다. 그러면, 해당 카운트가 증가된다. 이러한 방법에서, 수 개의 이벤트 타입들이 동일한 해시값을 가지는 것이 가능한데, 이렇게 되면 상응하는 카운터가 공통 해시값을 공유하는 모든 타입들의 이벤트들의 총 개수를 반환하게 되는 경우가 발생한다. 그러므로, 이러한 경우의 카운트는 실제 카운트값보다 더 크게 될 수 있다. 여기서, "해시 함수"라는 용어는 일반적으로 해시 함수라고 알려진 어느 특정 수학적 함수를 포함하지 않는다는 것과 기본적으로 다양한 상이하지만 적합한 옵션들이 가능하다는 것에 주의하여야 하는데, 그 이유는, 출력의 크기가 입력의 크기를 초과하는 일반화 함수는 스토리지 공간 절약이 목표인 본원 발명의 일 실시예와 같은 상황에서는 잘 동작되지 않을 수 있기 때문이다. 예를 들어, 입력 데이터(이벤트 타입 또는 이벤트 타입의 파생물(derivative)에 대한 단축화된 식별자로서 동작하는 해시 함수의 출력은 서명(signature)라고 명명될 수 있다.
2차 스토리지를 관리하기 위한 다른 옵션은 이벤트 타입들로부터의 해시 또는 상응하는 식별자를 연산하는데 개별적으로 기반하는데, 해시나 식별자를 2차 스토리지를 인덱싱하는데 사용하는 대신에, 해시 값들은 이벤트 타입 카운트와 함께 저장되고 2차 스토리지 내의 이벤트 타입 식별자로서 사용된다. 그러면, 결과적으로 얻어지는 해시 값/카운트 쌍들은(스토리지 요소들) 2차 스토리지 내에서 자유롭게 정렬될 수 있고, 실무상 스토리지 크기를 정의하는 요소들의 전체 개수는, 그 스토리지가 가장 빈번히 사용되는 이벤트들을 그들의 해시값 식별자를 이용하여 식별할 수 있을 것이기 때문에, 적응적으로 선택될 수 있다. 이벤트 타입의 카운트가 갱신되어야 하지만 해시 코드가 1차 스토리지 및 2차 스토리지 중 어느 것으로 부터도 검색되지 않는다면, 해당 이벤트 타입에 관련된 신규 데이터 스토리지 요소가 2차 스토리지 내에 생성되어야 하는데, 이 신규 데이터 스토리지 요소는 해당 카운트에 바람직한 초기화 값을 포함한다. 사용되는 해시 함수에 따라서, 충돌(conflicts) 현상은 여전히 가끔 발생될 수 있으나 충돌 현상은 제1 옵션의 경우에 비하여는 훨씬 감소될 것이다. 이 솔루션은 더욱 정확한 빈도수 연산 방법을 제공하는데, 그 이유는 충돌 현상이 거의 발생하지 않기 때문이다. 두 번째 솔루션의 단점은 2차 스토리지의 크기가 한정되어 있는 상황에서, 어떠한(빈도수가 낮은) 이벤트 타입들은 2차 스토리지로부터 폐기되어(dropped) 분실될 수 있다는 것이다. 그러므로, 정확하지 않을 경우에는 해당 카운트는 실제 카운트값보다 더 작을 수 있다.
전술된 바와 같은 제2 실시예를 2차 스토리지 내의 어드레싱 동작을 위하여 사용하면, 2차 스토리지 내의 요소들은 최종적으로 단계 316에서 정렬된다. 1차 스토리지 및 2차 스토리지 모두에 관련된 단순한 빈도수 갱신 단계에 첨가하여, 명백히 증가되는 카운트 값을 가지는 2차 스토리지 내의 제1 이벤트 타입이 1차 스토리지로 이동되어야 하는 특정한 상황이 가끔 발생될 수 있다. 1차 스토리지 및 2차 스토리지 사이의 데이터 교환 동작을 처리하기 위한 한 가지 방법은 예를 들어 2차 스토리지 내의 카운트 값이 갱신된 이후에 실행될 수 있다. 2차 스토리지 내의 갱신된 카운트가 1차 스토리지 내의 가장 작은 카운트와 비교되고, 만일 2차 스토리지 내의 카운트가 1차 스토리지 내의 최소 카운트보다 크다면, 이벤트 타입 및 관련된 카운트 정보 단위를 포함하는 두 개의 스토리지 요소들은 두 개의 스토리지 에 의하여 교환된다. 실장된 실시예에 따라 1차 스토리지 및 2차 스토리지 간의 저장 기법은 상이할 수 있기 때문에, 데이터를 교환한 이후에 데이터를 변환하는 작업이 더 필요할 수도 있다. 도 3에 도시된 기본 방법은 후술되는 바와 같이 다양한 방법으로 수정되거나 확장될 수 있다.
후술되는 의사코드(pseudocode)는 제안된 바와 같은 메모리 효율성을 가지는 빈도수 카운팅 알고리즘의 일 장치의 일반적 구조를 예시하며, 거의 모든 경우에 적응될 수 있는 최적의 솔루션인 것으로 이해되어서는 안된다. 두 번째로, 본 명세서에서 단일 명령(single instruction) 만을 이용하여 표시된 어떤 동작들은 전형적으로 목표 장치(target device)에서 적합하게 구현되기 위해서는 수 개의 명령들을 필요로 할 수도 있다. 예를 들어, "add_one_count" 함수 및 "count" 함수는 이벤트 타입을 키(key)로 이용하여 1차 스토리지에 액세스하는데, 이것은 후술되는 의사코드에서는 "if there exists i such that primary[i].event_type=e..." 라고 표시된다. 효율을 높일 필요가 있다면, 해시 테이블 또는 검색 트리(search tree)와 같은 액세스 구조가 1차 스토리지를 인덱싱하기 위하여 사용될 수 있다. 하지만, 많은 경우에는 단순한 선형 검색(linear search) 기법으로도 충분하다.
의사 코드는 두 개의 광역 파라미터를 포함하는데, 이것은 <string (event type), integer (count)> 쌍 내에서 1차 스토리지의 크기를 정의하는 m과, 카운트 값 또는 브라우저 추천 엔진에서는 특정 페이지의 클릭수(hits)를 지시하는 정수로서 표시된 2차 스토리지의 크기를 정의하는 n이다.
m 및 n을 선택할 때, 만일 1차 스토리지 및 2차 스토리지로 한정된 메모리 공간만이 사용될 수 있다면, 고품질 정보가 요청되는 최고 빈도수의 이벤트 타입들의 개수인 k에 대하여 어떤 고정된 값이 추정될 수 있다. m>k 가 되도록, 즉, 예를 들어 m=1.5*k 가 되도록 m 및 k를 선택한다. 그러면, 1차 스토리지의 테일(tail)의 0.5*k=0.33*m 부분이 k 개의 가장 빈도수가 높은 것들 및 2차 스토리지 간의 버퍼로서 남겨진다. 응용 프로그램 및 사용가능한 메모리의 용량에 따라서 c>m 이 되도록 선택하는데, 예를 들어, n=10*m 이도록 선택한다. 1차 스토리지 내의 엔트리가 2차 스토리지 내의 엔트리 보다 저장하는데 있어서 더 큰 정보량을 요청할 수 있는데, 그것은 이벤트 타입 등의 명칭이 얼마나 긴 지에 좌우된다는 것에 주의한다.
도시된 의사 코드는 수행되는 동작을 이해하기 더 쉽게 할 수 있도록 두 개의 슬래시를 부가하여 표시되는 코멘트들을 포함한다.
//기본 빈도수 카운팅의 의사 코드 실시예(Basic frequency counting pseudocode implementation)
공용 함수들(Public functions)
init://1차 스토리지 및 2차 스토리지의 셋업
add-one-count (string e)://이벤트 타입 e의 카운트를 하나 증가시킴
count (string e)://이벤트 타입 e의 (대략적) 카운트를 반환
kth. best (integer k)://<이벤트 타입, 카운트> 쌍 중 k번째로 높은 쌍을 반환(여기서 k<=m이다)
내부 함수들(Internal functions)
upgrade (integer hash, string e)://해시에 의하여 인덱싱된(최후에는 타입 e로 판단된) 카운트를 2차 스토리지로부터 1차 스토리지로 이동시키고 1차 스토리지로부터의 최소 카운트를 2차 스토리지로 다운그레이딩함
move up (integer i)://i번째 이벤트의 카운트가 증가된 후 카운트에 의하여 정렬된 1차 스토리지를 유지함
hash (string e)://문자열로부터 [1,n] 까지(2차 스토리지)로의 해시 함수
데이터 구조(Data structures)
1차(primary):
//m개의 <문자열, 정수> 쌍의 어레이로서, 이벤트 타입 및 해당하는 카운트들을 나타내는 어레이이며, 카운트에 따라 내림차순으로 정렬된 어레이이다. 콘텐츠들은 primary [i].count(i 번째로 높은 카운트) 및 primary[i]. event_type (i 번째로 높은 카운트를 가지는 이벤트 타입)의 형태로 참조된다. 인덱스들은 1부터 m 까지 변화된다.
2차(secondary):
// 정렬되지 않은 n개의 정수들(카운트들)의 어레이이다. 콘텐츠들은 secondary [i].count (어레이 내의 i 번째 엔트리에 관련된 카운트)와 같은 형태로 참조된다. 인덱스들은 1부터 n 까지 변화된다.
init 함수 ://1차 스토리지 및 2차 스토리지의 셋업
primary : = array of m <string, integer > pairs ; //a) < 이벤트 타입, 카운트> 쌍들
secondary : = array of n integers ; //b) 카운트들
for (i : = 1 to m)
primary [i]. event_type : ="" ;
primary [i]. count : = 0;
endfor;
for (j : = 1 to n)
secondary [j]. count : = 0 ;
endfor ;
add_one_count (string e) 함수//이벤트 타입 e 의 카운트를 1만큼 증가시킴
if (there exists i such that primary [i]. event type = e) then
primary [i]. count++ ;
move_up (i) ;
else
hash : = hash(e) ;
secondary[hash]. count++ ;
if (secondary [hash]. count > primary [m]. count) then upgrade (hash, e) ;
endif ;
count (string e) 함수 ://이벤트 타입 e 의 (대략적) 카운트를 반환
if (there exists i such that primary [i]. event-type = e) then
return primary [i]. count ;
else
hash : = hash (e) ;
return secondary [hash]. count ;
endif ;
kth-best (integer k) 함수 : //<이벤트 타입, 카운트> 쌍 중 k 번째로 높은 쌍을 반환(k<=m)
if (k < = m and primary [k] ! = 0) then
return pair (primary [k]. event_type, primary [k]. count) ;
else
return pair ("", 0) ;
endif ;
upgrade (integer hash, string e) 함수 : // 해시에 의하여 인덱싱된(최후에는 타입 e로 판단된) 카운트를 2차 스토리지로부터 1차 스토리지로 이동시키고 1차 스토리지로부터의 최소 카운트를 2차 스토리지로 다운그레이딩함
//1. 2차 스토리지 내의 공간 해제(release) :
count : = secondary [hash]. count ;
secondary (hash). count : = 0 ; //2. 1차 스토리지로부터 2차 스토리지로 카운트를 복사:
down_hash : = hash (primary [m]. event_type) ;
secondary [down_hash] : = primary [m]. count ; //3. 업그레이딩된 정보를 1차 스토리지로 복사:
primary [m]. event_type : = e ;
primary [m]. count : = count ;
move_up (m) ;
move_up (integer i) 함수 : //i 번째 이벤트가 증가된 후, 카운트에 의하여 정렬된 1차 스토리지를 유지
while (i > 1 and primary [i]. count > primary [i-1]. count)
swap primary [i] and primary [i-1] ;
i-- ;
endwhile ;
hash (string e) 함수 : //문자열로부터 [1,n](2차 스토리지로)의 변환을 수행하는 해시 함수
//종래 기술에 의한 이용가능한 다양한 해시 함수에 대해선,
//-M. V. Ramakrishna and J. Zobel : 문자열 해싱 함수들의 성능(Performance in practice of string hashing functions.)
//-Proc. Fifth Int. Conf. on 개선된 응용 프로그램을 위한 데이터베이스 시스템(Database Systems for Advanced Applications), Melbourne, Australia, April 1-4, 1997.
//-D. E. Knuth : 컴퓨터 프로그래밍 기술. 3판: 정렬 및 검색(The Art of Computer Programming. Volume 3 : Sorting and Searching,), Addison-Wesley, Reading, Massachusetts, 1973.
//T. H. Cormen, C. E. Leiserson, and R. L. Rivest : 알고리즘 입문(Introduction to Algorithms), MIT press, Cambridge, MA, 1990. 등을 참조한다. 또,
//Ramakrishna & Zobel이 제안한 바와 같이, C++ 문법을 사용하는 단순하고 실용적인 방법에서는:
int h = strlen (e) ;//최초에는 32바이트인 것으로 가정된다
for (char key = e ; *key ! = 0 ; key++) // 여기서 '^' 는 비트 단위 XOR 이고, <<은 좌측 천이, 및 우측 천이를 나타낸다.
h=h^(h<< 5+h >>2+*key) ;
return (h % n) + 1 ;
전술된 바와 같이, 기본적인 빈도수 카운팅 알고리즘은 단순한 방법으로 구현될 수 있고, 이 솔루션을 구현하는 인터페이스는 수 개의 상이한 함수들만을 포함할 수 있을 수 있는데, 이 함수들에는 특정 이벤트 타입이 발생될 경우 카운트를 증가시키기 위한 함수(add_one_count), 원하는 이벤트 타입의 카운트를 1차 스토리지 목록으로부터 검색하기 위한 함수(count), 또는 이에 상응하여 1차 스토리지 내에 저장된 이벤트 타입들 중 k 번째로 높은 이벤트 타입(kth_best)의 데이터도 검색하기 위한 함수가 포함된다. 2차 스토리지는 실제 이벤트 데이터인 명칭, 또는 다른 설명적인 기술자들이 배제된 빈도수만을 포함한다는 점을 상기하면, 2차 스토리지로부터 단순한 숫자와 같은 빈도수 데이터만을 검색하는 작업은 가치가 있는 일이 아니다.
이벤트가 발생하면, 본 발명에 따른 장치는 add_one_count 함수를 호출하고 이 함수에 현재 이벤트 타입을 제공하게 될 것이다. 이벤트 타입이 이미 1차 스토리지에 존재하는지 여부에 대해서는 상응하는 함수에 의하여 점검된다. 만일 이벤트 타입이 1차 스토리지에 존재한다면, 상기 이벤트의 카운트가 증가된다. 이러한 실시예에서, 증가치(increment)는 1 로 고정되나, 실제로는 이벤트 타입 또는 다른 유용한 인자들에 따라서 증가치가 결정될 수 있다. 더 나아가, 내부 함수 move_up 이 호출되어 1차 스토리지를 재정렬한다. 그러나, 해당 이벤트 타입이 1차 스토리지 내에 존재하지 않는다면, 내부 함수인 hash에 의하여 이벤트 타입(또는 그 이벤트의 다른 원 특성(property)들) 로부터 상응하는 해시값이 연산되고, 결과적으로 구해지는 2차 스토리지 내의 카운트가 선택된 숫자만큼 증가되는데, 도시된 실시예에서는 증가치가 1로 고정된다. 만일 그 카운트가 1차 스토리지에 삽입될 수 있을 만큼 충분히 크다면, 내부 함수 upgrade 가 호출되고, 이 함수는 그 카운트를 1차 스토리지로 이동시키고 1차 스토리지로부터의 최소 카운트를 2차 스토리지로 다운그레이딩(downgrade) 한다. 더 나아가, 함수 upgrade 는 move_up 함수를 호출하여 1차 스토리지를 정렬한다.
count 및 kth_best 함수들은 크게 복잡하지 않게 구현될 수 있다. count 함수는 1차 스토리지를 트레버싱(traverse)하고 입력으로서 주어진 이벤트를 검색한 다. 입력 이벤트가 발견되면, 상응하는 카운트가 반환되고, 발견되지 않는다면, 이벤트 타입으로부터 우선 해시값을 연산하고 그 카운트를 점검함으로써 해당 카운트가 2차 스토리지로부터 검색된다. kth_best 함수는 이벤트 타입 및 1차 스토리지 내의 k 번째 요소의 카운트를 반환한다.
이론상으로, 단일 카운트가 add_one_count 동작을 수행하는 동안에 사용된 데이터 타입의 제공 가능한 최대 값을 전달하려 시도할 때에는 수치적으로 오버플로우(numerical oveflow)가 발생될 확률이 적지만 존재한다. 드물지만 존재할 수 있다고 가정할 수 있는 이러한 상황에서, 모든 카운트들은 스케일 다운(scale down)됨으로써 그들의 상호 순위는 보존할 수 있으나 원 카운트 수치를 잃게 되거나, 가능할 경우 단일 이벤트 타입의 데이터 타입이 변경됨으로써 더 큰 숫자를 지원하도록 할 수도 있는데, 예를 들어, 데이터 타입이 정수 지원 타입에서 장 정수(long integer) 타입으로 변경될 수 있다.
후속하여, 최근의 이벤트들에는 더 큰 가중치가 부여되는 경우에 특히 적합한 방식으로 빈도수 카운팅을 수행하기 위한 다른 실시예가 제공된다. 이러한 실시예는 다음과 같은 특징을 가진다:
- 카운트들은 정수가 아닌 실수로 저장된다.
- 이벤트 타입의 빈도수는 단지 1이 아닌 모든 실수에 의하여 변경될 수 있으므로, 상이한 이벤트에 상이한 가중치를 부여하는 것이 가능하다.
- 시간이 진행될 수록 모든 카운트들을 감소시키는 에이징 매커니즘(aging mechanism)이 존재한다. 이 매커니즘은 발생된 지 오래된 노후 이벤트일수록 점진 적으로 가중치를 낮게 부여하는(gradual downweighting)을 허용한다. 에이징 인자(전형적으로는 1보다 약간 작다)는 새로운 전역 파라미터(global parameter)이다. 효율성을 고려하면, 카운트들은 갱신되지 않고, 오히려 정정 인자(correction factor)는 유지되고 입 출력 단계에서 값들을 조절하는데 사용될 수 있다.
- 상이한 두 개의 이벤트 타입들의 빈도수가 혼합될(mixing) 확률은 극히 낮다.
- 얻어지는 에러는 빈도수의 하향 예측값(underestimates)이다(그러나, 에이징 인자가 충분히 작고 스토리지의 크기가 충분하다면, 그 에러는 무시할 수 있을 정도이다).
- 더욱 정확한 빈도수를 얻으려면 더 많은 메모리 및 처리 능력이 요구된다.
2차 스토리지는 <해시 코드, 카운트> 쌍들을 포함하는 테이블이며, 이러한 쌍들은 카운트를 기준으로 내림차순으로 정렬된다. 고유한 해사 코드들의 전체 개수는 2차 스토리지의 크기보다 현저히 크다. 코드는 3개의 광역 파라미터를 포함하는데, m은 제1 옵션에서의 <string (이벤트 타입), real(카운트)> 쌍에서와 같이 1차 스토리지의 크기를 정의하고(여기서, 정수가 실수로 바뀌어 카운트 변수를 구성한다는 점에 주의한다), n은 <long <해시 코드), real(카운트)> 쌍에서의 2차 스토리지의 크기를 정의하고, 신규한 변수 p는 카운트가 감소되는 단위인 에이징 인자(실수)를 정의한다.
다른 솔루션에서, 존재하는 기존의 함수들인 init, add_count(반드시 +1 값만큼 증가시킬 필요 없다), count, 및 kth_best 와 같은 함수들과 더불어 신규 공 용 함수 하나가 도입된다.
downweight://에이징 메커니즘으로, 모든 카운트를 인자 p로 승산한다
이에 따라서, 다음과 같은 신규한 내부 함수들이 기존 함수인 upgrade, move_up, 및 hash 에 덧붙여 소개된다.
move_down (integer i): // 카운트 값이 i 만큼 감소된 뒤 카운트에 의하여 정렬된 1차 스토리지를 유지한다
move_up_secondary (integer i): //카운트 값이 i 만큼 증가된 뒤 카운트에 의하여 정렬된 2차 스토리지를 유지한다
move_down_secondary (integer i): //카운트 값이 i 만큼 감소된 뒤 카운트에 의하여 정렬된 2차 스토리지를 유지한다
readjust_counts : //정정 인자 f를 이용하여 모든 카운트를 갱신하고, f를 리셋한다
데이터 구조(Data structures)
1차:
//m 개의 < string, real > 쌍의 어레이로서, 제1 실시예에서의 1차 스토리지에 대응된다
2차:
//n 개의 < long, real > 쌍의 어레이로서, 카운트에 의하여 내림 차순으로 정렬된 이벤트 타입들 및 그들의 카들의 해시 코드를 나타낸다. 콘텐츠들은, secondary [i]. count (어레이 내에서 i 번째로 높은 카운트) 및 secondary [i]. hash (그 어레이 내에서 i 번째로 높은 카운트를 가지는 해시 코드)의 형태로 표시된다. 인덱스는 1 내지 n 까지이다.
f :
//에이징을 위한 정정 인자이다: 조정된 "실제" 값은 f*count 이다. 이와 같은 방법으로, 어느 카운트가 a 만큼 증가된다면, 최초 값은 a/f 만큼 갱신되어 내부 표시치(internal representation)에 비례하는 값을 획득한다.
//빈도수 가중치 부여 동작을 지원하는 더욱 다양한 빈도수 카운팅 실시예에 대한 의사 코드 실시예
init 함수 ://1차 스토리지 및 2차 스토리지의 셋업
primary : = array of m < string, real > pairs ;// < event type, count > 쌍들임
secondary : = array of n < long, real > pairs ;// < hash (event type), count > 쌍들임
for (i : = 1 to m)
primary [i]. event_type:= "";
primary [i]. count : = 0 ;
endfor ;
for (j : = 1 to n)
secondary [j]. hash : = 0 ; a
secondary [j]. count : = 0 ;
endfor ;
f : = 1 ;//카운트들을 위한 정정 인자들임
add_count (string e, real a) 함수 : //이벤트 타입 e의 카운트를 a 만큼 증가(또는 감소) 시킴
if (there exists i such that primary [i]. event_type = e) then
primary [i]. count : = primary [i]. count + a/f ;
if (a > 0) then
move up (i) ;
else
move down (i) ;
endif ;
if (primary [i]. count > FLT_MAX/2*p) then
readjust counts ;//정확성에 문제가 발생하면 카운트를 갱신함
endif ;
else
hash : = hash (e) ;
if (there exists i such that secondary [i]. hash = hash) then
secondary [i]. count : = secondary [i]. count+ a/f ;
else
secondary [n]. hash : = hash ;
secondary [n]. count : = a/f ;
i : = n ;
endif ;
if (secondary [i]. count > primary[m]. count) then
upgrade (i, e) ;
else
if (a > 0) then
move_up_secondary (i) ;//2차 스토리지를 정렬함
else
move_down_secondary (i) ;
endif ;
endif ;
endif ;
count (string e) 함수 ://이벤트 타입 e 의 (대략적) 카운트를 반환함
if (there exists i such that primary [i]. event type = e) then
return primary [i]. count*f ;
else
hash : = hash (e) ;
if (there exists i such that secondary [i]. hash = hash) then
return secondary [i]. count*f ;
else
return 0 ;
endif ;
endif ;
kth_best (integer k) 함수 ://k 번째로 높은 < event type, count > 쌍을 반환한다(k<=m)
if (k < = m and primary [k] ! = 0) then
return pair (primary [k]. event_type, primary [k]. count*f) ;
else
return pair ("", 0) ;
endif;
downweight 함수 ://에이징 메커니즘으로서, 모든 카운트를 인자 p로 승산한다
f = f * p ;//실제로 카운트를 승산하는 것이 아니라, 단지 정정 인자를 갱신한다
if (f < FLT_MIN*2/p) then // 정밀도에 문제점이 있을 경우에 카운트 를 갱신함
readjust_counts ;
endif ;
readjust_counts 함수 // 정장 인자 f를 이용하여 모든 카운트를 생신하고 f를 리셋한다. 이 함수는 수치적 정밀도에 문제가 발생할 때 호출된다
for (i : = 1 to m)
primary [i]. count : = primary [i]. count * f ;
endfor ;
for (j : = 1 to n)
secondary [j]. count : = secondary [j]. count * f ;
endfor ;
f : = 1 ;
upgrade (integer i, string e) 함수: //최후에 타입 e로 관찰된 바 있는 카운트로서 i 라고 인덱싱 되는 카운트를 2차 스토리지로부터 1차 스토리지로 이동시키고 1차 스토리지 내의 최소 카운트를 2차 스토리지로 다운그레이딩함.
//1. 2차 스토리지 내의 공간 해제(release):
count ; secondary [i].count ;
remove_from)secondary (i) ;//i 번째 행을 2차 스토리지로부터 제거하고 [1..i-1] 행들을 한 행씩 하향 천이시켜 [2..i] 행들로 만들어, 2차 스토리지 내의 제1 행이 비도록 한다. 이 함수는 본 명세서에서는 꼭 명확하게 제공된 것은 아니다.
//2. 1차 스토리지의 카운트를 2차 스토리지로 복사한다:
down hash : = hash(primary [m]. event_type) ;
secondary [1]. hash : = down_hash ;
secondary [l]. count : = primary [m]. count ;
move_down_secondary (l) ;
//3. 업그레이딩된 정보를 1차 스토리지로 복사
primary [m]. event_type : = e ;
primary [m]. count : = count ;
move_up (m) ;
move_up (integer i) 함수 :
//카운트가 i 만큼 증가된 후에 카운트에 의하여 정렬된 1차 스토리지를 유지한다
while (i > 1 and primary [i]. count > primary [i-l]. count)
swap primary [i] and primary [i-1] ;
i-- ;
endwhile ;
move_down (integer i) 함수:
//카운트가 i 만큼 감소된 후에 카운트에 의하여 정렬된 1차 스토리지를 유지한다
while (i < m and primary [i]. count < primary [i+l]. count)
swap primary [i] and primary [i+l] ;
i++ ;
endwhile
//주의: 이 카운트가 2차 스토리지 내의 최대 엔트리보다 작은 값을 갖더라도 1차 스토리지 및 2차 스토리지 내의 스위치 엔트리(switch entries)에 다운그레이딩 동작을 수행하지 않는다. 그 이유: 2차 스토리지 내의 엔트리를 위한 이벤트 명칭들을 사용할 수 없기 때문이다.
move_up_secondary (integer i) 함수 :
//카운트가 i 만큼 증가된 후에 카운트에 의하여 정렬된 2차 스토리지를 유지한다
while (i > 1 and secondary [i]. count > secondary [i-l]. count)
swap secondary [i] and secondary [i-1] ;
i-- ;
endwhile ;
move_down_secondary (integer i) 함수:
//카운트가 i 만큼 감소된 후에 카운트에 의하여 정렬된 2차 스토리지를 유지한다
while (i < m and secondary [i]. count < secondary [i+l]. count)
swap secondary [i] and secondary [i+1] ;
i++ ;
endwhile ;
hash (string e) 함수 :
//문자열을 2차 스토리지 내에서 [1,2^32-1]로 변환하는 해시 함수
//Ramakrishna & Zobel에 의한 C++ 형식에 따라서 구현됨:
int h = strlen (e) ;//정수는 32 비트인 것으로 가정된다
for (char *key = e ; *key ! = 0 ; key++)
//"^"는 비트단위 XOR 연산을, <<는 좌측 천이를, >>은 우측 천이를 나타내고 "%"은 모듈로(modulo) 연산자를 나타낸다.
h = h ^ (h <<5 + h >>2 + *key) ;
return h + 1 ;
이와 같은 다른 실시예에서, 빈도수 가중치 부여 동작은 하향 가중치 부여 주기(downweight period) 가 변경되거나, 또는 하향 가중치가 다른 식으로 실행되어야 할 때마다, 정정 인자 f를 공용 에이징 인자 p로 단지 교체함으로써 구현될 수 있다. 카운트들의 실제 가중치 부여 동작은 카운트들이 1차 스토리지 또는 2차 스토리지로에 실제로 삽입되거나 이들로부터 검색될 때에만 실행되어야 한다. add_count 함수가 입력 파라미터로서 추가된 카운트의 양을 취함으로써 가장 기초적인 실시예에서의 add_one_count 함수와 약간 상이하기 때문에, 상이한 이벤트 타입들은 독립적으로 가중치 부여될 수 있다.
본 발명의 제2 실시예에서, 다목적 빈도수 카운팅 방법을 구현하기 위한 전 술된 바와 같은 기본적 구조는 특히 브라우저 추천 엔진의 코어(core)를 구현하는 목적을 가진다. 추천 엔진은 사이트, 페이지, 또는 이들 모두를 포함하는 인터넷 링크들을 이러한 사이트 또는 페이지를 생성하거나, 정렬하거나 및 추천 목록으로부터 이들을 제거함으로써 유지한다. 더 나아가, 사이트/페이지들 중 더 빈번히 액세스되거나 최근에 액세스된 것들이 다른 것들에 비하여 더 선호된다. 일반적 접근법은 각 페이지가 해당 페이지의 예측된 관련성(estimated relevance)을 반영하는 점수(score)를 가진다는 것이다. 최근에 최초로 액세스된 사이트들 역시 선호되는데, 그 이유는 엔진이 신규 관심 사항에 신속히 적응함으로써 수동으로 URL을 입력해야하는 필요성을 감소시켜야 하기 때문이다. 사이트 또는 페이지의 전체 숫자는 빈도수에 따라서 자연적으로 증가하는데, 반드시 선형으로 증가하여야 하는 것은 아니다.
도 4는 현대의 이동 통신 단말기(402)의 디스플레이 상에 표시되는 가상 화면으로서 본 발명에 따라 제안되는 방법을 실행하는 화면을 개시한다. 도시된 바와 같이, 자주 방문하는 인터넷 페이지 또는 사이트들은 목록의 상부에서 볼 수 있으며, 표시된 모든 링크들을 스크롤하거나 건너 뛰면서 선택하는데 관련된 곤란함을 겪지 않고도 선택할 수 있다. 분리되어 저장된 사이트 및 페이지 파티션을 포함하는 단순 URL 정보에 추가하여, HTML 코드로부터 페이지 명칭/타이틀(또는 이에 상응하는) 필드(field)가 추출되어 빈도수 데이터와 함께 저장될 수 있다. 또는, 사용자는 선호하는 사이트/페이지들에 대한 식별자를 정의할 수도 있다. 이와 같이 자동으로 생성되거나 사용자에 의하여 추가된 식별자 데이터는 URL 자체보다 더 욱더 대상 사이트/페이지에 대해 자세히 기술할 수 있으며, 따라서 도 4에 도시된 바와 같이 랭킹 목록의 시각화 목적에 있어서 URL과 함께 사용되거나 URL 대신에 사용될 수 있다.
페이지 p404 당 저장되어야 하는 정보의 예를 들면, URL, 상응하는 URL이 문자열 형태로 저장되고 페이지 식별자로서 사용되는 상응하는 페이지의 명칭 또는 점수(score)를 포함할 수 있는데, 명칭(어떠한 방법으로든 검색되면)은 문자열 형태로 저장되고 점수는 부동 소숫점(floating point number) 형태로 저장된다. 뿐만 아니라, 부울대수 타입의 소위 visited_this_session 변수가 현재 브라우저 세션 동안의 방문을 지시하기 위하여 사용된다. 이에 따라서, 사이트 s406 당 유지된 정보는 문자열 형태로 저장되어 사이트 식별자로서 사용되는 사이트의 주소, 부동 소수점 형태로 표현된 점수, 및 부울대수 형태로 표현되는 visited_this_session 변수가 포함된다. 또한, 사용자에 의하여 정의될 수 있는 개별 식별자(ID)가 도움이 된다고 판단되면 디스플레이 상의 사이트 시각화 작업을 위하여 사용될 수 있다.
만일 방문된 페이지 및 상응하는 사이트들에 대한 전술된 데이터가 저장되고 특정 사이트 하에서 빈도수에 따라 정렬된 페이지들을 검색할 필요성이 대두된다면, 페이지 스토리지로부터의 검색 동작은, 사이트 URL을 해당 페이지 스토리지로부터 다른 사이트들에 관련된 빈번하게 액세스된 페이지들을 제거하는(filter out)데 사용되는 조건 요소로서 사용함으로써 수행될 수 있다.
유용한 광역 데이터 구조들은 일련의 추천 페이지들(Rec), 현재 세션 동안에 액세스된 일련의 신규 페이지들(New_Rec), 일련의 추천 사이트들(Sites), 부동 소수점 형태로서의 점수들의 전체 수(total.score), 및 해당 세션 동안의 방문들의 개수(totalvisited_this_session). 등을 포함한다.
사이트-레벨 추천 기능이 구현되려면 사이트 당 저장된 정보가 필요하다. 예를 들면, 추천 메인 메뉴는 랭킹된 사이트들을 포함할 수 있으며, 사용자에 의하여 한 개의 사이트만이 선택되었다면, 상응하는 서브 메뉴로서 해당 사이트 내의 페이지에 연결된 랭킹된 링크를 포함하는 서브 메뉴가 팝업된다. 또한, 사이트-레벨 추천이 구현되지 않는다면 Sites 구조가 사용될 수도 있다. 그러나, 이것은 명확히 저장될 필요는 없다:{s.address|s in Sites}={address(p.URL)|p in Rec}, 즉 Sites 는 저장된 페이지들의 사이트들을 포함한다. 만일 추천이 단지 (재정렬된) 북마크를 포함하며, 단지 p.score, p.visited_this session, total.score, total.visited_this_session 이 북마크를 위해 기 요구된 데이터에 첨부하여 요구된다. 동작 관점에서, 전술된 데이터 구조는 후술되는 바와 같이 구현될 수 있다(스코어(score)를 갱신하는 동작은 전술된 바와 같은 함수를 이용함으로써 효과적으로 구현될 수 있음에 유의한다).
- 브라우징 세션 이전
Rec 내의 모든 페이지들 p 에 대해서, p.visited_this_session = false 로 설정
Sites 내의 모든 사이트들 s에 대해서, s.visited_this_session = false 로 설정
- 세션 동안에, Rec 내의 페이지 p에 대해 요청되면;
p.visited_this_session = true 로 설정
P의 사이트 S에 대해서 s.visited_this_session = true 로 설정
//같은 세션 네에 페이지(또는 사이트)가 방문되었다면, 방문 횟수에 관계없이 스코어가 특정 양만큼 증가됨
- 세션 이후에, 모든 스코어 및 정렬을 갱신한다:
Rec 내의 모든 페이지들 P 에 대하여: update_score (p)를 호출
Sites 내의 모든 사이트들 s 에 대하여: update_score (s)를 호출
update_score(total)를 호출
update_score(u) 함수 {
u. score = u. score *session_decay_constant
if u.visited_this_session = true then
u. score = u. score*frequency_decay_constant + 1
//0 내지 1 사이의 값을 가지는 decay_constant 가 적응 속도(adaptation speed)를 결정한다
Rec 내의 추천들 p를 그들의 스코어인 p.score 에 따라 내림차순으로 정렬
동일한 세션 중에, Rec 또는 New_rec 내에 포함되지 않은 페이지 p에 대한 요청에 의하여 신규한 페이지들이 방문된다면, 추천 p 가 생성되고 New_rec 내에 삽입되고 다음과 같은 정보가 저장된다.
p. URL: 페이지의 URL
p. name: 페이지의 타이틀(선택된 작명 장면(naming scene)에 따른다)
p. score =0// 개별 페이지는 오직 한번 방문된 이후에는 추천되지 않는다
if address (p. URL) is not in Sites and is different from the sites in New_rec
set p. score = 1
// 신규한 사이트는 한번의 방문 이후에도 이미 추천되는데, 그 사이트 내의 첫 번째 페이지만 추천된다
만일 p 가 이미 New_rec 내에 존재한다면, 아무 동작도 수행되지 않는다. 세션 이후에, 및 추천 스코어가 New_rec 내의 각 엔트리 p에 대해서 갱신된 이후에:
사이트 주소(p.URL)를 가지는 사이트의 엔트리가 신규하게 Sites에 추가되고(만일 아직 존재하지 않았다면), s.score=1 로 설정된다.
p는 Rec 에 추가되고 New_rec 로부터 제거된다.
가용 메모리 자원에 따라서, New_rec에 의하여 요구되는 공간은 해싱 동작에 의하여 감소될 수 있는데, 예를 들어, URL 및 명칭은 신규한 엔트리로서 저장되지 않고, URL로부터 유도된 해시 키만이 저장된다. 그러면, URL 및 명칭은 추후 다시 방문이 이루어 진다면, 제2 회째의 방문에 기록된다. 시간 스탬프(time stamp)가 최초 데이터 구조에 추가됨으로써 데이터를 자동으로 만료시키는 동작을 용이하게 할 수 있다. 압축률을 높이기 위하여, k 개의 최적 추천들만이 모든 정보를 포함하여 메모리에 저장되는데, k 는 사용자에게 표시되어야 하는 추천들의 최대 숫자보다 같거나 커야 한다. 추천들의 나머지는 해싱을 이용하여 저장된다. 만일 해시된 페이지들이 상위 k 개의 페이지들에 속하게 된다면, 이것은 1차 스토리지로 업그레이드 된다. 개별적으로, 어떤 페이지가 최적의 k 개의 페이지들로부터 동떨어지게 된다면, 그 페이지는 해시 테이블로 이동된다. 아직도 해시 테이블 내에 충돌이 발생될 가능성이 있지만, 해시된 페이지들은 자주 방문되지 않기 때문에 그 영향은 다소 중요하지 않다. 해시 테이블은 작을 수 있는데, 실무상 수 킬로바이트이면 충분할 수 있다.
채택될 수 있는 스코어 방법의 예를 들면, 지수적으로 감소하는 곡선을 이용할 수 있다. 스코어가 점진적으로 감쇄했던 update_score(u) 함수로 부터의 p. score = p. score*session_decay_constant 방정식을 상기한다. 최근의 이벤트들은 더 큰 가중치를 가지지만, 예전의 이I들도 어느 정도의 가중치를 가진다. 스코어들은 세션별로(시간 단위에 의하여 구분된 세션), 캘린더 타임(calendar time)별로(예를 들어, 날짜를 가지는 시스템 클록), 또는 다른 선호되는 기준에 의하여 감쇄되도록 조절될 수 있다. 스코어링(scoring) 세션 별로 감쇄한다면, 이러한 스코어링 역시 빈도수와 유사하게 사용될 수 있다. 임의의 모든 두 페이지 p1 및 p2에 대하여, pl. score/p2. score 의 비는 일정하게 유지되고, 방문되지 않은 페이지들의 상대적 스코어들은 변화되지 않는다. 최근의 세션에의 페이지 방문 수는 다음과 같은 것을 고려하여 스코어 내에서 1 인 것으로 카운팅될 수 있다.
if p.visited this session = true
then p. score = p. score *frequency_decay_constant + 1
그러므로, 페이지에 방문하는 자가 있으면 에이지 스코어(age score)는 점진적으로 감쇄하며, 높은 빈도수수들은 다운 스케일링 되는데, 그 이유는 예를 들어 5회 방문에서 50회 방문으로 증가하는 것이 500회 방문에서부터 550회 방문으로 증가하는 것보다 사용자에게는 더욱 중요할 수 있기 때문이다.
방정식 p. score = p. score * decay_constant 및(세션 및 빈도수 감쇄 상수들을 다룬다) 지수적 감쇄를 고려하면, t 개의 시간 단위(time unit)(예를 들어 세션) 이전에 발생된 이벤트의 기여도(contribution) score (t) =decay_constant^(t_l)의 형태로 기록될 수 있다. 예를 들어, session_decay_constant = 0.9 라고 가정하면,
최근의 세션에서는: score(l) = session_decay_constant^(1_l) =1
이전의 세션에서는: score (2) =session_decay_constant^(2_1) =0.9
세션 10개 이전에서는: score(10) =session_decay_constant^(10_1) = 0.387 이다.
또는, 동일한 수식이 score (t) = 2^-(t-l)/h라고 씌여질 수도 있다. h 개의 시간 단위 이후에 동일 세션의 기여도가 절반으로 감소되고 이 경우 절반 수명(half life) h를 한정하는 것이 decay_constant보다 용이할 수 있으며, 여기서 decay_constant =2^-1/h 가 decay_constant를 획득하는데 사용될 수 있다. 동일 페이지가 모든 세션 내에서 방문될 최대 스코어는 감쇄 상소(decay constant)에 의 하여 한정된다. 즉, 스코어가 크면 감쇄에 의하여 버려지는 양은 스코어에 1을 가산하는 것보다 커진다.
p. score' 라는 것은 신규 스코어를 나타낸다:
p. score'= p. score*session_decay_constant* frequency_decay_constant + 1
최대 p. score에 대하여, p. score' ≤ p. score를 만족하고, 그렇기 때문에,
p. score ≤ 1/(1- session_decay_constant* frequency_decay_constant)을 만족한다.
예를 들어, session_decay_constant = frequency_decay_constant = 0.9 ⇒ p. score ≤ 5.3 이다.
스코어들의 범위는 감쇄 상수에 따라 변화되며, 상이한 감쇄 상수 간의 절대치는 비교될 수 없다. 감쇄 상수가 변경되면 그 효과는 점진적으로 나타내는데, 그 이유는 현재 값은 감쇄 상수의 과거 값에 의존하기 때문이다.
매 i 번째 액세스되는 페이지들의 스코어 곡선의 예시가 도 5에 도시되는데, 도 5에서 i = 1, 3, 5, 10, 15이다. 페이지에 방문자가 있으면 스코어는 더 높게 증가되나, 방문자가 없으면 스코어는 감쇄한다. 도 5에서, session_decay_constant 및 frequency_decay_constant 는 동일하도록 설정된다(즉, 0,9 이며, h는 약 6.6인 것으로 설정된다).
일반적으로, 단순한 스코어들에 비하여 확률은 더 광범위한 해석법을 제공한 다. 페이지 액세스 확률은 페이지 대 전체 스코어의 단순 비율에 의하여 연산될 수 있다. Probability(사용자가 페이지 p를 방문)=p.score/total.score 인데, 여기서 total.score 란 획득될 수 있는 최대의 숫자이다. 예를 들어, 만일 추천량을 선택할 수 있다면, 어떤 바람직한 레벨에 관한 액세스 확률(예를 들어 0.7)을 가지는 4 개의 최대 추천치들이 선택될 수 있다. 개별적으로, 사이트 액세스 확률은 s.score/total. score 의 형태로 연산될 수 있다. 더 나아가, 2-레벨 추천의 조건부 확률, 즉, 사이트 내에 페이지 추천이 이루어질 확률, 은 Probability(사용자가 사이트 s에서 페이지 p에 방문 | 사용자가 사이트 s를 방문) = p.score/ s.score. 각 사이트 당 적어도 0.75의 조건부 확률을 가지는 예를 들어 고작 2 개의 최적 추천들이 이미 제1 레벨에 있다는 것을 밝힐 수 있다. 페이지에 방문한 이후에, 동일한 세션 내에 동일한 페이지를 재방문할 확률은 감소되어야 하는데, 예를 들어, p.score/ s.score/2 처럼 감소되어야 한다.
도 6은 이동 전화 디스플레이 상에 도시되는 두 개의 화면을 개시한다. 좌측(602)에 도시된 화면은 빈도수에 대한 내림차순으로 정렬된 랭킹된 사이트들을 나열하는 추천 메뉴를 예시한다. 그러면, 사용자는 선호하는 사이트를 선택하고 정렬된 목록 또는 페이지에 액세스할 수 있는데, 화면(604)을 보면 그 사이트 내에서 가장 빈번히 및/또는 최근에 방문된 페이지를 표시한다(예를 들어 최후 액세스로부터 경과한 시간이 측정된다). 이러한 종류의 구조적 접근법은 사용하기 용이하며, 사용자가 찾는 링크에 이미 방문한 바 있다면 사용자로 하여금 해당 링크를 검색하는 데 최소한의 노력만을 요구하도록 한다. 더 나아가, 이전에 방문되지 않 은 링크들은 예를 들어 정렬된 목록의 밑에 표시됨으로써 사용자가 그 링크들을 따로 검색할 필요 없도록 할 수도 있다. 또한, 사이트/페이지 목록은 전술된 계층적 사이트 및 관련된 페이지 타입 접근법에 대해 공부할 필요없이 직접적으로 검색될 수도 있는 것이 바람직하다.
본 발명의 전술된 바와 같은 실시예를 참조하면, 빈도수에 따라서 정렬된 목록들을 찾아다니는 작업을 더 용이하게 하기 위한 다른 수단이 존재한다. 예를 들어, 사전에 액세스되거나 다른 식으로 연관되는 사이트/페이지 링크들에 상이한 색/스타일을 이용하여 강조 처리(highlight)하는 것이 가능하다. 사이트/페이지에 주요 표시를 하는 동작은, 어떤 경우에는 소프트웨어에 의하여 자동으로 수행될 수 있는데, 예를 들어, 어떤 사이트/페이지에 최초 방문할 때 특정 HTML 태그를 분석하고 그 다음에 해당 링크를 표시할 때에는 해당되는 사이트/페이지에 특이한 하이라이트 변수(highlight variable) 가 사용되도록 정의함으로써 수행될 수 있다. 또는, 사용자는 하이라이트 명령을 수동으로 정의하고 특정 사이트/페이지의 하이라이트 명령이 다른 사이트/페이지 데이터와 함께 저장되도록 할 수 있다.
더 나아가, 많은 인터넷 페이지들은, 매우 길고 작은 스크린에 표시하게에 힘들기 때문에 다양한 화면에 꽉 차는 양만큼 트래버스(traversing)하는 것이 요구되는데, 이러한 현상은 특히 포털 사이트의 메뉴의 경우에 발생한다. 전술된 사이트-페이지 구조화 동작을 통하여 어떤 사이트를 항해하거나 그 사이트의 페이지들을 검색하는 것이 용이하게 되기 때문에, 상응하는 (메인) 페이지-서브 페이지 분리 동작이 사용됨으로써 사용자로 하여금 더 자주 방문되는(또는 더 최근에 방문 된) 서브 페이지 링크들의 목록에 접근할 수 있도록 할 수 있다. 개념적인 엔티티(conceptual entity)로서의 서브 페이지는 동일한 사이트 내에 위치될 필요가 없으며 상응하는 메인 페이지와 부분적으로 일치되는 주소를 가질 필요가 없다. 또한, 메인 페이지는 다른 페이지로의 링크들을 포함하고, 이 다른 페이지들은 해당 메인 페이지의 서브 페이지라고 불린다. 전형적인 경우에, 포털 사이트의 메인 페이지는 다양한 서브 페이지들에 대한 링크들을 포함하며, 서브 페이지의 토픽들은 매우 동적으로 변화하는데, 그 이유는 서브 페이지들 중 어떤 것들은 뉴스, 스포츠 소식, 또는 기상 정보에 관련되고, 다른 서브 페이지들은 취미생활에 관련된 상이한 토픽에 관련된 토론 게시판에 관한 것이거나, 어떤 서브 페이지들은 단순히 스폰서들의 광고 게시판일 수 있고, 어떤 광고들은 웹 마스터의 알림판처럼 공지 사항을 공고하는 것일 수 있기 때문이다. 어떤 사용자 한명이 해당 포털의 메인 페이지로부터의 모든 서브 페이지 링크들을 추적하는 경우는 거의 없기 때문에, 방대한 분량의 모든 링크 액세스들을 취합하는 서브 페이지들의 개별 그룹(discrete group)이 결국 생성되는데, 이러한 경우에 페이지 액세스가 일어날 때, 빈도수 카운트에 의하여 정렬된 순서로(추가적으로 최근 액세스된 날짜 순으로) 서브 페이지 링크들을 예시하는 것이 바람직하다. 이러한 기능은 자동 또는 수동으로 수행될 수 있다. 즉, 사용자가 사전 액세스된 서브 페이지들에 대한 링크들을 포함하는 페이지에 액세스할 때마다, 서브 페이지 링크들의 정렬된 목록이 사용자에게 표시되거나, 또는 그 페이지는 우선 사용자에게 도시되지만 사용자로부터의 특정 개시 명령에 응답 하는 경우에만 서브 페이지 링크들이 디스플레이될 수 있는데(예를 들어 URL 또는 다른 ID 만을 포함하는 소형화 목록의 형태로 디스플레이된다), 이 때 도시되는 링크들은 빈도수 카운트 또는 다른 선호되는 정렬 규칙에 의하여 재정렬된 형태로 도시된다. 전술된 기능은 매우 직접적으로 구현될 수 있는데, 예를 들어, 제어 로직에 의하여 액세스된 페이지들을 우선 자동으로 트래버스하여 존재하는 서브 페이지 링크들을 검색하고, 그러면 검색된 서브 페이지 링크들을 스토리지 내의 링크들과 비교하고, 검색된 빈도수 카운트에 기반하여 정렬된 서브 페이지 링크 목록이 최종 생성된다.
도 7은 이동 전화 단말기 디스플레이 상에 표시되는 화면(702)을 개시하는데, 여기서 한 화면분의 전체 포털의 메인 메뉴가 한번에 하나씩 도시될 수 있다. 그러면, 사용자는 "Favourite page links" 메뉴를 단말기 메뉴(704)로부터 선택함으로써 빈도수 카운트에 의하여 콤팩트 하게 정렬된 서브 페이지 링크들의 목록을 도시한다(706). 도 7에 도시된 실시예에서, 서브 페이지 링크들은 실제 URL이 아니라 페이지 타이틀/ID 에 의하여 도시되었는데, 그 이유는 네비게이션을 더 용이하게 하기 위한 것이다.
빈도수 카운트 데이터를 이용함으로써 얻을 수 있는 한 가지 매력적인 추가 기능은 텍스트 자동 완성(text autocompletion)인데, 이 기능은 예를 들면 요새의 브라우저에서는 제공된다. 자동 완성 기능이라 함은 부분적으로 입력된 문자열을 사전에 입력된 문자열에 기반하여 확률이 있는 데이터를 이용하여 완성하는 텍스트 예측기 엔진(text predictor engine)을 의미하는 것인데, 예를 들어 사전 입력된 문자열은 저장되고 빈도수가 카운트된 사이트/페이지 링크들이다. 현재 사용되고 있는 인터넷 브라우저들의 예를 들면, 다중 옵션이 적용되면, 예를 들어 부분적으로 입력된 링크가 수 개의 사전 액세스된 링크로서 그 링크의 URL 주소 또는 ID의 첫 부분에 해당하면 그 옵션이 사용자에게 알파벳 순으로 제공된다. 이러한 자동 완성 기능은 빈도수 카운트 데이터를 이용할 수 있는데, 그 이유는 다3중 옵션이 존재할 때마다, 이 옵션들은 알파벳 순으로 제공되는 대신에 빈도수의 올림차순/내림차순으로 정렬된 형태로 정렬되어 사용자에게 전달될 수 있기 때문이다. 뿐만 아니라, 최종 방문 또는 최후 표시(last expression)(예를 들어 URL이 타이핑되지만 반드시 액세스된 것은 아닌 경우)로부터 경과된 시간을 이용하여 더 복잡한 정렬 기준(sorting criteria)을 생성할 수도 있다. 인터넷 링크의 경우, 빈도수가 카운팅될 일군의 이벤트 타입에 속하는 동일한 데이터는 링크 추천 및 자동 완성 목적 모두를 위하여도 사용될 수 있다. 링크 선택 동작이 사용자에 의하여 수행된 이후에 빈도수 카운트 동작이 일반적으로 갱신될 수 있다. 또한, 2차 스토리지 내의 데이터 중 카운트 값이 낮은 데이터가 실제 자동 완성 기능에 영향을 미치지는 않지만(2차 스토리지 내의 데이터로부터는 필요한 추가적인 텍스트 부분을 구할 수 없기 때문에) 2차 스토리지 역시 이러한 목적을 위하여 채택될 수 있다. 그러나, 1차 스토리지 내에 상응하는 텍스트가 발견되지 않는 문자열(이벤트 타입 또는 이벤트 타입 ID를 정의하는 문자열)에 상응하는 링크를 액세스하는 경우에는, 해시값이 연산되고 카운트 값이 2차 스토리지에서 갱신된다. 빈번하게 선택되는 문자열은 점진적으로 빈도수 카운팅 방법의 개념에 따라서 1차 스토리지로 업그레이드 된다. 그 이후에는, 자동 완성 기능이 수행되는 동안에 문자열 역시 직접 사용될 수 있는 데, 그 이유는 이 문자열 자체도 1차 스토리지에서 발견될 수 있기 때문이다. 이러한 접근법에 의하면 적어도 평균적으로 단순하지만 명백히 최적화된 방법은 아닌 알파벳 순 정렬 방법에 비하여 개선된 결과를 보여준다.
다른 옵션으로서, 빈도수 카운트 방법은 링크들을 정렬하는 용도로서만 사용되고 실제로 링크를 정의하기 위하여는 사용되지 않을 수 있다. 예를 들어, 사용자가 브라우저 내의 링크(북마크)를 수동으로 생성하는 것을 더 선호한다면, 링크 액세스들의 빈도수는 여전히 전술된 바와 같이 카운팅될 수 있다. 그러면, 수동으로 정의된 링크들은 빈도수 카운트에 의하여 정렬된 형태로 사용자에게 디스플레이된다. 또한, 사용자에 의하여 정의될 수 있는 링크 및 자동으로 링크를 생성하는 방법이 결합되어 모든 프로세스에 더 높은 유연성을 제공할 수 있는데, 예를 들면 해당 프로시저들 중 하나로부터 유래한 링크들은 동일하게 처리되고 단일 정렬 목록 내에서 제공될 수 있거나, 사용자에 의하여 수동으로 생성된 링크들은 자동으로 생성된 링크에 비하여 우선권을 가지거나, 이와 반대로 구현되게 할 수도 있다. 수동 생성 및 자동 생성 링크 데이터는 동일한 스토리지내에 저장되거나 개별 스토리지에 저장될 수 있다. 실무상, 단지 수동으로 생성된 목록들만을 가지고는 2차 스토리지는 쓸모가 없을 수 있는데, 그 이유는 사용자는 처음부터(제1 액세스에 의하여 발생된 링크 정의 직후) 저장된 링크들에 액세스 및 검색하기를 원할 수 있으나, 1차 스토리지-2차 스토리지 솔루션에의 특정 제1 액세스들은 단축화된 ID 또는 해시 코드에 의하여 어드레싱될 수 있는 2차 스토리지 내의 카운트 값들만 생성할 수 있는 것이 전형적이기 대문이다.
최종적으로, 다양한 서비스 등에 관련되는 추천들을 생성 및 정렬하는 동안 콘텍스트 정보를 고려할 수 있다. 콘텍스트 적응(context adaptation) 은 하루의 시간, 한 주의 날짜, 위치(즉, 셀 ID), 연결 타입/용량, 선택된 프로파일(profile) 등과 같은 것을 제어 인자로 이용함으로써 발생할 수 있다. 예를 들어, 콘텍스트에 기반한 총칭적이거나 사이트/페이지 특이성을 가지는 규칙은 특정한 콘텍스트를 가지는 특정 링크들을 제외함으로써 링크를 저장하기 위하여 사용되거나 링크들을 표시하는데 사용될 수 있다. 예를 들어, 만일 "업무(work)" 프로파일이 활성화되었다면, 취미에 관련된 링크들은 표시되지 않을 것이다. 빈도수 카운트 스토리지들은 프로파일 특이성을 가지도록 구성될 수 있거나, 평균적인 스토리지 요소 데이터와 함께 추가적인 가중치 텀(term)들이 저장됨으로써 상이한 콘텍스트에 관련되어 그 요소의 중요성을 표시할 수 있다. 이벤트 타입이 사용자에게 표시되어야 하거나 가중치 카운트가 표시된 추천 목록 내에 해당 이벤트의 위치를 변경시킨 다면, 추천 목록을 사용자에게 표시할 때, 현재 콘텍스트 및 상응하는 가중치 텀들이 이벤트 타입의 실제 카운트에 덧붙여서 정의될 수 있다. 한 가지 옵션은 콘텍스트 정보를 빈도수 카운팅 동작에 직접 적용하는 것이다. 특정 콘텍스트에서, 카운팅될 어떠한 이벤트 타입은 다른 콘텍스트에 비하여 해당 카운트를 더 많이 증가(또는 아예 변경시키지 않거나 심지어 감소)시킬 수 있다. 결과적으로, 본 발명에 따른 기본적인 빈도수 카운팅 방법은 다양한 사용자의 요구에 더 잘 적응하기 위하여 상황에 따라 유연하게 변형될 수 있다.
도 8을 참조하면, 이벤트의 빈도수를 연산 및 저장하는 기능을 가지는 장치 의 기본적인 구성 요소를 위한 한 옵션이 도시되는데, 여기서 해당 장치는 실질적으로는 이동 전화 단말기와 같은 개인용 통신 장치이다. 한개 또는 그 이상의 물리적 메모리 칩으로 분리된 메모리(812)는 1차 스토리지(804) 및 2차 스토리지(806)를 포함하고 예를 들어 컴퓨터 프로그램/응용 프로그램의 형태로 제공되는 본 발명에 의하여 제안된 방법을 수행하기 위한 명령(816)을 포함한다. 처리 유닛(802)은 저장된 명령(816) 및 데이터(804,806)에 따라 본 발명에 따른 방법을 실제로 실행하기 위하여 필요하다. 디스플레이(814) 및 사용자 인터페이스(820)가 필요한 장치 제어 및 데이터 표시 수단을 사용자에게 제공하기 위하여 요구된다. 송수신기(818)는 공중 인터페이스(818)를 통한 데이터 통신을 처리한다. 오디오 부(810)는 예를 들면 상기 장치에서 음성 및 음악과 같은 음향 신호들을 인터페이스 하는데 필요한 트랜스듀서(transducer) 및 증폭기들을 포함한다.
본 발명의 기술적 사상은 첨부된 독립항에 표시된다. 그러나, 본 발명을 구현하기 위하여 사용된 장치, 이벤트 타입들, 스토리지 구조들 등은 현재의 시나리오에 따라 많이 변화될 수 있지만, 이것들 모두 본 발명의 기술적 사상으로 수렴한다. 예를 들어, 실제로 본 발명에 의하여 제안된 방법은 데이터를 저장 및 처리할 수 있는 수단을 포함하는 PDA, 또는 데스크톱 및 휴대형 PC와 같은 컴퓨터를 실질적으로 포함하는 개선된 전자 장치의 거의 모든 종류에서 구현될 수 있다는 것은 명백하다. 더 나아가, 1차 스토리지가 이벤트 데이터를 높은 정확도를 가지고 포함하고, 2차 스토리지는 이보다는 낮은 정확도를 가지는 중간 스토리지로서 동작하기만 한다면, 1차 스토리지 및 2차 스토리지 역시 다양한 방법으로 구성될 수 있 다. 이러한 스토리지들은, 심지어는 두 스토리지들 모두를 위한 빈도수 데이터가 특정 메모리 위치에 저장될 수 있는 반면에 1차 스토리지만을 위하거나 2차 스토리지 모두를 위한 이벤트 식별 데이터는 두 스토리지 모두에 위치될 수 있기 때문에 부분적으로 결합될 수도 있다. 그러나, 어떠한 경우에도 빈도수 데이터 및 가용의 이벤트 식별 데이터 간에는 연결관계(linkage)가 존재함으로써 적어도 두 개의 스토리지들에서, 1차 스토리지는 배포된 이벤트 타입 식별 및 빈도수 데이터 정보 단위들을 가지고, 2차 스토리지는 적어도 빈도수를 가지는 개념적인 구성이 여전히 상이한 정확도 레벨을 가지고 존재하도록 하여야 한다. 그러므로, 본 발명은 전술된 바와 같은 실시예들에 엄격히 한정되는 것은 아니다.
본 발명은 일반적으로 다양한 이벤트 들의 빈도수를 카운팅하기 위한 방법 및 장치에 관한 것으로, 데이터를 저장 및 처리할 수 있는 수단을 포함하는 PDA, 또는 데스크톱 및 휴대형 PC와 같은 컴퓨터를 실질적으로 포함하는 개선된 전자 장치의 거의 모든 종류에서 구현될 수 있다.
참고 문헌:
[1] Brown, B. & Sellen, A (2001), "Exploring Users' Experiences of the Web". First Monday (http://www.firstmonday.org/issues/issue6_9/brown/index.html)
[2] Cockburn, A. & Mckenzie, B. (2000), "What Do Web Users Do? An Empirical Analysis of Web Use", Int. J. Human-Computer Studies (http://www.cosc.canterbury.ac.nz/~andy/papers/ijhcsAnalysis.pdf)
[3] Ramsay, M. & Nielsen, J. (2000), "WAP Usability". Field study report

Claims (52)

  1. 데이터를 처리 및 저장할 수 있는 전자 장치에 의하여 실행될 이벤트들의 빈도수를 카운팅하기 위한 방법에 있어서,
    빈도수 정보는 높은 정밀도를 가지는 1차 스토리지 및 낮은 정밀도를 가지는 2차 스토리지에 저장되며,
    - 빈도수가 카운팅되는 적어도 하나의 이벤트 타입을 정의하는 정의 단계(304),
    - 카운팅되는 타입의 이벤트가 발생될 경우 검출하는 검출 단계(306),
    - 상기 이벤트 타입이 이미 상기 1차 스토리지 내에 포함되어 있는지를 점검하는 점검 단계(310),
    - 만일 포함되어 있다면, 상기 1차 스토리지 내에 포함된 이벤트 타입의 카운트를 증가시키는 증가 단계(312),
    - 만일 포함되어 있지 않다면, 상기 2차 스토리지 내에 포함된 이벤트 타입의 카운트를 갱신하는 갱신 단계(314)를 포함하는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  2. 제1항에 있어서, 상기 갱신 단계는,
    상기 이벤트 타입에 관련된 스토리지 요소를 생성하는 동작, 상기 이벤트 타입의 카운트를 초기화하는 동작 및 카운트를 증가시키는 동작 중 적어도 하나를 포함하는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  3. 제1항에 있어서,
    상기 1차 스토리지 내의 이벤트 타입의 카운트와 비교하여, 상기 이벤트 타입의 카운트의 소정 조건이 달성되면(316), 상기 2차 스토리지 내의 이벤트 타입을 상기 1차 스토리지로 이동시키는 이동 단계를 더 포함하는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  4. 제3항에 있어서, 상기 조건은,
    상기 2차 스토리지 내의 이벤트 타입의 카운트가 상기 1차 스토리지 내의 이벤트 타입의 카운트와 같거나 그 이상일 때 달성되는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  5. 제3항에 있어서,
    상기 1차 스토리지 내의 이벤트 타입을 상기 2차 스토리지로 이동시키는 이동 단계를 더 포함하는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  6. 제3항에 있어서,
    상기 1차 스토리지 내의 이벤트 타입은 상기 스토리지 중 가장 낮거나 가장 높은 카운트를 가지는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  7. 제3항에 있어서,
    상기 1차 스토리지를 정렬하는 단계를 더 포함하는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  8. 제1항에 있어서,
    상기 카운트가 추가된 상기 스토리지를 정렬하는 단계를 더 포함하는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  9. 제1항에 있어서,
    상기 이벤트들의 상기 빈도수 정보는, 이벤트 타입 식별자(event type identifier)/빈도수 카운트 쌍으로서 저장되는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  10. 제9항에 있어서,
    이벤트 타입 식별자는 해시 함수(hash function)의 출력인 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  11. 제1항에 있어서,
    상기 2차 스토리지는, 이벤트 타입 또는 이벤트 타입의 파생물(derivative)을 입력으로 이용하는 해시 함수로 부터의 출력에 의하여 인덱싱되는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  12. 제1항에 있어서,
    이벤트 타입의 빈도수 카운트는, 가중치 부여(weighting)를 야기하는 소정 동작이 발생될 때마다 가중치 인자(weighting factor)로 가중치가 부여되는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  13. 제1항에 있어서,
    카운팅되어야 하는 빈도수의 이벤트는,
    인터넷 페이지 액세스, 인터넷 사이트 액세스, 전화기 메뉴 액세스, 파일 액세스, 단어 인식 이벤트, 음성 명령 이벤트, 텍스트 자동 완성 이벤트, 또는 필기 문자 인식 이벤트 중 적어도 하나인 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  14. 제13항에 있어서,
    상기 인터넷 페이지는, WWW(World Wide Web) 또는 WAP(Wireless Application Protocol) 페이지인 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  15. 제13항에 있어서,
    정렬된 이벤트 타입들은 인터넷 브라우저 용 추천 목록(recommendation list)을 형성하는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  16. 제1항에 있어서,
    상기 빈도수 정보는 사용자의 계정에 대한 특이성(user account specific)을 가지는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  17. 제1항에 있어서,
    상기 빈도수 정보는 적어도 일부가 휴대용 매체에 저장되는 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  18. 제17항에 있어서,
    상기 휴대용 매체는 메모리 카드인 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  19. 제18항에 있어서,
    상기 메모리 카드는 SIM(가입자 아이덴티티 모듈)(Subscriber Identity Module) 카드인 것을 특징으로 하는 이벤트 빈도수 카운팅 방법.
  20. 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체에 있어서,
    상기 프로그램이 컴퓨터에서 실행될 때, 제1항 내지 제19항 중의 어느 한 항의 방법의 단계들을 실행하는 코드(816)를 포함하는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  21. 제20항에 있어서,
    상기 코드(816)는 상기 빈도수 정보에 기반하여 브라우저 용 추천 엔진(recommendation engine)을 형성하며,
    상기 1차 및 2차 스토리지 내에 저장된 이벤트 데이터는 적어도 일부가 상기 브라우저 내의 액세스된 목적지 주소들에 관련되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  22. 제21항에 있어서, 상기 액세스된 목적지 주소들은 인터넷 사이트들 및 인터넷 사이트의 페이지에 관련되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  23. 제21항에 있어서,
    상기 1차 또는 2차 스토리지 내의 이벤트 타입에 특이성을 가지는 요소들은,
    이벤트 타입 식별자, 사이트 명칭, 페이지 명칭, 사이트 URL(Universal Resource Locator) 및 페이지 URL 중 적어도 하나의 정보 단위(information unit)를 포함하는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  24. 제22항에 있어서,
    저장된 상기 이벤트 데이터로부터 구성된 추천들(recommendations)은 사이트 레벨의 추천들(site level recommendations)인 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  25. 제22항에 있어서,
    저장된 상기 이벤트 데이터로부터 구성된 추천들은 페이지 레벨의 추천들인 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  26. 제21항에 있어서,
    추천들은 적어도 두 개의 레벨을 포함하는 계층 구조로서 사용자에게 디스플레이되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  27. 제26항에 있어서,
    상기 레벨들은 사이트들의 레벨 및 상응하는 페이지들의 레벨을 포함하는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  28. 제21항에 있어서,
    추천들은 사용자 콘텍스트(user context)에 적응되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  29. 제21항에 있어서,
    적어도 하나의 소정 이벤트 타입의 사전 액세스로부터 경과된 시간은, 스토리지 또는 디스플레이된 추천들의 목록 내의 이벤트 타입의 위치에 영향을 주는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  30. 제22항에 있어서,
    추천들은 페이지 및 서브페이지들의 계층 구조로서 사용자에게 디스플레이되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  31. 제30항에 있어서,
    사용자에게 디스플레이된 상기 서브페이지들의 순서는, 상기 서브페이지의 적어도 하나의 사전 액세스로부터 경과된 시간에 의하여 영향받는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  32. 제20항에 있어서,
    특정 이벤트 타입의 카운트는, 한 번 이상 액세스되는 경우 한 세션 동안의 이벤트 타입 액세스들의 개수에 독립적인 고정치에 의하여 조절되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  33. 제22항에 있어서,
    페이지 내의 링크들은 빈도수 카운트에 의하여 정렬된 상태로 디스플레이되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  34. 제20항에 있어서,
    상기 컴퓨터 프로그램은 부분적으로 입력된 문자열을 완성하기 위한 옵션들을 정렬하며,
    상기 옵션들은, 빈도수가 카운팅되는 일군의 이벤트 타입들에, 그들의 빈도수 카운트에 따라서 속하는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  35. 제20항에 있어서, 상기 컴퓨터 프로그램은 브라우저 내의 사용자에 의하여 정의된 링크들의 랭킹 용이며,
    상기 링크들은 빈도수가 카운팅되는 일군의 이벤트 타입에 속하며, 상기 링크들은 빈도수 카운트에 의하여 정렬되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  36. 제20항에 있어서,
    상기 컴퓨터는 개인용 컴퓨터(PC), PDA(Personal Digital Assistant), 또는 이동 단말기인 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  37. 제29항에 있어서,
    적어도 하나의 사전 액세스로부터 경과한 상기 시간은 세션들의 개수 또는 캘린더 시간(calendar time)으로서 측정되는 것을 특징으로 하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
  38. 삭제
  39. 원격 통신 네트워크에서 동작 가능한 개인용 통신 장치(708,718)에 있어서,
    명령(716)을 처리하고 데이터를 저장할 수 있는 처리 수단(702) 및 메모리 수단(712)으로서, 상기 메모리 수단(712)은 빈도수 정보를 저장하기 위한 1차 스토리지(704) 및 2차 스토리지(706)로서, 높은 정밀도를 가지는 1차 스토리지(704) 및 낮은 정밀도를 가지는 2차 스토리지(706)를 포함하고, 상기 개인용 통신 장치(708,718)는,
    빈도수가 카운팅되는 적어도 하나의 이벤트 타입을 정의하는 정의 동작,
    카운팅되는 타입의 이벤트가 발생되면 검출하는 검출 동작,
    상기 이벤트 타입이 이미 상기 1차 스토리지(704) 내에 포함되어 있는지를 점검하는 점검 동작,
    만일 포함되어 있다면, 상기 1차 스토리지(704) 내에 포함된 이벤트 타입의 카운트를 증가시키는 증가 동작,
    만일 포함되어 있지 않다면, 상기 2차 스토리지(706) 내에 포함된 이벤트 타입의 카운트를 갱신하는 갱신 동작을 수행하도록 구현되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  40. 제39항에 있어서, 상기 갱신 동작은,
    상기 이벤트 타입에 관련된 스토리지 요소를 생성하는 동작, 상기 이벤트 타입의 카운트를 초기화하는 동작, 및 카운트를 증가시키는 동작 중 적어도 하나를 포함하는 것을 특징으로 하는 개인용 통신 장치(708,718).
  41. 제39항 또는 제40항에 있어서, 상기 개인용 통신 장치(708,718)는 더 나아가,
    상기 1차 스토리지(704) 내의 이벤트 타입의 카운트와 비교하여, 상기 이벤트 타입의 카운트의 소정 조건이 달성되면, 상기 2차 스토리지(706) 내의 이벤트 타입을 상기 1차 스토리지(704)로 이동시키도록 구현되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  42. 제39항 또는 제40항에 있어서,
    상기 개인용 통신 장치(708,718)는 더 나아가,
    상기 1차 스토리지(704) 내의 이벤트 타입을 상기 2차 스토리지(706)로 이동시키도록 구현되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  43. 제39항에 있어서,
    상기 빈도수 정보는 SIM(Subscriber Identity Module) 카드에 저장되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  44. 제39항에 있어서,
    상기 빈도수 정보는 사용자 계정에 특이성을 가지는 것을 특징으로 하는 개 인용 통신 장치(708,718).
  45. 제39항 또는 제40항에 있어서,
    상기 개인용 통신 장치(708,718)는 상기 빈도수 정보에 기반하여 브라우저 용 추천 목록을 형성하도록 구현되고,
    상기 1차 및 2차 스토리지 내에 저장된 이벤트 데이터는 적어도 일부가 상기 브라우저를 통하여 액세스된 목적지 주소들에 관련되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  46. 제45항에 있어서, 상기 액세스된 목적지 주소들은 인터넷 사이트들 및 인터넷 사이트의 페이지에 관련되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  47. 제45항에 있어서,
    상기 1차 또는 2차 스토리지 내의 이벤트 타입에 특이성을 가지는 요소들은,
    이벤트 타입 식별자, 사이트 명칭, 페이지 명칭, 사이트 URL(Universal Resource Locator), 및 페이지 URL 중 적어도 하나의 정보 단위를 포함하는 것을 특징으로 하는 개인용 통신 장치(708,718).
  48. 제46항에 있어서,
    페이지 내의 링크들은 빈도수 카운트에 의하여 정렬된 상태로 디스플레이되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  49. 제39항에 있어서, 상기 개인용 통신 장치(708,718)는 부분적으로 입력된 문자열을 완성하기 위한 옵션들을 정렬하도록 더욱 적응되며,
    상기 옵션들은, 빈도수가 카운팅되는 일군의 이벤트 타입들에, 그들의 빈도수 카운트에 따라서 속하는 것을 특징으로 하는 개인용 통신 장치(708,718).
  50. 제49항에 있어서,
    상기 문자열은 인터넷 사이트 또는 페이지에 관련되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  51. 제39항에 있어서, 상기 개인용 통신 장치(708,718)는 브라우저 내의 사용자에 의하여 정의된 링크들을 랭킹하도록 구현되고, 상기 링크들은 빈도수가 카운팅되는 일군의 이벤트 타입에 속하며, 상기 링크들은 빈도수 카운트에 의하여 정렬되는 것을 특징으로 하는 개인용 통신 장치(708,718).
  52. 제39항에 있어서, 상기 개인용 통신 장치(708,718)는,
    GSM(Global System for Mobile communications) 또는 UMTS(Universal Mobile Telecommunications System) 단말기인 것을 특징으로 하는 개인용 통신 장치(708,718).
KR1020057016686A 2005-09-07 2003-03-07 빈도수 카운팅을 위한 방법 및 장치 KR100798008B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020057016686A KR100798008B1 (ko) 2005-09-07 2003-03-07 빈도수 카운팅을 위한 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020057016686A KR100798008B1 (ko) 2005-09-07 2003-03-07 빈도수 카운팅을 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20050117541A KR20050117541A (ko) 2005-12-14
KR100798008B1 true KR100798008B1 (ko) 2008-01-24

Family

ID=37290911

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057016686A KR100798008B1 (ko) 2005-09-07 2003-03-07 빈도수 카운팅을 위한 방법 및 장치

Country Status (1)

Country Link
KR (1) KR100798008B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101412478B1 (ko) * 2012-07-23 2014-07-01 주식회사 인프라웨어 선택패턴 기반의 사진관리 방법 및 이를 위한 컴퓨터로 판독가능한 기록매체
KR101893957B1 (ko) 2013-08-19 2018-08-31 삼성에스디아이 주식회사 배터리 팩, 배터리 팩을 포함하는 장치, 및 배터리 팩의 관리 방법
EP3799638A1 (en) 2019-08-21 2021-04-07 Google LLC Optimizing large scale data analysis

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5285323A (en) * 1990-10-05 1994-02-08 Digital Equipment Corporation Integrated circuit chip having primary and secondary random access memories for a hierarchical cache
US6125392A (en) * 1996-10-11 2000-09-26 Intel Corporation Method and apparatus for high speed event log data compression within a non-volatile storage area
WO2001033413A1 (en) 1999-11-03 2001-05-10 Sublinks Aps Method, system, and computer readable medium for managing resource links
US20020184568A1 (en) * 2001-06-04 2002-12-05 Motorola, Inc System and method for event monitoring and error detecton

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5285323A (en) * 1990-10-05 1994-02-08 Digital Equipment Corporation Integrated circuit chip having primary and secondary random access memories for a hierarchical cache
US6125392A (en) * 1996-10-11 2000-09-26 Intel Corporation Method and apparatus for high speed event log data compression within a non-volatile storage area
WO2001033413A1 (en) 1999-11-03 2001-05-10 Sublinks Aps Method, system, and computer readable medium for managing resource links
US20020184568A1 (en) * 2001-06-04 2002-12-05 Motorola, Inc System and method for event monitoring and error detecton

Also Published As

Publication number Publication date
KR20050117541A (ko) 2005-12-14

Similar Documents

Publication Publication Date Title
US9280607B2 (en) Method and a device for frequency counting
CN102622450B (zh) 用户的浏览器历史的相关性排序
EP2727247B1 (en) Database compression system and method
US9852126B2 (en) Host-based intelligent results related to a character stream
US7840579B2 (en) Mobile device retrieval and navigation
KR100583874B1 (ko) 웹 페이지의 예측적 캐싱 및 하이라이트
US20070185899A1 (en) Likelihood-based storage management
US20080195588A1 (en) Personalized Search Method and System for Enabling the Method
US20020135614A1 (en) Updating user interfaces based upon user inputs
WO2005088450A1 (en) Data access architecture
JP2011501299A (ja) 動的に更新される仮想リストビュー
KR20060048655A (ko) 네트워크 문서의 배치화된 인텍싱을 위한 시스템 및 방법
WO2009031759A1 (en) Method and system for generating search collection of query
JP2009026249A (ja) 閲覧履歴編集端末及びプログラムおよびその方法
US20070094071A1 (en) Pushing content to browsers
US8843829B2 (en) Method and system for web browsing
KR100798008B1 (ko) 빈도수 카운팅을 위한 방법 및 장치
JP2004206492A (ja) ドキュメント表示方法およびそれを用いたリンク先選択機能付ゲートウェイ装置
US20110296323A1 (en) Web page management method and apparatus and storage medium thereof
US7089305B2 (en) Conditional promotion of bookmarks
KR100463483B1 (ko) 전화번호검색기를 이용한 실시간 전화번호 검색 시스템 및그 방법
US20060190534A1 (en) Method and system for browsing a plurality of information items
US7653787B2 (en) System for storing web site names and caching audio resources of the most visited web sites
KR100622631B1 (ko) 정보 검색 방법
EP2089822B1 (en) System and process for identifying addresses in a distributed data network

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121226

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20131219

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20141231

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20151217

Year of fee payment: 9

LAPS Lapse due to unpaid annual fee