KR20040067818A - 잉크 분할기 및 연관된 어플리케이션 프로그램 인터페이스 - Google Patents

잉크 분할기 및 연관된 어플리케이션 프로그램 인터페이스 Download PDF

Info

Publication number
KR20040067818A
KR20040067818A KR1020030093804A KR20030093804A KR20040067818A KR 20040067818 A KR20040067818 A KR 20040067818A KR 1020030093804 A KR1020030093804 A KR 1020030093804A KR 20030093804 A KR20030093804 A KR 20030093804A KR 20040067818 A KR20040067818 A KR 20040067818A
Authority
KR
South Korea
Prior art keywords
strokes
ink
group
information
predetermined
Prior art date
Application number
KR1020030093804A
Other languages
English (en)
Other versions
KR100975504B1 (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 마이크로소프트 코포레이션
Publication of KR20040067818A publication Critical patent/KR20040067818A/ko
Application granted granted Critical
Publication of KR100975504B1 publication Critical patent/KR100975504B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0487Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
    • G06F3/0488Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures
    • G06F3/04883Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures for inputting data by handwriting, e.g. gesture or text
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/14Image acquisition
    • G06V30/142Image acquisition using hand-held instruments; Constructional details of the instruments
    • G06V30/1423Image acquisition using hand-held instruments; Constructional details of the instruments the instrument generating sequences of position coordinates corresponding to handwriting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Multimedia (AREA)
  • Character Discrimination (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • User Interface Of Digital Computer (AREA)
  • Character Input (AREA)
  • Toys (AREA)
  • Circuits Of Receivers In General (AREA)
  • Cookers (AREA)
  • Pens And Brushes (AREA)
  • Computer And Data Communications (AREA)
  • Credit Cards Or The Like (AREA)

Abstract

어플리케이션과 잉크 분할기 오브젝트(그룹으로 분할되어질 잉크 스트로크를 저장함) 사이에서 통신하기 위한 방법은, (a) 선택적으로 어플리케이션에 의해, 잉크 분할기 오브젝트에게 분할 요청을 발행하는 단계, (b) 분할 요청에 응답하여, 저장된 잉크 스트로크를 소정의 제1 입상(예를 들어, 단어, 라인, 단락, 문장, 도면, 등)을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하는 분할 방법을 호출하는 단계, 및 (c) 어플리케이션에 이용가능한 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계를 포함할 수 있다. 어플리케이션에 이용가능하에 만들어진 이 "정보"는, 예를 들어 실제적인 스트로크의 그룹, 소정의 제1 입상을 갖는 스트로크 그룹의 수, 스트로크 그룹에 대응하여 기계-생성된 텍스트 등을 포함할 수 있다. 분할 방법의 결과는 잉크 분할 결과 오브젝트에 저장될 수 있다. 몇가지 예에서, 잉크 분할 결과 오브젝트는 원래 분할된 스트로크를 포함하여 여러가지 다양한 입상들의 스트로크 그룹들을 검색할 수 있게 한다. 또한 본 발명은 상술된 방법을 수행하기 위한 시스템, 및 이 방법들을 수행하는데 이용되는 다양한 데이타 구조에 관한 것이다.

Description

잉크 분할기 및 연관된 어플리케이션 프로그램 인터페이스{INK DIVIDER AND ASSOCIATED APPLICATION PROGRAM INTERFACE}
관련 출원
일반적으로, 본 발명은 다음의 특허 출원에 개시된 시스템 및 방법들과 함께사용될 수 있다.
(a) 2002년 5월 14일에 출원된, "Handwriting Layout Analysis of Freeform Digital Ink Input"이란 제목의 미국특허출원 제10/143,865호;
(b) 2002년 5월 14일에 출원된, "Classification Analysis of Freeform Digital Ink Input"이란 제목의 미국특허출원 제10/143,864호;
(c) 2002년 5월 14일에 출원된, "An Incremental System for Real Time Digital Ink Analysis"란 제목의 미국특허출원 제10/143,804호; 및
(d) 2002년 6월 28일에 출원된, "Interfacing With Ink"란 제목의 미국특허출원 제10/184,108호.
상기와 같이 함께 진행중인 미국특허출원의 각각은 참조를 위해 본원에 전부 포함된다.
본 발명의 일측면은 다양한 잉크 및 잉크 분할기 오브젝트들을 포함하는, 전자 잉크와 어플리케이션 프로그램 사이의 통신을 용이하게 하는 시스템, 방법 및 컴퓨터 판독가능한 매체에 관한 것이다. 이러한 시스템, 방법, 및 컴퓨터 판독가능한 매체들의 소정의 예들은, 다양한 입상(granularity)의 잉크 스트로크 그룹화(ink stroke groupings)에 대한 클라이언트 코드 액세스 또는 어플리케이션 프로그램으로 하여금 어플리케이션 프로그램의 성능을 개선할 수 있게 하고 디지털 잉크와 이러한 프로그램 및 그들의 연관된 코드와의 상호작용을 개선시킨다.
일반적인 컴퓨터 시스템, 특히 마이크로소프트 윈도우와 같이, GUI 시스템을 사용하는 컴퓨터 시스템은, 사용자 인터페이스를 구동하기 위해, 텍스트 입력용 키보드 및 포인팅 장치(예를 들면, 하나 이상의 버턴을 갖는 마우스)와 같은, 하나 이상의 개별적인 입력 장치로부터 사용자 입력을 받아들이도록 최적화된다. 유비쿼터스 키보드 및 마우스 인터페이스는 문서, 스프레드시트, 데이터베이스 필드, 도면, 사진 등의 빠른 생성 및 수정을 제공한다. 그러나, 소정의 측면에서는, 컴퓨터가 아닌(즉, 종래의) 펜 및 종이와 비교할 경우, 키보드 및 마우스 인터페이스에 의해 제공되는 유연성에 상당한 차이가 존재한다. 종래의 펜 및 종이를 사용하여, 사용자는 문서를 편집하고, 여백에 기록을 하고, 그림 및 다른 형상을 그리는 것 등을 할 수 있다. 어떤 경우, 사용자는, 키보드 및 마우스 인터페이스의 범위 밖에 자유롭게 기록하는 능력때문에, 컴퓨터 스크린 상에서 문서를 검토하기 보다는 펜을 사용하여 문서에 마크업(mark-up)하는 것을 선호할 수 있다.
소정의 컴퓨터 시스템은 사용자가 스크린 상에 그릴 수 있게 한다. 예를 들면, 마이크로소프트 READER 어플리케이션은 사용자로 하여금 전자 잉크(본원에서는 또한 "잉크(ink)" 또는 "디지털 잉크(digital ink)"로 나타냄)를 문서에 추가할 수 있게 한다. 시스템은 잉크를 저장하고 요청받을 경우 사용자에게 제공한다. 다른 어플리케이션(예를 들면, 팜 3.x 및 4.x와 포켓PC 운영 시스템과 연관된 기술분야에서 알려진 것과 같은 드로잉 어플리케이션(drawing application))은 도면의 캡쳐 및 저장을 가능하게 한다. 또한, 코렐 드로우와 같은, 다양한 드로잉 어플리케이션, 및 포토샵과 같은 사진 및 편집 어플리케이션들은 와콤(Wacom) 테블릿 제품과 같이, 스틸러스 기반 입력 제품과 함께 사용될 수 있다. 이러한 도면들은, 도면에 마크업하는데 사용되는 잉크 스트로크와 연관된 다른 속성들을 포함한다. 예를 들면, 선폭 및 컬러가 잉크와 함께 저장될 수 있다. 이러한 시스템의 하나의 목적은 종이에 인가되는 물리적 잉크의 외관과 감정을 복제하는 것이다.
전자 잉크를 수용하는 컴퓨터 시스템은 알려져 있으나, 현시점에서 적어도 소정의 측면에서 그들의 이용가능성 및 유용성은 어느정도 제한된다. 그들의 이용가능성 및 유용성을 더 증가시키기 위해서, 어플리케이션 프로그램은, 전자 잉크와의 인터페이스와 상호작용을 허용하는 코드를 포함하여야 한다. 따라서, 소정의 방식으로 전자 잉크와 상호작용하는 어플리케이션 프로그램용 코드를 기록하기를 원하는 사람들에게는, 코드 기록자로 하여금 서로 다른 다양한 잉크 그룹화와 용이하게, 유연하게, 계속적으로 상호작용하고 인터페이스하도록 허용하는 어플리케이션 프로그래밍 인터페이스(Application Programming Interface, "API")이 매우 유용하다.
요 약
예를 들어, 사용자가 입력하고 페이지 상의 전자 잉크와 상호작용할 수 있는 자유형태의 도면 표면을 구현하는 어플리케이션은, 사용자가 제공하는 스트로크(stroke)를 저장하고 조작하는 범위를 결정하는 도전에 직면해 있다. 어플리케이션 개발자들을 위한 간단한 접근법은, (1) 각 스트로크를 개별적으로 처리하거나 또는 (2) 페이지 상의 모든 스트로크, 또는 소정의 편집 세션 동안의 모든 스트로크들을 함께 처리하는 것이다. 그러나, 이러한 접근법들 각각은 최종 사용자를 위한 용이한 사용 뿐만 아니라 기존 문서의 레이아웃 코드와의 양립성의 측면에서 심각한 실용적인 한계를 가진다. 어플리케이션에 대한 이상적인 접근법 - 그러나, 일반적으로 구현하는데 상당이 어려운 접근법 - 은 스트로크들을, 단어들, 라인들 또는 단락들을 포함하는 그룹으로 처리하는 것이다. 이러한 접근법은 사용의 편리성, 양립성, 개선된 수기(handwriting) 인식 및 많은 다른 특징들을 가능케 하는 큰 이점을 가진다. 본 발명은, 어플리케이션 개발자들이 스트로크들을 그룹화하는 방법을 스스로 결정하지 않고 이러한 이점들을 용이하게 얻을 수 있는 API를 생성하고 그 결과 이러함 접근법의 주요한 난제를 제거할 수 있다.
도 1은 본 발명의 다양한 측면을 구현하는데 사용될 수 있는 범용 디지털 컴퓨팅 환경의 개략도.
도 2는 본 발명의 다양한 측면에 따라 사용될 수 있는 스틸러스-기반(stylus-based) 컴퓨팅 시스템의 평면도.
도 3은 본 발명의 예들과 함께 사용될 수 있는 구문해석(parsing) 시스템 및/또는 방법의 예의 일반적인 개요를 나타내는 도면.
도 4는 본 발명의 예들과 함께 사용될 수 있는 증분형(incremental) 구문해석 프로세싱을 일반적으로 설명하는 도면.
도 5는 본 발명의 예들과 사용될 수 있는 다양한 레이아웃 분석 단계들의 예를 나타내는 도면.
도 6A 및 6B는, 예를 들면 도 5에 설명된 단계들을 실행하는 레이아웃 분석 엔진을 사용하여 얻어질 수 있는 구문해석 트리 데이터 구조의 예들을 나타내는 도면.
도 7은 본 발명의 소정의 예들에 사용되는 InkDivider 오브젝트의 컴포넌트 및 특징들을 나타내는 도면.
도 8은 본 발명의 소정의 예에 사용되는 InkDivisionResult 오브젝트의 컴포넌트 및 특징을 나타내는 도면.
도 9는 본 발명의 소정의 예에 사용되는 InkDivisionUnits 오브젝트의 컴포넌트 및 특징을 나타내는 도면.
도 10은 본 발명의 소정의 예들에 사용되는 InkDivisionUnits 오브젝트의 컴포넌트 및 특징을 나타내는 도면.
도 11은 본 발명의 소정의 예에 사용되는 InkDivider 오브젝트의 다른 예를 나타내는 도면.
<도면의 주요부분에 대한 간단한 설명>
400: 사용자
410: 시스템
402: 문서 트리
404: 미러 트리
420: 어플리케이션 프로그램
422: 구문해석기
본 발명의 일측면은 정보를 어플리케이션 프로그램에 이용가능하게 하는 시스템 및 방법에 관한 것이다. 이러한 시스템 및 방법은, 복수의 잉크 스트로크들을 저장하는 단계; 분할 요청을 발행 또는 수신하는 단계; 분할 요청에 응답하여, 저장된 잉크 스트로크를 적어도 소정의 제1 입상을 갖는 하나 이상의 스트로크 그룹으로 그룹화하는 단계; 및 하나 이상의 스트로크 그룹에 대한 정보를 어플리케이션 프로그램에 이용가능하게 하는 단계를 포함할 수 있다. 어플리케이션 프로그램에 이용가능하게 제작된 "정보(information)"는, 예를 들면, 하나 이상의 스트로크 그룹 중 적어도 하나; 소정의 제1 입상을 가지는 다수의 스트로크 그룹을 나타내는 정보; 및 하나 이상의 스트로크 그룹 중 적어도 하나에 대응하는 기계-생성된(machine-generated) 텍스트를 포함할 수 있다. 스트로크들은, 단어, 라인, 단락, 문장, 도면 등을 포함하는 그룹들과 같이, 다양한 서로 다른 입상들로 그룹화될 수 있다. 그룹화 액션은 스트로크들을 하나 이상의 서로 다른 입상의 그룹들로 그룹화할 수 있고, 잉크 스트로크 세트가, 예를 들어, 하나 이상의 스트로크들을 추가, 삭제, 이동, 리사이징(resizing) 또는 다르게 수정함으로써 변경된 후 반복될 수 있다. 또한, 어플리케이션 프로그램 코드는, 구문해석(parsing)동안 사용할 인식기(recognizer)를 설정하거나, 구문해석동안 사용될 언어를 설정하거나, 스트로크가 구문해석되는 원하는 입상을 설정하거나, 잉크 스트로크에 포함되는 텍스트 라인들에 대한 예상된 라인 높이를 설정하는 것 등과 같이, 상술한 방법이 동작하는 동안, 구문해석기(parser)에 다양한 유형의 구문해석 정보를 제공할 수 있다.
본 발명의 다른 측면은, 그룹으로 분할될 잉크 스트로크를 저장하는 잉크 분할기 오브젝트와 어플리케이션 사이에서 통신하기 위한 시스템 및 방법에 관한 것이다. 소정의 예에서, 시스템 및 방법은, (a) 선택적으로 어플리케이션에 의해, 잉크 분할기 오브젝트에 분할 요청을 발행하는 단계; (b) 분할 요청에 응답하여, 적어도 소정의 제1 입상(예를 들면, 단어, 라인, 단락, 문장, 도면 등)을 갖는 하나 이상의 스트로크의 그룹으로 저장된 잉크 스트로크들을 그룹화하는, 분할 방법을 호출하는 단계; 및 (c) 하나 이상의 스트로크 그룹에 대한 정보를 어플리케이션에 이용가능하게 하는 단계를 포함할 수 있다. 분할 방법의 결과들은 잉크 분할 결과 오브젝트에 저장될 수 있다. 소정의 예에서, 잉크 분할 결과 오브젝트는 원래 분할된 잉크 스트로크(에 대한 어플리케이션 프로그램의 액세스를 허용할 수 있고)를 포함할 수 있고, 다양한 서로 다른 입상들의 스트로크 그룹들의 검색을 허용할 수 있다. 본 발명의 추가예에서, 분할 방법은, 잉크 스트로크의 그룹화를 보다잘 정의하는데 지원하기 위해 잉크 스트로크와 연관된 소정의 또는 미리 설정된 언어 특성을 사용할 수 있다.
본 발명의 또 다른 측면은, 일반적으로 상술한 다양한 방법들을 실행하기 위해 컴퓨터 실행가능한 명령들을 저장하는 컴퓨터 판독가능한 매체들에 관한 것이다. 본 발명의 또 다른 측면은, 다양한 잉크 분할기 오브젝트, 잉크 분할 결과 오브젝트, 잉크 분할 유닛 오브젝트, 및 잉크 분할 유닛 오브젝트에 대해 저장된 데이터 구조를 갖는 컴퓨터 판독가능한 매체들에 관한 것이다.
이러한 특징 및 다른 특징들과 본 발명의 측면들은 다음의 상세한 설명 및 도면을 참조하면 보다 명확해 질 것이다.
상기 요약 뿐만 아니라 후속하는 상세한 설명은, 청구되는 본 발명에 대한 제한이 아니라 예로서 포함되는, 첨부되는 도면과 함께 참조할 경우 보다 잘 이해될 것이다.
다음의 상세한 설명은 독자를 위해 서브섹션들로 분할되고, 각 서브섹션들은, 용어; 범용 컴퓨터; 잉크 레이아웃 분석 및 분류 분석(classification analysis)에 대한 일반적인 배경; 잉크 분할기 오브젝트 및 API; 잉크 분할기 오브젝트 및 API의 동작; 어플리케이션 프로그래밍 인터페이스; 선택적 잉크 분할기 오브젝트; 및 결론을 포함한다.
Ⅰ. 용 어(TERMS)
잉크(Ink) - 선택적으로 속성을 갖는, 하나 이상의 스트로크들의 시퀀스 또는 세트. 스트로크들의 시퀀스는 순서화된 형태의 스트로크들을 포함할 수 있다.시퀀스는 스트로크가 페이지 상에 나타나는 위치에 의해, 또는 캡쳐되는 시간에 의해 순서화될 수 있다. 다른 순서도 가능하다. 스트로크의 세트는 스트로크들의 시퀀스 또는 순서화되지 않은 스트로크들 또는 임의의 그들의 조합을 포함할 수 있다. 잉크는, 추가 속성, 방법, 트리거 이벤트 등을 포함하도록 확장될 수 있다.
잉크 오브젝트(Ink object) - 속성, 방법들 및/또는 이벤트들을 갖거나 또는 가지지 않는, 하나 이상의 잉크 스트로크들을 저장하는 데이터 구조.
스트로크(Stroke) - 캡쳐된 포인트들의 시퀀스 또는 세트. 예를 들면, 렌더링될 경우, 포인트들의 시퀀스는 라인들로 연결될 수 있다. 선택적으로, 스트로크는 하나의 포인트 및 다음 포인트의 방향을 갖는 벡터로서 나타낼 수 있다. 즉, 스트로크는, 포인트들의 기본적인 표시 및/또는 포인트들을 연결하는 것에 상관없이, 잉크에 연관된 세그먼트 또는 포인트들의 임의의 표시를 포함한다.
포인트(Point) - 공간 내의 위치를 정의하는 정보. 예를 들면, 포인트들은 캡쳐링 공간(예를 들어 디지타이저(digitizer) 상의 포인트들), 가상 잉크 공간(캡쳐된 잉크가 표시되거나 또는 저장되는 공간 내의 좌표) 및/또는 디스플레이 공간(디스플레이 장치의 포인트들 또는 픽셀들)에 대해 정의될 수 있다.
렌더링(render) - 그래픽 및/또는 잉크가, 스크린, 인쇄 또는 다른 데이터 포맷으로의 출력으로, 표시되는 방법을 결정하는 프로세스.
잉크 세션(Inking Session) - 잉크 스트로크를 조사하고 구문해석된 잉크 엔티티(entity)들 리턴하도록 구문해석기(예를 들면, 잉크 분할기 오브젝트)가 호출될 때까지 어플리케이션이 잉크를 생성하거나 또는 편집하기 시작할 때로부터의 시간의 주기. 구문해석기는, 소정의 잉크 세션동안에 여러번 호출되고 스트로크들은 구문해석기의 호출 사이에서 추가되거나, 삭제되거나 또는 다른 방식으로 수정될 수 있다.
Ⅱ. 범용 컴퓨터(General-Purpose Computer)
도 1은, 본 발명의 다양한 측면을 구현하는데 사용될 수 있는 범용 디지털 컴퓨팅 환경의 일례에 대한 개략도를 나타낸다. 도 1에서, 컴퓨터(100)는 프로세싱 유닛 또는 시스템(110), 시스템 메모리(120), 및 시스템 메모리를 포함하는 다양한 시스템 컴포넌트를 프로세싱 유닛(110)에 연결하는 시스템 버스(130)를 포함한다. 시스템 버스(130)는, 메모리 버스 또는 메모리 컨트롤러, 주변장치 버스 및 임의의 다양한 버스 아키택쳐를 사용하는 로컬 버스를 포함하는 임의의 여러가지 유형의 버스 구조일 수 있다. 시스템 메모리(120)는 ROM(140) 및 RAM(150)을 포함한다.
개시(start-up) 동안과 같이, 컴퓨터(100) 내의 구성요소들 사이에서 정보를 전달하는 것을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(160)(BIOS)은 ROM(140)에 저장된다. 컴퓨터(100)는 또한 하드 디스크(도시되지 않음)로부터 판독하거나 또는 기입하기 위한 하드 디스크 드라이브(170), 탈착가능한 자기 디스크(190)로부터 판독하거나 또는 기입하기 위한 자기 디스크 드라이브(180), 및 CD ROM 또는 다른 광매체와 같이, 탈착가능한 광디스크(192)로부터 판독하거나 또는 기입하기 위한 광디스크 드라이브(191)를 포함한다. 하드 디스크 드라이브(170), 자기 디스크 드라이브(180) 및 광디스크 드라이브(191)는 하드 디스크 드라이브 인터페이스(192), 자기 디스크 드라이브 인터페이스(193) 및 광디스크 드라이브 인터페이스(192)에 의해 각각 시스템 버스(130)에 접속된다. 드라이브 및 그들의 관련된 컴퓨터 판독가능한 매체들은 퍼스널 컴퓨터(100)에 컴퓨터 판독가능한 명령들의 불휘발성 저장, 데이터 구조, 프로그램 모듈 및 다른 데이터를 제공한다. 본 기술분야의 통상의 지식을 가진 자는, 자기 카세트, 플래시 메모리 카드, 디지털 비디오 디스크, 베르누이 카트리지, RAM, ROM 등과 같이, 컴퓨터로 액세스가능한 데이터를 저장할 수 있는 다른 유형의 컴퓨터 판독가능한 매체들도 예시적인 운영 환경에 사용될 수 있다는 것을 이해할 것이다.
운영 시스템(195), 하나 이상의 어플리케이션 프로그램(196), 다른 프로그램 모듈들(197) 및 프로그램 데이터(198)를 포함하는, 다수의 프로그램 모듈들이 하드 디스크 드라이브(170), 자기 디스크 드라이브(190), 광디스크(192), ROM(140), 또는 RAM(150)에 저장될 수 있다. 사용자는 커맨드 및 정보를, 키보드(101) 및 포인팅 장치(102)와 같은 입력 장치를 통해 컴퓨터(100)에 입력할 수 있다. 다른 입력 장치(도시되지 않음)는 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 스캐너 등을 포함할 수 있다. 이러한 입력 장치들 및 다른 입력 장치들은 종종 시스템 버스(130)에 연결되는 시리얼 포트 인터페이스(106)를 통해 프로세싱 유닛(110)에 접속되나, 패러랠 포트, 게임 포트 또는 USB와 같은 다른 인터페이스에 의해 접속될 수 있다. 이러한 장치들은 적당한 인터페이스(도시되지 않음)을 통해 시스템 버스(130)에 직접 접속될 수 있다. 모니터(107) 또는 다른 유형의 디스플레이 장치는 또한 비디오 어댑터(108)와 같은, 인터페이스를 통해 시스템 버스(130)에 접속된다. 모니터 이외에, 퍼스널 컴퓨터는 일반적으로 스피커 및 프린터와 같은 다른 주변 출력 장치(도시되지 않음)를 포함한다. 일례로서, 손으로 그린 입력을 디지털적으로 캡쳐하기 위해, 펜 디지타이저(165) 및 동반되는 펜 또는 사용자 입력 장치(166)가 제공된다. 펜 디지타이저(165)는, 도 1에 도시한 바와 같이, 시스템 버스(130) 및 시리얼 포트 인터페이스(106) 또는 임의의 다른 적당한 접속을 통해 프로세싱 유닛(110)에 연결될 수 있다. 또한, 디지타이저(165)가 모니터(107)와 떨어져 도시되었더라도, 디지터이저(165)의 이용가능한 입력 영역은 모니터(107)의 디스플레이 영역과 동일한 공간에 걸쳐있을 수 있다. 또한, 디지타이저(165)는 모니터(107)에 통합될 수 있거나 또는 위에 위치하는 개별 장치로서 존재할 수 있거나 또는 모니터에 다른 방식으로 부착될 수 있다.
컴퓨터(100)는 원격 컴퓨터(109)와 같은, 하나 이상의 원격 컴퓨터들에 대한 논리적 접속을 사용하는 네트워크화된 환경에서 동작할 수 있다. 관련된 어플리케이션 프로그램(196)을 갖는 메모리 저장 장치(111)만이 도 1에 도시되어 있더라도, 원격 컴퓨터(109)는 서버, 라우터, 네트워크 PC, 피어 장치(peer device), 또는 다른 일반적인 네트워크 노드일 수 있고 일반적으로 컴퓨터(100)에 대해 상술한 구성요소들의 많은 부분 또는 모두를 포함할 수 있다. 도 1에 도시된 논리적 접속은 LAN(112) 및 WAN(113)을 포함한다. 그러한 네트워킹 환경은 유선 및 무선 통신 시스템을 사용하는, 사무실, 전사적 컴퓨터 네트워크, 인트라넷 및 인터넷에 일반적이다.
LAN으로 네트워킹화된 환경에 사용되는 경우, 컴퓨터(100)는 네트워크 인터페이스 또는 어댑터(114)를 통해 로컬 네트워크(112)에 접속된다. WAN으로 네트워킹화된 환경에 사용되는 경우, 퍼스널 컴퓨터(100)는 일반적으로 모뎀(115) 또는 WAN(113), 예를 들면 인터넷을 통해 통신 링크를 확립하기 위한 다른 수단을 포함한다. 내부형 또는 외장형일 수 있는, 모뎀(115)은 시리얼 포트 인터페이스(106)를 통해 시스템 버스(130)에 접속된다. 네트워크화된 환경에서, 퍼스널 컴퓨터(100)에 대해 도시된 프로그램 모듈 또는 그 일부분은 원격 메모리 저장 장치에 저장될 수 있다.
도시된 네트워크 접속은 예시적이고 컴퓨터들 사이의 통신 링크를 확립하기 위한 다른 기술들이 사용될 수 있음을 이해할 것이다. TCP/IP, 이더넷, FTP, HTTP 등과 같은 잘 알려진 임의의 다양한 프로토콜이 존재한다고 가정하고 시스템은 사용자가 웹-기반 서버로부터 웹 페이지들을 검색하도록 허용하는 클라이언트-서버 구성에서 동작될 수 있다. 임의의 다양한 종래의 웹 브라우저들이 웹 페이지들 상의 데이터를 표시하고 조작하는데 사용될 수 있다.
도 2는 본 발명의 다양한 측면들과 연계하여 사용될 수 있는 펜-기반 또는 스틸러스-기반 컴퓨팅 시스템(201)의 일례를 나타낸다. 도 1의 시스템의 특징, 서브시스템 및 기능들의 일부 또는 전부가 도 2의 컴퓨터에 포함될 수 있다. 펜-기반 컴퓨팅 시스템(201)은 큰 디스플레이 표면(202), 예를 들면 LCD 스크린과 같이, 다수의 윈도우(203)가 표시되는, 디지탈화된 플랫 패널 디스플레이를 포함한다. 스틸러스(204)를 사용하여, 사용자는 디지털화된 디스플레이 표면(202) 상에서 선택, 하이라이트 및/또는 기입할 수 있다. 적당한 디지털화된 디스플레이표면(202)의 일례들은 Mutoh 또는 Wacom 펜 디지타이저와 같은 전자기 펜 디지타이저를 포함한다. 다른 유형의 펜 디지타이저, 예를 들면, 광 디지타이저도 사용될 수 있다. 펜-기반 컴퓨팅 환경(201)은 데이터를 조작하거나, 텍스트를 입력하거나, 도면을 생성하거나 및/또는 스프레드시트, 단어 프로세싱 프로그램 등과 같은 종래의 컴퓨터 어플리케이션 작업들을 실행하기 위해, 스틸러스(204)를 사용하여 만들어진 제스쳐를 해석한다.
스틸러스(204)는 그 선택 능력을 증대시키기 위해 하나 이상의 버턴 또는 다른 특징을 가질 수 있다. 일례에서, 스틸러스(204)는, 일단부는 기록 구성요소를 구성하고 타 단부는 "이레이저(eraser)" 단부를 구성하는, "펜슬(pencil)" 또는 "펜(pen)"으로 구현될 수 있다. 이레이저로서 디스플레이 상에서 이동될 경우, 이레이저는 지워질 디스플레이의 일부분을 나타낸다. 마우스, 트랙볼 등과 같은 다른 유형의 입력 장치가 사용될 수 있다. 또한, 사용자 자신의 손가락이 스틸러스(204)가 될 수 있고 터치형(touch-sensitive) 또는 근접형(proximity-sensitive) 디스플레이 상의 표시된 이미지의 일부분을 선택 또는 표시하는데 사용될 수 있다. 결과적으로, 본원에 사용되는 것과 같은, "사용자 입력 장치(user input device)"라는 용어는, 스틸러스(204)와 같은, 잘 알려진 입력 장치에 대한 많은 변형을 포함하고 넓은 정의를 가진다. 영역(205)은, 스틸러스(204)가 디스플레이 표면(202)을 접촉하는 영역을 사용자가 결정하게 하는 접촉 영역 또는 피드백 영역을 나타낸다.
본 발명의 예들에 따른 어플리케이션 프로그램 인터페이스 및 시스템과 방법들은 도 2와 함께 상술한 것과 유사하게, 전자 잉크 및 잉크 스트로크를 수용하고 처리하는 펜-기반 컴퓨팅 시스템과 함께 사용될 수 있다.
Ⅲ. 잉크 레이아웃 분석 및 분류 분석에 대한 일반적인 배경(General Background on ink layout analysis and classification analysis)
A. 전체 잉크 분석 시스템 및 방법의 일반적인 설명
본 발명의 이해를 돕기 위해, 잉크 "레이아웃 분석(layout analysis)" 및 잉크 분류 분석(또한 "잉크 구문해석(ink parsing)"으로 부름)에 대한 소정의 배경 정보를 검토하는 것이 유용하다. 본 발명에서 벗어남이 없이, 임의의 적당한 데이터 프로세싱 시스템 및 방법이 사용되면서, 본 발명의 소정의 예에서, 2002년 5월 14일 미국특허출원번호 10/143,865에 기술된 것과 유사한 레이아웃 분석 시스템 및 방법이 사용될 수 있고, 본 발명의 소정의 예에서, 2002년 5월 14일 미국특허출원번호 10/143,864에 기술된 것과 유사한 분류 분석 시스템 및 방법이 사용될 수 있다. 일반적으로, 잉크를 구문해석하는 것은 본 발명에서 벗어남이 없이, 임의의 적당한 방식으로 행할 수 있다.
도 3은 본 발명의 소정의 예에서 잉크가 구문해석되거나 또는 분할될 수 있는 전체 시스템 및 방법의 일례를 일반적으로 나타내는 개략도이다. 도 3의 일례에서, 인입 또는 입력 잉크 스트로크(300)는 먼저, 입력 잉크 스트로크(300)를 단어, 라인, 단락(또는 블럭) 및/또는 다른 그룹(304)과 같은, 연관된 스트로크 세트로 결합하고 구문해석하는, 레이아웃 분석 절차(302)를 거친다. 일반적으로, 레이아웃 분석 방법 또는 시스템(302)은 페이지 상의 잉크 스트로크(300)의 레이아웃및 크기에 관련한 소정의 정보를 확인하고, 크기, 레이아웃 등에 기초하여 소정의 스트로크들을 함께 그룹화한다. 그러한 시스템 또는 방법의 일례는 도 5, 6a 및 6b와 함께 보다 상세하게 설명된다.
레이아웃 분석(302) 이후, 데이터는 다양한 추가 잉크 분석 엔진으로 도입될 수 있다. 도 3에 나타낸 예시적인 시스템에서, 데이터는 분류 분석 시스템 또는 엔진(306)으로 도입된다. 이러한 분류 분석 시스템 또는 엔진(306)은 특정 입력 데이터에 포함되는 스트로크의 유형(예를 들면, 개별적인 스트로크 또는 스트로크 세트들이 흐름도, 자유형태의 도면, 수기 텍스트, 음악, 수학적 정보, 챠트, 그래프 등을 나타내는지 여부)을 결정한다. 본 발명의 소정의 예에서, 원한다면, 사용자는, 예를 들면, "드로잉 모드(drawing mode)", "텍스트 모드(text mode)" 등을 선택하거나 또는 특정 스트로크 유형을 하나 이상의 스트로크에 할당(예를 들면, 블럭 또는 라쏘(lasso)를 사용하여, 단락차를 선택 및 할당)함으로써 입력 스트로크의 유형에 대하여 시스템에게 "통보(inform)"할 수 있다.
입력 잉크의 추가 처리는 분류 분석 시스템 또는 엔진(306)에 의해 인식된(또는 다른 방식으로 결정된) 스트로크 유형에 의존적이다. 예를 들면, 텍스쳐 수기(textual handwriting)로 분류되는 스트로크들 또는 스트로크 세트에 대하여, 그렇게 분류된 스트로크 세트들은 수기 인식 시스템(310) 또는 다른 적당한 프로세싱 시스템으로 송신될 수 있다. 필요하거나 또는 원한다면, 수기 인식 시스템(310) 또는 다른 프로세싱 시스템으로의 도입 이전에, 입력 잉크 데이터는, 수기 인식 시스템(310) 또는 다른 프로세싱 시스템에 의한 분석을 위해 입력 잉크 데이터를 최적의 방향으로 배치하도록(예를 들면, 필요할 경우, 기울어진 입력 텍스트 스트로크들을 수평 베이스 라인으로 회전함) 표준화 알고리즘 또는 시스템(308)을 사용하여 "표준화(normalized)"될 수 있다. 종래의 표준화 시스템 또는 방법(308) 및/또는 수기 인식 시스템 또는 방법(310)이 (필요할 경우 및/또는 원하는 경우) 본 발명에서 벗어나지 않고 사용될 수 있다. 수기 인식 시스템 또는 방법(310)으로부터 출력된 데이터는, 종래의 단어 프로세싱 시스템(예를 들면, 마이크로소프트 워드 등), 전자메일 처리 시스템, 달력, 메모장 등에서와 같이, 임의의 종래의 방식으로 사용될 수 있는 기계-생성된 텍스트(예를 들면, 라인, 단어, 단락 등)을 구성하거나 또는 링크될 수 있다.
도 3에 도시한 바와 같이, 다른 예로서, 분류 분석 엔진(306)이 입력 스트로크 또는 스트로크 세트를 도면 스트로크를 포함하는 것으로 인식하면, 이러한 데이터는, 예를 들면 도면 내의 텍스쳐 정보를 인식하는데 사용될 수 있는, 주석(annotation) 인식 시스템 또는 방법(314)으로 전송될 수 있다. 추가 프로세싱은 임의의 적당한 방식으로 진행될 수 있다. 예를 들면, 원한다면, 도면은, 수기 주석이 기계-생성된 텍스트로 교체될 수 있는 "클린-업(cleaned-up)"으로 될 수 있고, 수기 도면 라인 또는 형상(예를 들면, 원, 삼각형, 사각형 등)은 기계-생성된 구성요소 등으로 교체될 수 있다. 또한, 도면(수기 버젼 또는 이후의 기계-생성된 버젼 중 어느 하나)는 본 발명에서 벗어남이 없이 임의의 적당한 프로그램 또는 시스템으로 도입될 수 있다.
또한, 본 발명의 소정의 예에서 사용되는 분류 분석 시스템 및 방법(306)은본 발명에서 벗어남이 없이 다른 특정 기록 또는 도면 유형을 인식할 수 있다. 예를 들면, 분류 분석 시스템은 본 발명에서 벗어남이 없이 입력 스트로크 세트를 음악 표기, (수식, 수학적 기호(+, -, =, %, x, sin, cos, tan 등과 같은) 수학적 정보, 테이블, 챠트, 그래프, 흐름도, 개략도, 도면, 스케치, 낙서 등을 포함하는 것으로 인식할 수 있다. 그러한 스트로크 세트는, 존재한다면, 본 발명에서 벗어남이 없이 보다 특별한 인식 시스템 및/또는 다른 적당한 프로세싱 어플리케이션으로 송신될 수 있다.
도 3과 함께 설명된 기능들 중 일부 또는 전부는, 사용자가 모든 잉크를 전자 페이지 또는 문서로 완전히 입력한 후 입력 잉크 데이터(예를 들면, "저장(save)", "구문해석(parse)", "닫음(close)", 또는 "인식(recognize)" 커맨드 등의 사용자의 커맨드에 대해)에 대해 실행될 수 있다. 그러나, 일반적인 레이아웃 분석 및 수기 인식 분석을 실행하는데 필요한 컴퓨터 처리 시간때문에, 사용자는 처리가 매우 빈번하게 수행된다면, 특별하게 상당한 지연을 경험할 것이다. 이러한 프로세싱 지연은, 특별히 전자 문서가 길거나 많은 분량의 잉크를 가지는 경우, 사용자가 다음 원하는 동작(예를 들면, 보다 많은 잉크를 입력, 새로운 페이지로의 이동, 인쇄, 새로운 문서 또는 어플리케이션을 개봉 등)으로 이동하기 이전에 컴퓨터 시스템이 그 분석을 완료하는 것을 대기하는 것이 짜증날 정도록 충분히 길게 지속될 수 있다.
본 발명의 적어도 소정의 예에 따른 시스템 및 방법은 펜-기반 컴퓨팅 시스템이 레이아웃 분석(302), 분류 분석(306), 수기 인식 분석(310) 등과 같은 다양한분석을 실시간으로 점차 많이 실행할 수 있도록 하면서, 사용자는 펜-기반 컴퓨팅 시스템을 사용하여 (예를 들면, 페이지 상의 잉크 스트로크를 입력 및/또는 수정하는 것을) 계속한다. 더우기, 본 발명에 따른 시스템 및 방법 중 소정의 예에서, 잉크를 입력하기 위한 사용자에게 어플리케이션 데이터 구조가 이용가능하지 않은 시간을 최소화하기 위하여, 어플리케이션 데이터 구조(본원에서 사용하는 것과 같은, "어플리케이션 데이터 구조(application data structure)"는 어플리케이션 프로그램과 연결하여 사용되는 데이터 구조를 의미함)의 "스냅샷(snapshot)"에 대해, 다양한 구문해석기 엔진이 백그라운드 쓰레드로 동작한다. 임의의 적당한 증분형 데이터 분석 시스템 및 방법이 본 발명에서 벗어나지 않고 사용되면서, 2002년 5월 14일에 출원된 미국특허출원번호 10/143,804에 설명된 적당한 시스템 및 방법들의 예들이 사용될 수 있다.
B. 레이아웃 분석 및 분류를 위한 예시적인 시스템 및 방법의 설명
도 4는 본 발명을 실행하는데 유용한 시스템의 일례에 대한 개략도를 나타낸다. 도시한 바와 같이, 전체 시스템(410)은 구문해석기(422)를 포함하거나 이와 통신하는, 어플리케이션 시스템 또는 프로그램(420)을 포함한다. 전체 시스템(410)은 도 2에 도시된 것과 유사한 펜-기반 컴퓨팅 시스템에 포함될 수 있다.
사용자(400)는 잉크 스트로크를 시스템(410)에 입력하고 (또는 잉크 스트로크는 예를 들면 메모리 또는 외부 소스로 부터 다운로드됨) 잉크 스트로크는 어플리케이션 프로그램(420)에 의해, 예를 들면 (도 6a와 6b에 도시된 것과 유사한, 문서 트리 데이터 구조(402)로 생각될 수 있는) 어플리케이션 데이터 구조(402)에 저장된다. 구문해석기(422)가 동작하는 동안 사용자(400)가 계속하여 문서 트리 데이터 구조(402)를 변화시킬 수 있도록, 구문해석기(422)는 미러 트리 데이터 구조(404)를 포함한다. 문서 트리 데이터 구조(402)(예를 들면 다른 소스 등으로부터 사용자(400), 구문해석기(422)에 의해)에 가해지는 변화는, 미러 트리 데이터 구조(404)가 일반적으로 문서 트리 데이터 구조(402)의 콘텐츠를 "미러(mirror)"하도록 미러 트리 데이터 구조(404)로 즉시 통과된다.
미러 트리 데이터 구조(404)는 구문해석기(422) 내의 2개의 분석 엔진(406, 408)에 입력 데이터를 공급하는데 사용된다. 도 4에 도시된 예에서, 하나의 분석 엔진은, (예를 들면, 도 3과 함께 상술한 바와 같이 레이아웃 분석(302)을 수행할 수 있는) 레이아웃 분석 엔진(406)이고 다른 것은 (예를 들면, 도 3과 함께 상술한 바와 같이, 수기 인식 분석(310) 및/또는 주석 인식 분석(314)을 수행할 수 있는) 인식 엔진(408)이다. 엔진(406, 408)은 입력 데이터로서 미러 트리 데이터 구조(404)의 "스냅샷"(424, 426)을 각각 수신하고, 문서 트리 데이터 구조(402) 또는 미러 트리 데이터 구조(404) 상에서 직접 동작하는 대신 이러한 "스냅샷"(424, 426)을 백그라운드로 동작시킨다. 이러한 방식에서, 사용자(400)는 어플리케이션 프로그램(420) 내의 문서 트리 데이터 구조(402) 상의 동작을 계속 실행하면서(예를 들면, 잉크 추가, 잉크 삭제, 잉크 수정, 등), 다양한 구문해석기 분석 엔진(406, 408)이 동작하고 엔진(406, 408)이 데이터에 대해 동작하는 동안 사용자(400)는 동작에 있어서 상당한 중단(예를 들면, 프로세싱 지연)을 경험하지않는다.
소정의 예에서 "스냅샷"(424, 426)을 생성하기 위하여, 기존의 스냅샷 데이터 구조들이 미러 트리 데이터 구조(404)와 비교될 수 있다. 양자 사이의 차이가 발견되고 최소한의 동작 횟수가 실행되어 스냅샷(424 또는 426)을 미러 트리 데이터 구조(404)에 동기화시킨다. 이러한 방식으로, 스냅샷을 만들때 최소한의 데이터 재기입이 발생하며(예를 들면, 이전 스냅샷으로부터의 변경되지 않은 데이터는 재기입되지 않음), 이는 또한 구문해석기(422)의 동작 속도를 증가시키는데 도움을 준다.
구문해석기 엔진(406, 408)의 출력은 수정되거나 또는 개선된 데이터 구조일 수 있다. 예를 들면, 레이아웃 분석 엔진(406)이 도 5에 도시된 것과 유사하다면, 레이아웃 분석 엔진(406)의 출력은 연관된 단어, 라인, 단락 등으로 그룹화된 개별적인 잉크 스트로크들을 포함하는 데이터 구조일 수 있다. 이러한 유형의 레이아웃 분석 엔진의 동작은 아래에 보다 자세하게 설명된다. 유사하게, 구문해석기 엔진(408)이 수기 인식 시스템(310)이라면, 출력은 기계-생성된 텍스트에 잉크 스트로크를 연결하는 데이터 구조 또는 정보를 포함할 수 있다.
구문해석기 엔진(406, 408)이 스냅샷 입력 데이터(424, 426)에 대해 각각 그들의 동작을 완료한 경우, 결과 정보는, 화살표(428, 430)로 나타낸 바와 같이, 각각 어플리케이션 프로그램(420)으로 다시 송신될 수 있다. 그러나, 상술한 바와 같이, 사용자(400)는, 구문해석기 엔진(406, 408)이 스냅샷(424, 426)에 대해 동작하는 시간 기간동안 문서 트리 데이터 구조(402)를 변화시킬 수 있다. 그러므로,구문해석기 분석 엔진 결과를 다시 문서 트리 데이터 구조(402)로 기록하기 이전에, 구문해석기(422)는, 선택적으로 미러 트리 데이터 구조(404)를 사용하여, 현재 (사용자의 변화를 포함하는) 어플리케이션 프로그램(420) 내의 문서 트리 데이터 구조(402)와 구문해석기(404, 408)에 의해 송신된 개정된 문서 트리 데이터 구조(들)을 비교한다. 사용자(400)는, 구문해석기 엔진(406, 408)으로부터의 개정된 문서 트리 데이터 구조(들) 내에 포함되지 않은 문서 트리 데이터 구조(402)를 (예를 들면, 하나 이상의 스트로크들을 추가하거나, 삭제하거나, 리사이징하거나, 또는 다른 방식으로 수정함으로써) 변경시키거나, 또는 문서 트리 데이터 구조(402)에 대해 사용자가 행한 변경이 구문해석기 엔진(406, 408)에 의해 (예를 들면, 스트로크들을 추가하거나, 삭제하거나, 또는 다른 방식으로 수정함으로써) 이루어진 데이터 구조에 대한 변경과 논쟁의 여지가 있거나 또는 부딪힌다면, 어플리케이션 문서 트리 데이터 구조(402)는 사용자가 행한 변경과 부딪히지 않는 구문해석기 분석 엔진에 의해 행해진 변경만을 포함하도록 개정된다(사용자가 행한 변경이 구문해석기가 행한 변경을 무효로 할 것이다). 또한, 데이터 기록 시간( 및 사용자(400)가 경험하는 연관된 중단)을 감소시키기 위하여, 기존 버젼으로부터 수정된 문서 트리 데이터 구조(402)의 일부분만이 변경되거나 또는 재기록된다. 이러한 방식에서, 구문해석기 엔진이 사용자가 행한 변경에 의해 지거나 또는 불일치하지 않는 변경을 행하는 정도까지는, 어플리케이션 프로그램(420)에 존재하는 최종적으로 개정된 문서 트리 데이터 구조(402)는 사용자(400)가 행한 모든 변경 및 이전의 구문해석기 엔진 분석의 결과를 포함할 것이다.
문서 트리 데이터 구조(402)는 사용자 뿐만 아니라 구문해석기 엔진(406, 408)에 의해 궁극적으로 수정가능한 공유 데이터를 포함하기 때문에, 사용자(400)는, 구문해석기가 행한 변경을 포함하도록 재기록하면서 새로운 데이터를 문서 트리 데이터 구조(402)에 입력할 수 없다. 사용자(400)가 그렇게 하도록 시도한다면, 본 발명에 따른 시스템 및 방법은 임의의 적당한 방식으로 이러한 노력들을 처리할 수 있다. 예를 들면, 새로운 스트로크 또는 변경이 무시될 수 있거나 또는 개정된 어플리케이션 문서 트리 데이터 구조(402)가 입력된 데이터에 대해 이용가능할 때까지 일시적인 버퍼 메모리에 저장될 수 있다. 그러나, 본 발명의 이러한 실시예에 따른 어플리케이션 프로그램(420) 내의 문서 트리 데이터 구조(402)는 일반적으로 데이터 구조(402)의 변경된 부분을 시스템이 재기록하는 시간 동안에만 이용가능하지 않기 때문에, 이용가능하지 않는 시간 주기는 일반적으로 상당히 짧고 종종 사용자가 알아차리지 못한다.
문서 트리 데이터 구조(402)가 (사용자 및/또는 구문해석기 엔진이 행한 변경을 포함하여) 재기록되거나 또는 수정되면, 미러 트리 데이터 구조(404)가 갱신되어 재기록 또는 수정된 문서 트리 데이터 구조(402)를 미러링(mirror)하고 구문해석기 엔진(406, 408)은 그들의 분석을 (필요한 경우) 반복할 수 있다. 소정의 실시예에서, 구문해석기 엔진(406, 408)은 최근에 수정되었던 문서 트리 데이터 구조의 일부분 (및 최근 수정된 임의의 부분)에 대해서만 동작하여 프로세싱 시간을 줄일 수 있는 이점이 있다. 사용자가 데이터를 입력함과 동시에 구문해석기 엔진 동작을 증분적으로 갱신함으로써 구문해석기(422)는 일반적으로 사용자의 데이터입력을 따라갈 수 있어, 사용자가 관찰하는 프로세싱 지연을 최소화할 수 있다.
상술한 바와 같이, 본 발명의 소정의 실시예에서, 프로세싱 시간은 변경이 발생했던 데이터 구조의 일부분 (및 이러한 변경에 영향을 받은 모든 영역들)으로 프로세싱을 한정함으로써 감소될 수 있다. 사용자 입력 또는 이전의 구문해석기 엔진 동작이 데이터 구조의 소정의 부분에 영향을 주지않았다면, 구문해석기 엔진이 이러한 동일한 부분들을 다시 분석(하고 동일한 결과에 도달할 것으로 가정됨)할 필요가 없다. 예로서, 소정의 실시예들에 따른 시스템 및 방법은 소정 거리의 변경 이내에 위치한 데이터 구조의 임의의 부분을 재분석할 수 있다. 예를 들면, 재분석은, 임의의 변경의 라인 및 변경을 둘러싸는 임의의 하나 또는 두개 라인들, 변경을 둘러싸는 미리 선택된 반지름의 원 내에 위치한 임의의 스트로크, (아래에서 보다 자세하게 설명하는 바와 같이) 변경을 포함하는 텍스트의 임의의 블럭 등을 포함할 수 있다. 이러한 특징을 이용하는 구문해석기의 예들을 다음에 상세하게 설명한다.
C. 구문해석동안 발행하는 프로세싱의 예
본 발명의 실시예에 따른 시스템 및 방법으로 분석되거나 또는 처리되는 데이터는 임의의 적당한 형태 또는 구조를 취할 수 있다. 예를 들면, 도 3에 도시된 바와 같이, 하나의 절차에서, 입력 잉크 데이터의 개별적인 스트로크(300)는, 입력 잉크로부터 얻어진 전체 잉크 레이아웃 및 통계에 기초하여 소정의 개별적인 스트로크를 그룹화하거나 또는 연관시키는, 레이아웃 분석 엔진(302)에 의해 이루어진 일련의 결정의 결과로서 데이터 구조 내에 함께 결합된다. 레이아웃 분석엔진(302)은 페이지 상에 잉크 스트로크들의 계층적인 그룹화를 제공하는데, 이는 그룹들에 걸쳐 전반적인 통계 계산을 가능하게 한다. 잉크 스트로크의 그룹들이 작을 경우(예를 들면, 작은 그룹이 개별적인 잉크 스트로크 또는 비교적 짧은 조합의 스트로크들을 나타냄) 로컬 레이아웃 관계에 기초하여, 제1 스트로크 그룹화 결정은 보전적이다. 이후의 스트로크 그룹화 결정은, 보다 큰 잉크 스트로크 그룹화로부터 보다 큰 통계적 샘플 크기가 수집되기 때문에(예를 들면, 보다 긴 라인에 걸친 스트로크 크기, 상대적 스트로크 공간, 라인 각도 등), 보다 공격적이다. 입력 잉크 데이터를 통한 다수의 패스들은, 스트로크들을 병합하여 입력 잉크 스트로크의 단어, 라인 및/또는 블럭들(304)과 같은 스트로크 세트를 형성할지 여부를 판단할 때 점차 공격적인 결정을 가능케하도록 실행될 수 있다.
도 5는 일반적으로 본 발명의 소정의 실시예들에 사용되는 데이터 구조를 생산하거나 및/또는 수정하는데 유용한 잉크 레이아웃 분석 구문해석기 엔진, 시스템 또는 방법(302)의 일례에 포함되는 구문해석 엔진 또는 단계들을 도시한다. 본 발명의 소정의 실시예에 따른 방법 및 시스템에 사용자가 디지털 잉크를 입력하는 것에 제공되는 자유도가 매우 높기 때문에(예를 들면, 사용자는 디지타이저 입력 스크린 상의 임의의 곳에, 임의의 방향으로, 임의의 시간에, 임의의 원하는 스트로크 크기를 사용하여 기록하도록 허용됨), 도 5의 레이아웃 분석 절차(302)가 시작하는 경우, 입력 데이터의 적당한 레이아웃, 방향 또는 유형을 결정하는 것(예를 들면, 인입 입력 데이터(500)가 텍스쳐, 도면, 수학적 정보, 음악, 흐름도, 챠트, 그래프 등인지 여부)으로부터 이용가능한 예비 정보가 존재하지 않는다. 도 5의구성요소(502)는 이러한 레이아웃 분석 절차의 개시시에 가능한 입력 데이터 구조(500)의 유형들중 하나에 대한 일반적인 그래픽 표시를 제공한다. 그래픽 표시(502)는 도 6a의 구문해석 트리 데이터 구조에서 보다 상세하게 설명된다. 일반적으로, 레이아웃 분석 절차(302)가 시작되는 경우(예를 들면, 사용자가 계속적으로 잉크 스트로크를 펜-기반 컴퓨팅 시스템에 입력하더라도), 시스템은 소정의 페이지(또는 소정의 문서) P(608) 상의 모든 스트로크 S(600)를 개별적인 단어 W(602)로서 취급하고, 모든 단어 W(602)는 개별적인 라인 L(602)으로 취급되고 모든 라인 L(604)은 개별적인 블럭 B(606) (또는 단락)로서 취급된다. 레이아웃 분석 엔진(302)은 연관된 잉크 데이터의 적당한 단어, 라인 및 블럭들을 포함하는 스트로크 세트를 형성하기 위해 스트로크들을 함게 연관시키거나 또는 병합하는 작업을 실행한다. 임의의 적당한 레이아웃 분석 엔진이 본 발명과 함께 사용될 수 있으며, 도 5에 도시된 예는 아래에 보다 자세하게 설명될 것이다.
예시적인 레이아웃 분석 엔진(302)의 설명이 "단어(word)", "라인(line)" 및 "블럭(block)"과 같은 용어를 사용하더라도, 이러한 용어들은 본 명세서의 해당 부분에서 하나 이상의 연관된 스트로크 또는 스트로크 세트들을 편리하게 나타내도록 사용된다. 본 발명의 적어도 소정의 실시예에서, 레이아웃 분석(302)이 초기에 발생할 때에, 개별적인 스트로크 또는 스트로크 세트들이 기록, 도면, 음악 등을 구성하는지 여부에 대해 최종 결정이 이루어지지 않는다. 또한, 상기 설명이 "페이지(page)"라는 용어를 사용하더라도, 소정의 전자 문서가 페이지 단위로 구문해석될 필요는 없다. 예를 들면, 전자 문서의 "블럭(blocks)" 또는 "단락(paragraph)"은 본 발명을 벗어남이 없이 문서의 2개 이상의 페이지를 브릿지(bridge)할 수 있다.
각각의 패스(또는 각각의 구문해석 엔진의 동작) 동안, 스트로크 또는 라인 병합기 동작이 발생하나, 분리(split)는 발생하지 않도록, 본 발명의 이러한 예에 따른 레이아웃 분석 엔진(302)이 의욕적으로 동작한다. 더우기, 엔진(302)은, 되돌아 가서 원하지 않는 병합기 동작을 보정할 필요가 없도록 적당한 테스트와 허용오차를 가지고 동작한다.
레이아웃 분석 엔진(302)의 동작의 결과로서, 전자 문서의 개별적인 스트로크(600)가, 적당한, 단어 W, 라인 L, 및 블럭 B(또는 단락)을 포함하는 연관된 스트로크 세트로 함께 결합될 수 있다. 도 6b는 레이아웃 분석 엔진(302)으로부터의 데이터 출력(504)에 대한 가능한 데이터 구조의 그래픽 표시(506)를 나타낸다. 도 6a 및 6b의 비교로부터 명백한 바와 같이, 페이지(또는 문서)(608)는 모두 동일한 스트로크 정보를 포함하나, 소정의 스트로크 S(600)는 단어 W(610)를 형성하도록 함께 결합되거나 또는 연관되고, 소정의 단어 W(610)는 도 6b의 데이터 구조 내의 라인 L(612)을 형성하기 위해 함께 결합되었다. 물론, 단어 W(610)는 임의의 개수의 스트로크 S(600)를 포함할 수 있고, 유사하게 라인 L(612)은 임의의 개수의 단어 W(610)을 포함할 수 있다. 또한, 도 6b의 특정 구문해석 트리 예에서 도시되지는 않았지만, 2개 이상의 라인 L(612)도 블럭 B(614) (또는 단락)을 형성하도록 함께 결합될 수 있다.
문서 내의 잉크 구조를 정의하는데 도움을 주는 것 이외에, 구문해석 트리내의 다양한 노드들(예를 들면, 도 6b 내의 노드 600, 610, 612 등)이 사용되어 트리 내의 다양한 레벨들에 관련된 공간 정보를 저장할 수 있다. 예를 들면, 각 라인 레벨 노드(612)는 라인의 스트로크, 라인 내의 각 스트로크의 볼록한 덮개 및/또는 임의의 다른 원하는 정보를 구성하는 모든 포인트들의 회귀/피트(fit) 라인을 저장할 수 있다. 또한, 구문해석 트리 데이터 구조는 그 안에 포함되는 스트로크, 단어, 라인 및 블럭들에 대해 다양한 기본 동작을 적용함으로써 수정될 수 있다. 적당한 동작은, 추가, 삭제, 병합, 분리 및 리-페런트(re-parent)를 포함할 수 있다. 보다 복잡한 동작은 이러한 기본 동작을 사용하여 구성될 수 있다. 이러한 동작들이 데이터 구조 트리에 대해 실행되면, 서로 다른 노드 레벨에 관리되는 통계가 자동적으로 갱신되어 새로운 구조에 대응할 수 있다.
도 5는 이러한 본 발명의 소정의 예에 유용한 적당한 레이아웃 분석 엔진(302)의 일례의 개략적인 개요를 제공한다. 이 예에서, 레이아웃 분석 절차(302)의 제1 단계는 시간적 라인 그룹화 단계(508)인데, 이는 일반적으로 시간적으로 인접한 스트로크들(즉, 연속적으로 기록된 스트로크들)의 특징들을 비교하고 적당하다면, 그들을 "라인"으로 결합한다. 시간적 라인 그룹화가 시간적으로 인접한 2개 이상의 스트로크들로부터 이루어질 수 있는지 여부를 결정하는데, 스트로크 크기, 스트로크 간의 공간, 스트로크 각도 등과 같은, 다양한 인자들이 고려될 수 있다.
이러한 시간적 라인 그룹화 단계(508)가 완료되면, 분석(302)의 다음 단계계, 공간적 블럭 그룹화 단계(510)는 단계 508에서 형성된 물리적으로 인접한 시간적 라인 그룹화를 비교하고 서로 가깝게 위치하는 시간적 라인 그룹화를 공간 블럭으로서 결합한다. 공간적 블럭 그룹화가 인접한 시간적 라인 그룹화로부터 이루어질 수 있는지 여부를 결정할 때, 스트로크 크기, 스트로크 간의 공간, 라인 각도 등과 같은 다양한 인자들이 고려될 수 있다.
(단계 508로부터) 시간적으로 그룹화된 라인은 적당하다면 선택적으로 공간적 라인 그룹화 단계(512)에서, 그들의 공간 블럭 관계 또는 방향을 고려하여 더 그룹화될 수 있다. 이러한 공간적 라인 그룹화 단계(512)는, 라인의 공간 관계 이외의 인자들, 라인 각도, 스트로크 크기 등이 고려될 수 있더라도, 다른 스트로크와 비교되는 한 스트로크의 시간을 고려할 필요가 없다. 또한, 상술한 공간적 블럭 그룹화 절차(510)의 결과가 기존의 2개의 시간적 라인 그룹화들 사이에서 공간적 라인 그룹화가 이루어질 수 있는지의 여부를 결정하는데 인자로서 사용될 수 있다.
공간적 라인 그룹화가 완료되면, 본 실시예에 따른 레이아웃 분석 절차(302)는, 예를 들면 스트로크 간 공간, 라인 방향, 스트로크 크기 등과 같은 인자들에 따라, 라인 그룹화 내의 개별적인 스트로크를 하나 이상의 공간적 단어 그룹(516)으로 결합한다. 결과 출력(504)은 도 6b와 함께 설명하는 바와 같이, 단어, 라인, 및 블럭으로 그룹화된 스트로크를 갖는 데이터 구조(506)일 수 있다.
또한, 도 5는 레이아웃 분석(302)의 일부분으로서 사용될 수 있는 선택적 구문해석 엔진 또는 단계를 파선으로 나타낸다. 이러한 선택적 단계는 "리스트 검출(list detection)"(514)로 불린다. 종종, 사람들이 리스트를 기록하는 경우,(수직) 컬럼의 번호, 문자, 또는 불릿 포인트(bullet point)를 기록한 후, (수평 방향의) 리스트 구성요소를 채우는 경향이 있다. 다른 경우, 사람들은 리스트의 콘텐츠를 기록한 후, 나중에 수직 컬럼의 번호, 문자, 또는 불릿 포인트를 추가한다. 리스트 검출 엔진(514)은 (예를 들면, 일시적인 라인 그룹의 방향 및 타이밍 등을 찾음으로써) 이러한 특별 환경을 검출할 수 있고 리스트 번호, 문자, 또는 불릿 포인트를 대응하는 리스트 구성요소 텍스트와 결합할 수 있다.
이러한 예시적인 잉크 분석 엔진(302)의 다양한 단계들(도 5)은 본 발명의 범주를 벗어나지 않고 순서가 변경되거나 생략될 수 있다. 예를 들면, 원한다면, 공간적 라인 그룹화 단계(512)는 공간적 블럭 그룹화 단계(510) 이전에 발생할 수 있다.
도 3에 나타낸 바와 같이, 레이아웃 분석 엔진(302)으로부터의 출력 데이터(504)는 분류 엔진(306)과 같이, 임의의 적당한 방식으로 사용될 수 있고, 그것으로부터 데이터는 다른 적당한 프로세싱 엔진(예를 들면, 주석 인식(314), 수기 인식(310) 등)으로 진행할 수 있다. 도 4와 함께 나타낸 바와 같이, 레이아웃 분석 엔진(302), 또는 레이아웃 분석 엔진(302)과 분류 엔진(306)의 결합이 구문해석 엔진(406)을 형성할 수 있다.
물론, 본 발명은 레이아웃 분석 엔진 또는 임의의 특정 유형의 분석 엔진을 이용하는 동작에 한정되지 않는다. 개별적인 스트로크를 적당한 데이터 구조 또는 다른 임의의 원하는 분석으로 그룹화 또는 연관시키기 위한 다른 적당한 엔진 또는 절차가 본 발명의 범주를 벗어나지 않고 실행될 수 있다. 또한, 원한다면, 프로세싱 이전에, 사용자는 (예를 들면, 라인 또는 라쏘(lasso)를 드로잉하거나, 하이라이팅하거나, 또는 다른 방식으로 함께 연관될 입력 데이터 스트로크를 선택함으로써) 소정의 스트로크가 항상 함께 그룹화되는 것을 시스템에 지시할 수 있다.
Ⅳ. 잉크 분할기 오브젝트 및 API(AN INK DIVIDER OBJECT AND API)
A. 일반적인 설명
본 명세서는, 계속해서, 특정 예, 즉 InkDivider 오브젝트를 포함하는, 본 발명에 따른 구문해석기 및 어플리케이션 프로그래밍 인터페이스의 예들에 대해 상세하게 설명한다. 본 발명에 따른 시스템 및 방법의 하나의 기능(예를 들면, InkDivider 오브젝트)는 어플리케이션에 의해 제공되는 잉크 스트로크의 콜렉션을 취하고 이러한 스트로크를 특정 입상(예를 들면, 단어, 라인, 문장, 단락, 도면 등)의 구문해석된 엔티티로 분할한다. 적절한 구문해석이 없으면, 전자 잉크는 너무 많이 입자화(granular)(즉, 많은 그룹화되지 않은 스트로크를 가짐)되거나, 또는 단일 잉크 오브젝트로 서로 그룹화되어, 특별히, 개별적인 잉크 스트로크 또는 작은 그룹의 잉크 스트로크의, 원하는 움직임, 선택, 스케일링 및 다른 동작들을 어렵거나 불가능하게 만든다. 예를 들어, 잉크 분할기 오브젝트 및 API를 포함하는, 본 발명에 따른 시스템 및 방법은 구문해석 기술 및 결과를 개발자 커뮤니티에 공개함으로써, 새로운 어플리케이션에 대해 코드를 기록할 경우, 코드 기록자들이 구문해석 엔진 결과를 이용할 수 있게 한다.
일반적으로, 잉크 세션동안, 소정의 방식으로, 잉크 스트로크는 어플리케이션 내에 존재하는 잉크 스트로크의 콜렉션에 추가되거나 및/또는 삭제될 것이다.또한, 잉크 세션동안, 잉크 스트로크 콜렉션 내의 기존의 스트로크가 이동되거나, 리사이징되거나, 부분적으로 삭제되거나 및/또는 다른 방식으로 수정될 수 있다.
잉크 세션이 종료되고 (잉크 세션이 발생하면서 선택적으로 증가하는) 경우, 운영 어플리케이션 프로그램은, 스트로크들을 서로 다른 입상의 스트로크 세트 또는 그룹(적어도 새로운 스트로크 및/또는 변경된 스트로크, 및/또는 구문해석기의 이전 호출때문에 새롭거나 및/또는 변경된 스트로크에 의해 영향을 받는 스트로크)으로 처리하는, 구문해석기를 호출할 것이다. 일반적으로, 구문해석기가 호출될 경우, 어플리케이션 프로그램은 잉크 스트로크를 구분해석기에 공급하고 소정의 정보를 되돌려받는다. 소정의 예에서, 리턴된 정보는 분할된 원래 스트로크를 인식하는 백-포인터(back-pointer)를 포함한다. 본 발명의 소정의 예에 따른 시스템 및 방법은 또한 특정 입상의 스트로크들의 원하는 콜렉션을 검색하는 방법(본 실시예에서는 "ResultByType"으로 부름)을 제공할 수 있다. 예를 들면, 원하는 입상 유형(예를 들면, 단어, 라인, 블럭, 도면 등)에 따라, 서로 다른 구문해석 입상의 유닛을 얻도록 분할 결과를 어플리케이션 프로그램이 조회할 수 있다. 구문해석 결과는 또한 필요하거나 및/또는 원하는 경우, 이러한 데이터를 수기 인식기에 공급하기 전에 수평 베이스 라인에 대해 기록하는 각도를 보정하기 위해 수평 베이스라인의 표시를 가질 수 있다. 이는, 예를 들면, 회전 매트릭스를 코드 기록자에게 이용가능하게 제작함으로써 달성될 수 있다.
특히, 개별적인 잉크 스트로크는 다수의 잉크 스트로크 콜렉션 또는 서로 다른 입상 그룹에 속할 수 있다, 예를 들면 스트로크는 단어의 일부분 및 단락의 일부분일 수 있다.
이러한 일반적인 배경 및 개요를 명심하면서, 본 발명에 따른 잉크 분할기 오브젝트 및 API의 다양한 특징들을 다음에 보다 자세하게 설명할 것이다. 다음의 설명중 많은 부분이 특정 잉크 분할기 오브젝트 및 그 연관된 오브젝트, 속성 등에 연관되어 있어, 본 기술분야의 통상의 지식을 가진 자는, 본 발명의 범주에 벗어나지 않고 아래에 설명한 특정한 구현에 대해 다양한 변형이 이루어질 수 있다는 것을 이해할 것이다.
B. 잉크 분할기 오브젝트
도 7은 일반적으로 본 발명의 소정의 예에 유용한 예시적인 InkDivider 오브젝트(700)의 콘텐츠를 나타낸다. 이 실시예에서, InkDivider 오브젝트(700)는 2개의 속성(702), 즉 스트로크 속성(704) 및 RecognizerContext 속성(706)을 포함한다. 이렇게 나타낸 InkDivider 오브젝트(700)는 또한 하나의 방법(708), 즉 분할 방법(710)을 포함한다.
스트로크 속성(704)은 분할 방법(710)이 적용될 잉크 스트로크의 콜렉션을 리턴하거나 및/또는 설정한다. 스트로크는 일반적으로, 사용되고 있는 어플리케이션 프로그램에 의해 스트로크 속성(704)으로 전송되는데, 이는 어느 스트로크가 스트로크 속성(704)의 스트로크 콜렉션에 추가되거나 및/또는 제거되거나 및/또는 다른 방식으로 수정되는지를 결정한다. 이는 일반적으로, 어플리케이션 프로그램에 의해 전송된 (또는 임의의 적당하거나 및/또는 원하는 방식으로 스트로크 속성(704)으로 송신되는) 인입 스트로크를 나타내는, 도 7의 화살표(712)로 도시되어 있다. 또한 스트로크는, 잉크 삽입 액션, 잉크 페이스트(paste) 액션, 잉크 절단(cut) 또는 삭제 액션 등을 통해서와 같이, 임의의 적당한 방식으로 최종 사용자에 의해 스트로크 속성(704)에 추가되거나 및/또는 제거될 수 있다. 원한다면, 스트로크 속성(704)에 송신된 스트로크 정보는 컬러와 같이, 잉크 스트로크의 모든 특징 또는 속성을 포함할 필요는 없다. 원한다면, 구문해석에 연관된 잉크 스트로크의 특징 또는 속성만을 송신하는 것으로 충분하다.
스트로크 속성(704)에 대한 입력 및 출력 데이터는 다음과 같은 형태를 취한다.
RecognizerContext 속성(706)은 InkDivider 오브젝트(700)와 함께 사용되거나 및/또는 연관되는 인식기를 리턴하거나 및/또는 설정한다. 이러한 속성(706)은, 원하는 구문해석 동작이 소프트웨어 또는 어플리케이션 프로그램이 가동되고 있는 시스템의 디폴트 언어와는 상이한 언어에 기반하는 수기 텍스트 인식을 포함할 수 있다. 예를 들면, 펜-기반 컴퓨팅 시스템은 그 운영 시스템 및/또는 키보드에 대해 디폴트 언어로서 영어를 가진다. 그러나, 소정의 경우 컴퓨터 사용자가 2개국어를 하거나 또는 다른 사용자가 컴퓨터를 사용하면, 사용자는 영어 이외의 언어로 기록하거나 메모할 수 있다. 디폴트 영어 수기 인식기가 시스템에 이용가능한 유일한 선택이라면, 인식기가 영어가 아닌 다른 언어로 수기된 텍스트를 인식할 때 에러가 날 것이다. 다른 특별한 인식기는 또한 어플리케이션 코드, 예를 들면,음악 표기, 수식 및 심볼, 도면 특징 등을 인식하기 위한 특별한 인식기에 의해 설정될 수 있다. 코드 기록자가 (서로 다른 언어에 대한 인식기를 포함하는) 서로 다른 수기 인식기를 설정하거나 및/또는 사용할 수 있게함으로써, 결과적인 수기 인식 결과는 개선될 수 있다. 코드 기록자가 원하는 수기 인식기를 설정하는 능력은 도 7에 화살표(714)로 나타낸다.
본 발명의 소정의 실시예에서, RecognizerContext 속성(706)은 "널(null)"값으로 디폴트 지정될 수 있는데, 이는 본 실시예들에서는, RecognizerContext 속성(706)이 다른 인식기를 지정하도록 변경되지 않으면, 또는 변경될 때까지, 컴퓨터의 운영 시스템 디폴트 언어가 수기 인식 언어로서 사용되거나 및/또는 운영 시스템이 지원하는 인식기로서 사용될 것이라는 것을 의미한다. 디폴트 또는 "널"언어 값은 초기 시스템 셋업 동안 "키보드(keyboard)" 디폴트 장소(locale) ID 세트에 대응할 수 있다. 이러한 디폴트 또는 널 입력 특징은 도 7에, "NULL"로 라벨링된 화살표(716)로 도시되어 있다.
RecognizerContext 속성(706)에 대한 입력 및 출력 데이터는 다음과 같은 형태를 취한다.
동작시, 본 발명의 적어도 소정의 실시예에서, 구문해석기는, 잉크 스트로크와 연관된 일시적인 공간 메타데이타에 기초하여 수기 텍스트의 단어 브레이크(word break)를 결정하는 제1 패스를 행할 것이다. 이는, 예를 들면, 도5와 함께 일반적으로 상술한 시간적 라인 그룹화, 공간적 블럭 그룹화, 및 공간 라인 그룹화 단계를 포함할 수 있다. 이러한 구문해석 동작들은 비교적 빠르게 수행될 수 있으나, 일반적으로 결과들은 수기 인식기 및 그의 연관된 언어 모델과 관련한 정확도 및 복잡성을 포함하지 않을 것이다. 그러므로, 본 발명의 적어도 소정의 실시예에서, 단어 브레이크들을 보다 잘 인식하도록 수기 인식기와 연관된 사전을 사용하여, 단어들 사이의 브레이크를 정확하게 인식하고 텍스트의 각각의 수기 "라인"에 제2 패스를 행하는데 수기 인식기가 사용된다. 또한, 인식기는 수기 텍스트를 기계-생성된 텍스트(예를 들면, 단어 프로세싱 프로그램, 전자메일, 전자 달력 및 메모장 등에 적합한 형태)로 변환할 수 있다.
도 7은 또한 본 실시예의 InkDivider 오브젝트(700)의 일부분을 구성하는, 분할 방법(710)을 나타낸다. 이 방법(710)은 RecognizerContext 속성(706)(화살표 720 참조)에 의해 설정된 인식기를 사용하여 (스트로크 속성(704)으로부터 얻어짐 - 화살표(718)를 참조) 연관된 스트로크들을 분할하거나 또는 구문해석한다. 분할 방법(710)은 잉크 분할 (또는 구문해석)의 결과를 포함하는 InkDivisionResult 오브젝트(800)를 생성하고 리턴한다. InkDivisionResult 오브젝트(800)의 생성 및 리턴은 도 7의 화살표(722)로 나타낸다. 분할 방법(710)의 이용가능한 출력 데이터 포맷의 예가 아래에 도시된다.
본 발명의 적어도 소정의 실시예에서, 추가 잉크가 어플리케이션 프로그램의 문서에 추가되거나, 삭제되거나, 다른 방식으로 수정되면서, 분할 방법(710)이 동기적으로 실행되거나 또는 호출된다. 본 발명에 따른 시스템 및 방법의 추가 실시예에서, 분할 방법(710)은 스트로크 속성(704)을 통해 제공되는 스트로크에 대한 백그라운드 쓰레드로 동작하고, 전체 구문해석 동작이 완료될 때까지 InkDivisionResult(800)을 리턴하지 않는다. 추가 스트로크 입력 또는 수정없이 백그라운드 쓰레드로 동작함으로써, 많은 경우, 분할 방법(710)의 사용은 펜-기반 컴퓨팅 시스템 사용자에 대해 투명하거나 또는 거의 투명할 것이고 상당한 프로세싱 지연을 유발하지 않을 것이다.
분할 방법(710)이 호출될 때마다, 새로운 InkDivisionResult 오브젝트(800)가 생성될 수 있으며, 이것은 분할 방법(710)이 호출될 때에 잉크 구문해석 트리 데이타 구조(도 6b 참조)의 스냅샷(snapshot)을 효과적으로 캡쳐할 수 있다. 본 발명의 적어도 일부 예에서, 각 InkDivisionResult 오브젝트(800)(이하에서 더욱 상세히 논의됨)의 스트로크들을 비교하여, 구문해석 결과가 분할 방법(710)의 상이한 호출들 사이에서 변경되었는지의 여부를 판정하는 것은 어플리케이션 프로그램의 기능이다.
물론, 본 발명으로부터 벗어남 없이, 잉크 분할기 오브젝트는 도 7에 도시된 특정 방법 및 속성들에 추가하여 및/또는 그 대신에 및/또는 그와 결합한 방법, 속성, 및/또는 다른 구성요소들을 포함할 수 있다. 한가지 예로서, 잉크 분할기 오브젝트는 추가적으로 "라인 높이(Line Hight)" 속성을 포함할 수 있다(대안으로, 라인 높이 속성은 다른 오브젝트와 연관되어지거나 또는 임의의 적절한 방식으로 제공되어질 수 있음). 라인 높이 속성은 코드 기입기가 텍스트의 라인에 대해 예상된 라인 높이를 입력으로써 설정할 수 있도록 한다. 이 방식에서, 구문해석 중에, 레이아웃 분석 시스템 및/또는 분류 분석 시스템(또는 구문해석기의 다른 시스템)은 이 예상된 라인 높이 정보를 사용하여, 텍스트의 라인들 및 도면들 또는 다이어그램들 사이에서 구별하는데 있어서 더 나은 작업을 수행할 수 있다. 구문해석기에 이 라인 높이 가이드라인을 제공함으로써, 다수의 라인들(예를 들어, 단락 방식) 또는 도면으로부터의 단일 라인들을 효과적이고 효율적으로 구별지을 수 있다(예를 들어, 도면 라인은 통상적으로 수기의 단일 라인보다 길다).
수기된 라인들의 예상 라인 높이 크기에 대한 제한은 필요하지 않지만, 본 발명의 일부 예에서, 시스템 및 방법은 어느 정도의 범위 내에 속하는 예상 라인 높이를 인정할 것이다. 물론, 이 예상 라인 높이의 범위는 광범위하게 변화될 수 있다. 본 발명의 일부 예에서, 예상 라인 높이는, 디폴트 높이 1200 픽셀을 가지고, 최소 높이 100 디지타이저 픽셀과 최대 높이 50,000 디지타이저 픽셀 내에 속해야만 한다. 코드 기입기가 이 범위 바깥쪽의 예상 라인 높이를 설정하려고 시도한다면, 라인 높이 속성은 에러 메시지를 리턴한다. 대안으로, 라인 높이 속성은 에러 메시지를 리턴하지 않으면서 관련된 최소 또는 최대 높이값으로 입력 라인 높이를 자동적으로 변경할 수 있다(예를 들어, 어플리케이션 프로그램 코드가 50,003에서 값을 설정하려고 시도하면, 라인 높이 값을 50,000으로 자동으로 설정함). 다른 대안으로서, 유효 범위 외측의 라인 높이값을 설정하는 시도는 그 값이 단순히 무시되게 할 수도 있다(그리고 이전의 라인 높이 값 또는 디폴트값으로 되돌아가게 함).
출력으로서, 라인 높이 속성은 어플리케이션 프로그램에게 라인 높이 속성에 대한 이전 설정값을 알리거나, 또는 이전 값이 설정되어 있지 않다면 디폴트값을 리턴할 것이다.
예로써, 본 발명의 이 예에 따른 라인 높이 속성에 대한 입력 및 출력 데이타는 다음 형식을 취한다:
C. 잉크 분할 결과 오브젝트
도 8은 본 발명의 일부 예에 따른 InkDivisionResult 오브젝트(800)를 그래프적으로 도시한다. 위에서 논의된 바와 같이, InkDivider 오브젝트(800)의 분할 방법(710)은 선택된 RecognizerContext 속성(706)에 기초하여 스트로크 콜렉션(스트로크 속성(704)으로부터 획득함)을 구문해석하여, InkDivisionResult 오브젝트(800)를 생성한다. InkDivisionResult 오브젝트(800)는 분할 및/또는 구문해석 동작으로부터 기인하는 데이타 구조를 캡쳐하며, 이 데이타 구조는 본 발명의 적어도 일부 예에서, 도 6b에 도시된 형태의 "구문해석 트리(parse tree)"인 것으로 간주될 수 있다. InkDivisionResult 오브젝트(800)에 존재하는 결과적인 데이타 구조는, 예를 들어 소정의 스트로크 콜렉션을 위한 상이한 레벨들의 입상의 잉크 데이타 세트들을 검색하기 위하여, 이어서 일어나는 ResultByType 동작에서 더 이용될 수 있다.
도 8에 도시된 바와 같이, InkDivisionResult 오브젝트(800)의 이 예는 "스트로크(Strokes)"(804)로 불리우는 속성(802)을 갖는다. 이 스트로크 속성(804)은, 호출되는 경우, InkDivisionResult(800)를 생성하는데 원래 사용되었던 스트로크에 대한 기준을 리턴한다. InkDivider 오브젝트(700)는 장래의 시점에 특정한 스트로크의 세트에 대응하는 데이타 구조를 구축한다. 그러나, 이 스트로크들을 포함하는 잉크 오브젝트는 고정된 것이 아니다. 오히려, 새로운 스트로크들이 추가될 수 있고(예를 들어 페이스트 동작을 통해 벌크로, 혹은 개별적으로), 기존의 스트로크들이 삭제되거나 이동될 수 있고 또는 임의의 시점에 다르게 수정될 수도 있다(심지어 구문해석 동작이 수행되고 있는 동안에도). 따라서, InkDivisionResult 오브젝트(800)의 스트로크 속성(804)은 어플리케이션 프로그램 코드 또는 클라이언트 코드에게 판정 수단을 제공하며, 이 판정 수단은 (a) 어느 스트로크가 분할되어 특정한 InkDivisionResult 오브젝트(800)를 생성하는지의 여부, 및 (b) 최종 InkDivisionResult 오브젝트를 획득한 이후에(즉, 마지막 분할 방법(710) 호출 이후에) 그 스트로크들이 영향을 받거나 수정되었는지의 여부를 판정한다. 이 스트로크 속성(804)은 어플리케이션 코드 또는 클라이언트 코드로 하여금 두개의 InkDivisionResult 오브젝트들을 비교할 수 있게 하여 한 분할 방법 호출로부터 다음으로 구문해석 트리가 변경되었는지의 여부를 판정한다.
InkDivisionResult 오브젝트(800)의 스트로크 속성(804)은 InkDivisionResult 오브젝트(800)를 생성하는데 사용되었던 스트로크들의 리스트를 수신하고, 포함하며, 및/또는 유지한다. 이것은 도 8에 입력 화살표(806)로 도시되어 있다. 이 입력 스트로크 데이타는 예를 들어 InkDivider 오브젝트(700)의 스트로크 속성(804)으로부터 또는 임의의 다른 적절한 소스로부터 획득할 수 있거나 도입할 수 있다. InkDivisionResult 오브젝트(800)를 획득하는데 사용되었던 잉크 스트로크를 나타내는 데이타를 출력하기 위한 능력은 도 8에 스트로크 속성(804)으로부터의 화살표(808)로서 도시되어 있다. 스트로크 속성(804)의 출력 데이타(808)는 다음의 형태를 취할 수 있다.
InkDivider 오브젝트(700)는 구문해석 엔진을 인캡슐레이팅하고, InkDivisionResult 오브젝트(800)는 특정 잉크 분할 동작에 대한 구문해석 트리 데이타 구조를 인캡슐레이팅하기 때문에, 하나 이상의 InkDivisionResult 오브젝트(800)가 계속해서 존재하는 동안 InkDivider 오브젝트(700)를 방출하는 것(예를 들어, 더 이상의 동작에 대해)이 가능하다.
대안으로서, 클라이언트 코드 또는 어플리케이션 프로그램 코드는, InkDivisionResult 오브젝트(800)의 스트로크 속성(804)을 포함하기보다는 오히려, 스트로크 정보를 외부적으로 캐쉬할 수 있다. 그러나, 잉크 세션의 과정 중에 다수의 InkDivisionResult 오브젝트(800)의 적절한 생성으로, InkDivisionResult 오브젝트(800)의 쌍과 외부 잉크 스트로크 데이타 세트들을 관리하는 것이 어렵고 계산적으로 비용이 많이 들 수 있다. 따라서, InkDivisionResult 오브젝트(800)의 부분으로써 스트로크 속성(804)을 제공하는 것은 클라이언트 코드나 어플리케이션 코드에 대한 총 경비를 감소시키고, 잉크 분할기 API를 효과적으로 활용하는 데 있어서 도움을 준다.
본 예에 따른 InkDivisionResult 오브젝트(800)는 도 8에 도시된 바와 같이 ResultByType(812)라고 칭해지는 방법을 더 포함한다. 이 ResultByType 방법(812)은, 호출되면, 소정의 DivisionType(분할의 유형, 예를 들어, 단어, 라인, 단락, 도면 등)으로부터 결과된 스트로크 콜렉션 중의 콜렉션을 리턴한다(분할 유닛으로). 예로서, 이 방법(812)은, 클라이언트 코드 또는 어플리케이션 코드가 단어, 라인, 단락, 도면 등을 요청했는지의 여부에 따라, 단어, 라인, 단락, 도면 등으로서 그룹화된 입력 스트로크를 리턴한다. 이 방법(812)은, 만약 원한다면, 다양한 서로 다른 구문해석 입상에 대한 분할 결과를 검색하기 위하여 다수회 호출될 수 있다. 예로서, 하나의 호출은 구문해석된 스트로크 콜렉션의 단어를 제공할 수 있으며, 다른 호출은 라인을 제공할 수 있으며, 다른 호출은 단락 등을 제공할 수 있다.
ResultByType 방법(812)에 대한 입력은 적어도 원하는 InkDivisionType을 포함하며, 이것은 상술된 바와 같이 일부 예에서 단어, 라인, 단락, 도면 등을 의미할 수 있다. 이 입력은 도 8에 입력 화살표(814)에 의해 도시되어 있다. 소정의 DivisionType(예를 들어, InkDivisionUnit 오브젝트)에 대한 스트로크 콜렉션의 콜렉션을 포함하는 출력은 도 8에 출력 화살표(816)로 나타내어지고 있다. 이 데이타는 다음 포맷을 취할 수 있다:
본 발명의 일부 예에서, 도 8에 화살표(818)로 표시된 바와 같이,DivisionType이 특정되어 있지 않으면(DivisionType=NULL), 적어도 본 발명의 일부 예에서, 리턴된 InkDivisionUnits 오브젝트 콜렉션은 구문해석기에 의해 식별된 모든 입상들을 포함할 수 있다. 일부 입상들이 다른 입상들을 포함하기 때문에(예를 들어, 라인은 몇개의 단어를 포함할 수 있음), 결과적인 콜렉션은 중복하는 분할 유닛을 포함할 수 있다. 물론, 임의의 적절한 디폴트 입상(또는 디폴트 입상이 없을때 조차도)은 본 발명으로부터 벗어나지 않고 용이하게 이용될 수 있다. 예를 들어, 일부 버젼에서는, 다른 입상이 사용자 코드 또는 어플리케이션 코드에 의해 특정될 때까지, 디폴트 DivisionType은 "WORD"일 수 있다.
도 8에 도시된 바와 같이, ResultByType 방법(812)은 화살표(820)로 도시한 것처럼, InkDivider 오브젝트(700)의 분할 방법(710)으로부터 입력 데이타 구조를 수신할 수 있다.
물론, 본 발명으로부터 벗어나지 않고, InkDivisionResult 오브젝트(800)는 도 8에 도시된 특정 방법 및 속성들에 추가하여 및/또는 그 대신에 및/또는 그와 결합하여, 방법, 속성, 및/또는 다른 구성요소들을 포함할 수 있다.
D. 잉크 분할 유닛들 오브젝트
도 9는 본 발명의 일부 실시예에서 유용한 InkDivisionUnits 오브젝트(900)를 도시한다. 이 오브젝트(900)는 구문해석 동작의 결과를 위한 콜렉션 포장자(collection wrapper)이다. 콜렉션은, 적어도 본 발명의 일부 실시예에 있어서, 통상적으로 InkDivider 오브젝트(700)에 원래 주어진 모든 스트로크들을 효과적으로 포함하도록 예상된다. 예를 들면, 단어로 분할되었던 스트로크의 콜렉션은, 각 단어에 대해 단일의 InkDivisionUnit 오브젝트(1000)를 포함하는 InkDivisionUnits 오브젝트(900) 콜렉션에 의해 표현되어질 수 있다(도 10 참조, 하기에서 더욱 상세히 설명됨). 그들 각각의 스트로크로 개별적인 InkDivisionUnit 오브젝트(1000)를 확장하는 것으로부터 기인하는 스트로크들은 InkDivider 오브젝트(700)로 전달된 원래의 스트로크의 세트와 매치될 것으로 예상된다.
도 9에 도시된 바와 같이, 본 실시예의 InkDivisionUnits 오브젝트(900)는 카운트(Count)(904)로 불리우는 속성(902)을 포함한다. 이 카운트 속성(904)은 소정의 스트로크 콜렉션에 존재하는 분할 유닛의 카운트(또는 갯수)를 제공하고, 이 정보가 어플리케이션 코드 또는 클라이언트 코드에 사용하기 위한 API에 이용가능하게 만든다. 예를 들어, 카운트 속성(904)은 어플리케이션 프로그램에게 소정의 스트로크 콜렉션이 단어의 x 수 및/또는 라인의 y 수 및/또는 단락의 z 수를 포함하고 있음을 통지할 수 있다. 이 데이타는 임의의 적절한 방식, 예를 들어, InkDivisionResult 오브젝트(800)에 존재하는, 소정의 스트로크 콜렉션에 대한 도 6b의 구문해석 트리 데이타 구조를 보는 것에 의해 결정될 수 있다. 카운트 속성(904)의 출력은 도 9에 화살표(906)로 도시되어 있다. 출력 데이타는 다음과 같이 구성될 수 있다:
본 예의 InkDivisionUnits 오브젝트(900)는 아이템(Item)(910)으로 칭해지는 방법(908)을 더 포함한다. 아이템 방법(910)은, 호출되는 경우, 콜렉션에 있는 유닛의 인덱스값 조건하에 스트로크의 콜렉션에 있는 특정 InkDivisionUnit 오브젝트(1000)를 리턴한다(예를 들면, "4번째 단어 리턴"). 출력은 도 9에 화살표(912)로 표시되고 있다. 아이템 방법(910)의 출력 데이타는 다음과 같이 구성될 수 있다:
본 예의 InkDivisionUnits 오브젝트(900)에 포함된 다른 속성(902)은 "_NewEnum"(914)라고 칭해진다. 이 속성(914)은 계산되어지고 있는 스트로크 콜렉션에 대한 IEnum VARIANT 또는 IEnum UNKNOWN 계산기 인터페이스 중의 하나를 리턴한다. 이 속성(914)은, 도 9에 각각 출력 화살표(916 및 918)로 도시되는 바와 같이, 계산되어지고 있는 잉크 스트로크 콜렉션의 임의의 개별적인 오브젝트를 검색하는데 이용될 수 있다. _NewEnum 방법(914)의해 계산되는 데이타는 다음 포맷을 취할 수 있다:
특히, 본 발명의 실시예에서, (a) 카운트 속성(904)에 아이템 방법(910)을 추가하는 것 및 (b) 상술된 _NewEnum 속성(914)은, 클라이언트 또는 어플리케이션 프로그램 코드에 의해 사용되는 프로그래밍 언어와 코딩 스타일에 따라, 잉크 스트로크 콜렉션의 구성요소를 효율적으로 액세싱하는 두가지의 등가적인 방법이다. 아이템 방법(910) 및 카운트 속성(904)의 조합은 전통적인 "포(for)" 루프에서 사용될 수 있는 한편, _NewEnum 속성(914)은 일부 프로그래밍 언어에서 이용가능한 "포 이치(for each)" 구성에 의해 사용될 수 있다.
물론, 본 발명으로부터 벗어나지 않고, InkDivisionUnits 오브젝트(900)는 도 9와 함께 상술된 특정 방법 및 속성들에 추가하여 및/또는 그 대신에 및/또는 그와 결합하여, 속성, 방법, 및/또는 다른 구성요소들을 포함할 수 있다.
E. 잉크 분할 유닛 오브젝트
도 10에 도시된 바와 같이, 본 발명의 일부 예에 따른 API의 다른 오브젝트는 "InkDivisionUnit" 오브젝트(1000)라 칭해진다. 이 오브젝트(1000)는 InkDivisionResult.ResultByType 동작에 의해 특정된 입상에 대한 구문해석 동작으로부터 결과된 잉크 스트로크 콜렉션의 개별적인 구성요소를 나타낸다. 예를 들어, InkDivisionUnit 오브젝트(1000)는, 특정한 구문해석 입상(또는 분할 유형)이 "단어"였을 때, 구문해석된 잉크 스트로크 콜렉션의 개별적인 단어를 포함할 수 있다.
이 예시의 오브젝트(1000)의 첫번째 속성(1002)은 스트로크 속성(1004)이다. 스트로크 속성(1004)은 잉크 분할로부터 생겨난 유닛에 포함된 스트로크들을(예를 들어, 선택된 입상에 따른 단어 또는 라인 또는 단락의 스트로크들) 포함한다. 이 속성(1004)은 코드 기입자들에게 구문해석 동작의 각 입상 결과를 구성하는 스트로크로에 대한 용이한 액세스를 제공한다. 이 스트로크 속성(1004)에 의한 또는 이 스트로크 속성(1004)을 통해 액세스가능한 데이타 출력은(출력 화살표(1030)으로 표시된 것처럼) 다음 포맷일 수 있다:
도 10에 도시된 바와 같이, 속성 RecognizedString(1006)은 또한 InkDivisionUnit 오브젝트(1000)의 본 실시예에 포함된다. 이 속성(1006)의 출력은 도 10에 화살표(1032)로 도시되어 있으며, 수기 인식 동작으로부터 발생된 기계-생성된 텍스트(및/또는 이 인식된 텍스트에 대한 데이타의 메모리 위치로의 포인터)이다.
본 예의 InkDivisionUnit 오브젝트(1000)은 도 10에 도시된 바와 같이 DivisionType(1008)이라고 칭해지는 속성을 더 포함한다. 이 속성(1008)은, 도 10에 출력 화살표(1034)로 도시한 바와 같이, 오브젝트(1000)의 분할 유닛의 유형(예를 들어, 단어, 라인, 문장, 단락, 도면 등)을 리턴한다. DivisionType 속성(1008) 출력에 대한 데이타는 다음 포맷일 수 있다:
본 발명의 일부 실시예 및/또는 사용에 있어서, 이 DivisionType 속성(1008)은, 소정의 InkDivisionUnits 오브젝트 콜렉션(900)이 다양한 InkDivisionType의 InkDivisionUnit 오브젝트(1000)를 포함하는 경우에, 유용하다.
InkDivisionUnit 오브젝트(1000)의 적어도 일부 예에 존재하는 다른 속성은 RotationTransform 속성(1010)이다. 이 속성(1010)은 예를 들어 InkDivisionUnit 오브젝트(1000)의 스트로크들을 수평으로 회전하는데 필요한 변환 매트릭스 정보를 리턴한다. 이것은, 예를 들어, 이 오브젝트(1000)의 잉크 스트로크들을 인식기로 전송하기 전에 수평 베이스라인으로 회전하는데 사용될 수 있다. 이 속성(1010)으로부터의 출력 데이타는 본 발명의 적어도 일부 실시예에서 다음 포맷을 취할 수있다:
RotationTransform 속성(1010)으로부터의 출력 데이타의 이용가능성은 도 10에 출력 화살표(1036)로 도시된다.
본 발명의 적어도 일부 실시예에서, 이용가능한 RotationTransform 속성(1010)은, 수평으로 기입되지 않은 수기가 여전히 정확하게 구문해석될 수 있는 일부 어플리케이션 프로그램에 존재하는 유용한 특징을 보여줄 수 있다. 일반적으로, 많은 알려진 수기 인식기는 비수평 기입 라인들을 내부적으로 매우 잘 처리하지는 않으며, 일반적으로 수기의 베이스라인이 수평인 경우에만 그러한 프로덕트에서 최상의 인식 결과가 획득될 수 있다. 그러나, 일부 구문해석기 시스템에서, 구문해석기는 베이스라인을 자동적으로 계산하고 결정하고, 수평 라인에 대응하는 데이타를 획득하기 위하여 필요한 만큼 회전 변환을 적용하며, 그 결과 수기 인식기의 수기 인식 성능을 개선시킨다. RotationTransform 속성(1010)은 클라이언트 코드로 하여금 수기 정보가 수평으로 수집되었는지의 여부를 판정하게 한다. 이러한 클라이언트 코드는 이 속성을 사용하여 그것을 레벨링(leveling)하거나 및/또는 사용자의 수기 주위의 라인 또는 다른 형상을 정확하게 그림으로써 최종 사용자의 수기를 "클린-업(clean-up)" 할 수 있다.
본 발명의 일부 예에서, 개별적인 InkDivisionUnit 오브젝트(1000)로서는 동일 InkDivisionUnits 콜렉션(900)에 존재하지만 상이한 RotationTransform속성(1010)을 갖는 것이 가능할 수 있다. 예를 들면, 만약 사용자가 원에 기입했고 모든 단어를 요청했으면, InkDivisionUnits 콜렉션(900)은 모든 단어들을 포함할 것이며, 각 InkDivisionUnit 오브젝트(1000)는 그것의 RotationTransform 속성(1010)에 상이한 베이스라인 각도를 가질 수 있다.
특히, RotationTransform 속성(1010)은 모든 InkDivisionUnit 오브젝트(1000)와 관련되지 않을 수도 있다. 예를 들면, 이 속성(1010)은 InkDivisionUnit "단어" 및 InkDivisionUnit "라인"과 관련되지만, "도면" 또는 "단락"에는 필수적이지 않을 수 있다. 구문해석기는, 원한다면, "단락"의 InkDivisionUnit DivisionType에 대해서, 본 발명으로부터 벗어남 없이 그의 개별적인 구성 라인에 기초하여 단락의 회전각도를 산출할 수 있다. 또한, 구문해석기는 원한다면 적어도 일부 경우들에서 그의 스트로크에서 관찰된 패턴으로부터 도면의 회전 각도를 계산할 수 있다. 따라서, RotationTransform 속성(1010)은 모든 InkDivisionType에 존재할 수도 있으나, 반드시 그렇지는 않다.
InkDivisionUnit 오브젝트(1000)는 도 10에 도시된 바와 같이 InkDivisionType(1022)으로 칭해지는 Enum(1020)을 더 포함한다. 소망하는 InkDivisionType은 클라이언트 또는 어플리케이션 프로그램 코드에 의해 디폴트로 또는 임의의 다른 적절한 방식으로 설정될 수 있다. 그 출력에서(출력 화살표(1038)로 표시됨), 이 Enum(1022)은 구문해석 동작으로부터 필요한 InkDivisionUnits의 유형을 설명한다. 이 정보는 예를 들면 InkDivisionResult.ResultByType 동작에 의해 사용될 수 있다. 한가지 예로서, 이Enum(1020)에 대한 InkDivisionType은 다음과 같이 정의될 수 있다:
단어에 대한 InkDivisionType = 0
라인에 대한 InkDivisionType = 1
단락에 대한 InkDivisionType = 2
도면에 대한 InkDivisionType = 3
물론, 본 발명으로부터 벗어나지 않으면서 다른 이너머레이션(enum)들이 사용될 수 있다. 예를 들면, 이너머레이션 "세그먼트"는 특히 극동(Far East) 언어용으로 설계된 시스템에서의 사용을 위해, 단어나 문자 중의 어느 것에 대응하는데 사용될 수 있다.
다른 예로서, 소정의 InkDivisionUnits 오브젝트 콜렉션이 다양한 InkDivisionType의 InkDivisionUnit 오브젝트들을 포함할 수 있으면, 이 이너머레이션의 엔트리에 대한 특정 값들은 예를 들어 다음과 같은 것으로 변경될 수 있다:
모든 InkDivisionType = 0
단어에 대한 InkDivisionType = 1
라인에 대한 InkDivisionType = 2
단락에 대한 InkDivisionType = 4
도면에 대한 InkDivisionType = 8
이 방식으로, InkDivisionType은 비트필드(bitfield)가 될 수 있으며, 개별적인 유형들은 함께 OR되어 Result-ByType 동작으로부터 소망되는 InkDivisionTypes의 조합을 특정할 수 있다.
물론, 본 발명으로부터 벗어나지 않고, InkDivisionUnit 오브젝트(1000)는 도 10에 도시된 특정 속성 및 이너머레이션에 추가하여 및/또는 그 대신에 및/또는 그와 결합한 속성, 방법, 이너머레이션, 및/또는 다른 구성요소들을 포함할 수 있다.
Ⅴ. 잉크 분할기 오브젝트 및 API의 동작
A. 잉크 세션 중의 성능
사용에 있어서, 본 발명으로부터 벗어나지 않고 임의의 적절한 방식으로 잉크 스트로크는 InkDivider 오브젝트(700) 스트로크 속성(704) 콜렉션에 추가되고, 제거되고, 및/또는 다르게 변경될 수 있다. 예를 들면, 소망한다면, 기존의 스트로크 속성(704)에 스트로크가 추가되고, 제거되고, 및/또는 다르게 수정될 때마다 완전하게 새로운 스트로크 속성(704)이 기입되고 삽입될 수 있다. 그러나, 컴퓨터는 스트로크가 변경되었을 때마다 스크래치(scratch)로부터 스트로크 속성(704)의 모든 잉크 스트로크들을 재구문해석할 필요가 있기 때문에, 이 방법을 처리하는 것은 받아들이기 어려운 처리 지연을 야기시킬 것이다.
따라서, 본 발명의 일부 예에서, InkDivider 오브젝트(700)를 사용하는 클라이언트 코드(또는 어플리케이션 프로그램 코드)는, 스트로크가 추가되거나, 제거되거나, 또는 다르게 변경될 때마다 전체 스트로크 속성 콜렉션(704)을 교체하는것 보다는 오히려, InkDivider 오브젝트의 스트로크 속성 콜렉션(704)에/로부터 (a) 개별적인 잉크 스트로크를 추가하는 단계, (b) 잉크 스트로크의 세트를 추가하는 단계(예를 들어, 페이스트 동작에 의해), (c) 잉크 스트로크를 제거하는 단계, 및(d) 잉크 스트로크의 세트를 제거하는 단계(예를 들어, 절단 동작에 의해)를 위한 방법을 포함한다. 현재의 InkDivider 오브젝트의 스트로크 속성(704)의 오직 영향받은 스트로크들만을 추가, 제거, 및 다르게 수정하는 방법을 사용함으로써, 내부 구문해석 트리 데이타 구조는 증분적으로 갱신될 수 있다. 예를 들면, 이전에 구문해석된 라인(아마도 "t"를 크로스함)에 스트로크가 추가되기 때문에, 새로운 스트로크가 "추가" 방법(예를 들면, "InkDivider.Strokes.Add(newstroke)" 동작을 통해서)을 사용하여 InkDivider 오브젝트(700)로 전달되면, 내부 구문해석기의 구문해석 트리 데이타 구조는 새로운 스트로크(들)의 위치로부터 소정의 거리 내에서 무효화될 수 있으며, 그 결과 새로운 스트로크들의 인접한 영역 만의 스트로크들("더티(dirty)" 스트로크 또는 "더티 노드"라고도 칭해짐), 즉, 본 예에서 글자 "t" 및 다른 가깝게 둘러싸는 스트로크들과 관련된 새로운 스트로크만 재구문해석 가능하게 한다. 이러한 증분형 스트로크 구문해석의 일부 예에 있어서, 실제적으로 새롭게 추가되는 잉크 스트로크가 구문해석될 뿐만 아니라, 새로운 스트로크에 이웃하는 추가의 잉크 스트로크들 또한 새로운 스트로크의 존재를 고려하여 재구문해석된다. 본 발명의 일부 예에서, 새롭게 추가되고, 삭제되고, 및/또는 다르게 변경된 스트로크(들) 주위의 원형 영역은 재구문해석될 것이다(새롭게 추가되고, 삭제되고, 및/또는 다르게 변경된 스트로크들이 그들 주위의 스트로크들과 관련하여 고려되는 것을 보증하고, 주위의 스트로크들이 최근의 변경과 관련하여 고려되는 것임을 보증하기 위해).
또한, 일부 예에서, 본 발명에 따른 시스템 및 방법은 클라이언트 코드 또는어플리케이션 프로그램 코드에 의해 명백하게 호출되어질 분할 방법을 기다리지 않고, 백그라운드에서 가능한한 많은 구문해석을 수행한다. 예를 들면, InkDivider 오브젝트의 스트로크 속성(704)이 설정되거나 또는 InkDivider 오브젝트의 스트로크 속성(704)에 스트로크가 추가되거나/삭제되거나/다르게 수정되는 것 중의 하나인 경우, 일반적으로 도 4와 함께 위에서 설명된 바와 같이, 구문해석이 구문해석 트리 데이타 구조의 "스냅샷(snapshot)" 상의 백그라운드 쓰레드에서 즉각적으로 발생한다. 따라서, 클라이언트 코드 또는 어플리케이션 프로그램 코드는 분할 방법을 실제로 호출하는 경우(예를 들어, 잉크 세션의 종료 시에), InkDivider 오브젝트(700)는 (a) 가장 최근에 추가된/삭제된/수정된 스트로크들을 구문해석하는 것을 종료해야만 하고(즉, "더티 노드"가 있으면 "더티 노드"에 촛점을 맞춤), 그 다음에 (b) 새로운 InkDivisionResult 오브젝트(800)를 생성하고 리턴해야 한다.
B. 잉크 세션으로 돌아갈 때의 성능
사용자 어플리케이션이 잉크 세션으로 다수회 들어가고 나오는 것을 희망하고 잉크 오브젝트를 어플리케이션에 "넘기면(commit)", InkDivider 오브젝트(700)는, 어플리케이션 프로그램이 잉크-함유 문서를 오픈할 때마다 스크래치로부터 기존의 데이타 전부를 재구문해석하도록 요청할 수 있다. 이것은 일부 상황에서는 받아들여질 수 있으나, 특히 대량의 잉크 데이타를 포함하는 문서들을 오픈하는 경우 성능이 나빠서 처리 지연을 야기시킬 수 있다.
본 발명의 적어도 일부 실시예에 있어서, 기존의 문서들이 재오픈되는 이러한 상황들의 성능을 개선시키기 위하여, 다음의 사양들이 유용할 수 있다.
1. 새도우 오브젝트 유지
어플리케이션 프로그램이 잉크 세션에 존재하고 잉크 데이타를 스크린에 넘기기 때문에, 본 발명의 적어도 일부 실시예에서, 콜렉션으로부터 이들 원래의 스트로크들을 절단하는 것보다는 오히려, 각각의 InkDivisionUnit 오브젝트(1000)의 스트로크 속성 콜렉션(1004)의 스트로크들의 복제를 생성하고 유지하는 것이 유용하다.
이러한 특성의 어플리케이션은 구문해석을 필요로하는 모든 잉크 스트로크들의 새도우 잉크 오브젝트를, InkDivider 오브젝트(700) 및 그것의 스트로크 속성 콜렉션(704)과 마찬가지로 항상 유지하도록 설계될 수 있다. 분할 방법이 호출되는 경우(예를 들어, 잉크 세션의 종료 시에), 어플리케이션은 새도우 오브젝트로부터 잉크 오브젝트를 절단하는 것보다는 오히려, 그들의 본래의 어플리케이션 오브젝트로 복제해야만 한다.
어플리케이션 오브젝트의 임의의 잉크가 잉크 세션이 아닌 동안에 편집되면(예를 들어, 스케일링이나 회전과 같은 다른 동작을 수행하는 것에 의해서), 본 발명의 예의 어플리케이션은, 이 어플리케이션 오브젝트에 대응하는 스트로크들을 제거하고 새도우 콜렉션에 재추가할 필요가 있다. 예를 들어, 단어 처리 프로그램에 제공된 도면 오브젝트가 재배치되면, 새도우 잉크 오브젝트는 이 재배치를 반영하도록 갱신될 필요가 있다.
잉크 세션으로 돌아가면, 분할 방법(710)이 다시 호출되기 전에는 오직 새로운 스트로크들만이 추가되거나 제거될 필요가 있다. 이것은 잉크 세션들 사이의잉크의 증분 처리를 가능하게 한다.
일반적으로, 증분형 구문해석을 지원하기 위해서, 오직 단일의 새도우 잉크 오브젝트만을 필요로 하여, 소정의 잉크 오브젝트의 두개의 물리적 복제가 존재하고 동기화되어야만 한다. InkDivider 오브젝트(700)의 결과들을 취하여 InkDivisionUnit 오브젝트(1000)의 각각에 대한 별도의 잉크 오브젝트를 생성하는 도면 어플리케이션 프로그램의 경우에(이들이 개별적으로 활성될 수 있고 도면 구성요소로서 편집될 수 있도록 함), 도면 어플리케이션 프로그램이 생성하는 각 잉크 오브젝트에 대해 단일 새도우 잉크 오브젝트가 필요하지만, 전체적으로는 여전히 잉크의 오직 두개의 복제만이 있다.
이 방법의 이점은 잉크 세션들 사이에서 이동할 때의 성능 이득이다. 불리한 점은, 잉크 오브젝트의 콜렉션을 동기 상태로 유지하는 부담감 및 메모리 풋프린트(footprint)이다.
2. 축소 휴리스틱스(Reduction Heuristics)
잉크 세션으로 돌아갈 때의(세션을 나온 후에) 구문해석 성능을 개선시키기 위한 다른 가능성으로서, 작업하기 위해 구문해석기를 필요로 하는 데이타 세트를 감소시키는 것이 있다. 예를 들어, "넘겨진" 잉크 오브젝트가 재구문해석으로부터 유용할 지의 여부를 판정하는 휴리스틱스를 구현하는 것이 가능하다. 하나의 예시적 설명으로써, 어플리케이션은 재구문해석을 새로운 잉크와 교차하거나 또는 새로운 잉크의 임의의 공간적 거리에 위치하는 "넘겨진" 잉크 오브젝트에만 제한 할 수 있다. 몇몇 경우에, 시나리오 및/또는 구현에 따라, "넘겨진" 잉크 오브젝트의 z-오더(order)는 재구문해석하는데 있어서의 팩터가 될 수도 있다.
이러한 접근은 초기에는 위에서 설명된 새도우 오브젝트 접근보다 쉬운 것처럼 보일 수 있지만, InkDivider가 수정하는 InkDivisionUnits에 속하는, 전체가 아닌 대부분의 스트로크들이 축소 휴리스틱스에 포함되는 것을 보장하기 위해 주의를 기울여야만 한다. 이렇게 하는 것을 실패하면 구문해석 결과에 있어서 불일치가 발생하고, 따라서 최종 사용자의 잉크 경험에서의 불일치가 발생한다.
또한, 내부 구문해석기는 어느 스트로크를 재구문해석할지를 결정하는 데 이용될 무효화 스킴을 알기 때문에, 내부 구문해석기 자체는 실제적으로 어느 스트로크가 포함되어야만 하는지를 결정하기 위한 더 나은 위치에 있다. 하나의 무효화 스킴은 방사형 무효화를 사용하지만, 다른 스킴들도 본 발명으로부터 벗어나지 않고 사용될 수 있다.
Ⅵ. 어플리케이션 프로그래밍 인터페이스
다수의 어플리케이션 프로그래밍 인터페이스들("API")이 잉크 API의 다양한 기능에 영향을 주기위해 실행가능하다. 일부 예들은 다음을 포함한다:
(a) 이벤트: 본 발명의 일부 실시예에서, 구문해석 동작(예를 들어, 상술된 분할 방법(800))의 다양한 부분을 완료하는 것은 다양한 이벤트들을 트리거하여, 예를 들어, 클라이언트 코드에게 구문해석 동작의 적어도 일부분을 완료했음을, 적어도 일부분의 구문해석 결과들이 이용가능함을, 및/또는 구문해석기를 다시 호출할 수 있음을 통지할 수 있다. 이러한 이벤트들의 예시로서 "ParsingComplete" 및 "DivisionComplete" 이벤트가 포함된다. 본 발명의 일부 실시예에서 사용된 바와같이, "ParsingComplete" 이벤트는 입력 잉크 스트로크들이 구문해석 트리 데이타 구조의 그들 각각의 위치로 분할되었음을 어플리케이션 프로그램에게 통지한다(예를 들어, 도 6b에 도시된 것처럼). 이 때에 본 발명의 실시예에서, 인식기는 잉크 스트로크 데이타 상에서 아직 작용하지 않으므로, 개별적인 단어 마다의(word-by-word) 결과들이 아직 이용가능하지 않다. 한편, "DivisionComplete" 이벤트는 전체 구문해석 및 인식 동작이 완료되었음을 어플리케이션 프로그램에게 통지하는데 사용될 수 있다. 상술된 예에서, DivisionComplete 이벤트가 시동되면, 이것은 어플리케이션 코드에게 InkDivisionResult 오브젝트(800)가 즉시 이용가능하여, 원하는 구문해석 입상에 대한 InkDivisionUnit 오브젝트(1000)를 검색하기 위해 그것의 ResultByType 방법이 이용될 수 있다는 것을 알려주는 것이다.
(b) 팩토이드: 팩토이드는, 예를 들어 인식되어질 잉크의 희망하는 정보 또는 패턴을 구문해석기에게 알림으로써, 인식을 조정하는데 사용될 수 있다. 예를 들어, 팩토이드는 인입하는 스트링이 우편번호에 대한 필드로 있음을 구문해석기에게 통지할 수 있다. 그 다음에 구문해석기는 익숙한 다섯 숫자 또는 아홉 숫자 패턴을 찾는다. 추가적으로, 구문해석기는 문자들을 우편번호 필드에 들어오는 경우 숫자로서 우선적으로 인식할 수 있다(예를 들면, s-형상의 스트로크를 문자 "S"보다는 오히려 숫자 "5"로서 인식하고, 및/또는 소문자 "l" 또는 대문자 "I"보다는 오히려 숫자 "1"로서 우선적으로 인식함).
(c) 새도우 오브젝트: InkDivider 오브젝트(700)는 적어도 일부 실시예에서 외부적으로 관리되는 잉크 오브젝트 대신에 그것이 언급하는 내부 새도우 잉크 오브젝트를 생성하게 하는 방법을 제공할 수 있다. 물론, InkDivider(또는 관련된 새도우 잉크 관리자 오브젝트)는 새도우 잉크 오브젝트(들)에 대한 액세서(accessor) 및 이들을 관리하는 방법 또한 제공할 수 있다.
(d) 축소 휴리스틱스: 구문해석기의 API는 또한 적어도 본 발명의 일부 실시예에서 확장되어, "추천된" 데이타 세트 축소 메카니즘을 포함하여, 개발자의 어플리케이션 요구가 적절히 맞으면, 개발자가 축소 휴리스틱스에 대해 걱정할 필요 없고 대신에 구문해석기에게 최선을 다하라고 말할 수 있도록 한다.
(e) 구문해석기 교체: 제3자가 그들이 원하는 임의의 인식기 또는 구문해석기를 사용하는 것을 허용하기 위하여, 구문해석기 API는 사용자가 다운로드할 새로운 인식기 및 구문해석기에 대한 "플러그-인(plug-in)" 지원을 포함할 수 있다. 이 대안의 구문해석 엔진은 본래 그들 자신의, 상술된 API의 RecognizerContext 오브젝트와 유사한 오브젝트 모델을 가진다.
Ⅶ. 대안의 잉크 분할기 오브젝트
도 7 - 도 10은 본 발명의 일부 실시예에 따른 잉크 분할기 오브젝트 및 그와 관련된 임의의 오브젝트들의 예를 설명한다. 도 11은 InkDivider 오브젝트(1100)의 다른 예를 제공한다. 이 샘플의 오브젝트(1100)는 다양한 속성(1102), 방법(1104), 이너머레이션(Enum)(1106), 및 이벤트(1108)를 포함하며, 이들 각각은 이하에서 더욱 상세히 설명된다.
"잉크" 속성(1110)은 처리되어질 스트로크 또는 잉크 오브젝트로 기준을 리턴/설정한다. 이 속성(1110)은 상술된 스트로크 속성(704)과 유사하다. "잉크"속성(1112)은 분할 방법(1120)(이하에서 더욱 상세히 설명됨)에 의해 생성된 잉크 오브젝트의 콜렉션을 리턴한다. DivisionGranularity 속성(1114)은 잉크 속성(1110)의 잉크가 분할 방법에 의해 구문해석되는 것에 의해 입상을 얻고/설정한다. 본 발명으로부터 벗어나지 않고 임의의 디폴트값(또는 디폴트값이 없을 때 조차도)이 사용될 수 있은 한편, 본 발명의 일부 실시예에서 DivisionGranularity 속성(1114)은 "단어" 입상으로 디폴트된다. DivisionGranularity 속성(1114)은 DivisionGranularity Enum(1106)을 사용하여 설정될 수 있으며, 예를 들어, "단락", "라인", "문장", "단어", "도면" 등을 나타내는 Enum들을 포함한다. 소망하는 DivisionGranularity는 클라이언트나 어플리케이션 프로그램 코드에 의해 디폴트를 통하여, 또는 임의의 다른 적절한 방식으로 설정될 수 있다.
분할 방법(1120)은 설정된 DivisionGranularity 속성(1114)에 기초하여 잉크 속성(1110)에 존재하는 잉크 스트로크 상의 잉크 구문해석 동작을 수행한다. DivisionComplete 이벤트(1130)가 시동되어, 분할 방법(1120)이 그 동작을 완료한 때를 어플리케이션 프로그램에게 알려준다. 분할 방법(1120)으로부터의 구문해석된 결과는 잉크 속성(1112)에 기입되고, 화살표(1132)로 도시한 바와 같이, 그로부터의 어플리케이션 프로그램이나 클라이언트 코드에 이용가능하게 할 수 있다. 일단 클라이언트 코드 또는 어플리케이션 프로그램 코드가 DivisionComplete 이벤트(1130)를 수신하면, 클라이언트 코드 또는 어플리케이션 프로그램 코드는 그것이 잉크 속성(1112)을 검색할 수 있으며 구문해석 동작의 결과를 검색할 수 있다는 것을 인지하게 된다.
구현의 상세함에 따라, 구문해석 동작(즉, 분할 방법(1120))은 수행되어지고 있고 잉크의 내부 구문해석 트리 표현이 구성되고 있는 동안에, 잉크 속성(1112)은 액세스가능할 수도 있고 가능하지 않을 수도 있다.
물론, 본 발명으로부터 벗어나지 않고, InkDivider 오브젝트(1100)는 도 11에 도시된 특정 속성, 방법, 이너머레이션, 및 이벤트에 추가하여 및/또는 그 대신에 및/또는 그와 결합한 속성, 방법, 이너머레이션, 이벤트, 및/또는 다른 구성요소들을 포함할 수 있다.
Ⅷ. 결론
본 발명은 다양한 특정 실시예에 대하여 설명되었으나, 이들 특정 실시예는 단지 본 발명을 예시하는 것일 뿐 그것을 한정하는 것은 아니다. 당업자들은, 예를 들어, 오브젝트, 속성, 방법, 이너머레이션, 이벤트 등에 대해 다양한 특정 용어가 사용될 수 있으며, 이 특정 용어들은 단지 가능한 이름의 예시일 뿐으로 발명을 한정하는 것으로 간주되어서는 안된다는 것을 인식할 것이다. 물론, 본 발명으로부터 벗어나지 않고, 오브젝트, 속성, 방법, 이너머레이션, 이벤트 등에 대해 다른 용어들이 사용될 수 있다. 또한, 오브젝트, 속성, 방법, 이너머레이션, 이벤트 등의 특정 구성은 본 발명으로부터 벗어나지 않으면서, 설명되고 도시된 특정 구성과 다를 수도 있다.
추가적으로, 본 발명의 특정한 특징 또는 기능이 특정 실시예와 함께 설명되었다는 사실은, 이 특징 또는 기능이 본 발명의 특정 실시예의 사용으로 한정되거나 혹은 모든 실시예가 특정한 특징 또는 기능을 포함해야만 한다는 것을 의미하는것은 아니다. 오히려, 다르게 특정되지 않는 한, 상술된 다양한 특징 및 기능들은 본 발명의 예시에서 자유롭게 사용될 수 있다. 당업자들은 첨부되는 특허청구범위에서 정의된 본 발명의 사상과 범위로부터 벗어나지 않으면서 본 발명의 예시된 버젼에 대해 변경과 수정을 행할 수 있다는 것을 인식할 것이다.
본 발명의 의하면, 다양한 잉크 및 잉크 분할기 오브젝트들을 포함하는, 전자 잉크와 어플리케이션 프로그램 사이의 통신을 용이하게 하는 시스템, 방법 및 컴퓨터 판독가능한 매체를 제공할 수 있다. 이러한 시스템, 방법, 및 컴퓨터 판독가능한 매체들의 소정의 예들은, 다양한 입상(granularity)의 잉크 스트로크 그룹화(ink stroke groupings)에 대한 클라이언트 코드 액세스 또는 어플리케이션 프로그램으로 하여금 어플리케이션 프로그램의 성능을 개선할 수 있게 하고 디지털 잉크와 이러한 프로그램 및 그들의 연관된 코드와의 상호작용을 개선시킨다.

Claims (61)

  1. 어플리케이션 프로그램에 이용가능한 정보를 만드는 방법에 있어서,
    복수의 잉크 스트로크(stroke)를 저장하는 단계;
    분할 요청을 발행하는 단계;
    상기 분할 요청에 응답하여, 상기 저장된 잉크 스트로크를 적어도 소정의 제1 입상(granularity)을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하는 단계; 및
    상기 어플리케이션 프로그램에 이용가능한 상기 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나를 포함하는 방법.
  3. 제1항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 정보는 상기 소정의 제1 입상을 갖는 스트로크의 그룹의 수를 나타내는 정보를 포함하는 방법.
  4. 제1항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나에 대응하는 기계-생성된(machine-generated) 텍스트를 포함하는 방법.
  5. 제1항에 있어서,
    상기 그룹화가 완료되었을 때, 상기 어플리케이션 프로그램에게 알리는 단계
    를 더 포함하는 방법.
  6. 제1항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 상기 하나 이상의 스트로크의 그룹에 대한 정보의 적어도 일부분은 잉크 분할 결과 오브젝트에 저장되어 있는 방법.
  7. 제1항에 있어서,
    언어(language)는, 상기 저장된 잉크 스트로크를 상기 소정의 제1 입상을 갖는 적어도 하나 이상의 상기 스트로크의 그룹으로 그룹화하는데 있어서 고려되는 적어도 한가지 인자인 방법.
  8. 제1항에 있어서,
    상기 소정의 제1 입상은 단어, 라인, 단락(paragraph), 문장, 및 도면을 포함하는 그룹에서 선택되는 방법.
  9. 제1항에 있어서,
    상기 그룹화하는 단계는, 상기 저장된 잉크 스트로크를 적어도 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹으로 추가로 그룹화하는 방법.
  10. 제1항에 있어서,
    상기 어플리케이션 프로그램에 이용가능한 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 더 포함하는 방법.
  11. 제1항에 있어서,
    상기 저장된 잉크 스트로크를 변경하여 수정된 잉크 스트로크 세트를 생성하는 단계;
    제2 분할 요청을 발행하는 단계; 및
    상기 제2 분할 요청에 응답하여, 상기 수정된 잉크 스트로크 세트를 하나 이상의 그룹으로 그룹화하는 단계
    를 더 포함하는 방법.
  12. 어플리케이션 프로그램에 이용가능한 정보를 만드는 방법을 수행하기 위한 컴퓨터 실행가능한 명령들을 갖는 컴퓨터 판독가능 매체에 있어서,
    상기 방법은,
    복수의 잉크 스트로크를 저장하는 단계;
    분할 요청을 수신하는 단계;
    상기 분할 요청에 응답하여, 상기 저장된 잉크 스트로크를 적어도 소정의 제1 입상을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하는 단계; 및
    상기 어플리케이션 프로그램에 이용가능한 상기 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 포함하는 컴퓨터 판독가능 매체.
  13. 제12항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 상기 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나를 포함하는 컴퓨터 판독가능 매체.
  14. 제12항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 상기 정보는 상기 소정의 제1 입상을 갖는 스트로크의 그룹의 수를 나타내는 정보를 포함하는 컴퓨터 판독가능 매체.
  15. 제12항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 상기 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나에 대응하는 기계-생성된 텍스트를 포함하는 컴퓨터 판독가능 매체.
  16. 제12항에 있어서,
    상기 방법은,
    상기 그룹화가 완료되었을 때, 상기 어플리케이션에게 알리는 단계
    를 더 포함하는 컴퓨터 판독가능 매체.
  17. 제12항에 있어서,
    상기 어플리케이션 프로그램에 이용가능하게 만들어진 상기 하나 이상의 스트로크의 그룹에 대한 상기 정보의 적어도 일부분은 잉크 분할 결과 오브젝트에 저장되어 있는 컴퓨터 판독가능 매체.
  18. 제12항에 있어서,
    언어(language)는, 상기 저장된 잉크 스트로크를 상기 소정의 제1 입상을 갖는 적어도 하나 이상의 스트로크의 그룹으로 그룹화하는데 있어서 고려되는 적어도 한가지 인자인 컴퓨터 판독가능 매체.
  19. 제12항에 있어서,
    상기 소정의 제1 입상은 단어, 라인, 단락(paragraph), 문장, 및 도면을 포함하는 그룹에서 선택되는 컴퓨터 판독가능 매체.
  20. 제12항에 있어서,
    상기 그룹화하는 단계는, 상기 저장된 잉크 스트로크를 적어도 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹으로 추가로 그룹화하는 컴퓨터 판독가능 매체.
  21. 제12항에 있어서,
    상기 방법은,
    상기 어플리케이션 프로그램에 이용가능한 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 더 포함하는 컴퓨터 판독가능 매체.
  22. 제12항에 있어서,
    상기 방법은,
    수정된 잉크 스트로크 세트를 수신하는 단계;
    제2 분할 요청을 수신하는 단계; 및
    상기 제2 분할 요청에 응답하여, 상기 수정된 잉크 스트로크 세트를 하나 이상의 그룹으로 그룹화하는 단계
    를 더 포함하는 컴퓨터 판독가능 매체.
  23. 그룹으로 분할되어질 잉크 스트로크를 저장하는 잉크 분할기 오브젝트와 어플리케이션 사이에서 통신하는 방법으로서,
    상기 잉크 분할기 오브젝트에게 분할 요청을 발행하는 단계;
    상기 분할 요청에 응답하여, 상기 저장된 잉크 스트로크를 적어도 소정의 제1 입상을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하는 분할 방법을 호출하는 단계; 및
    상기 어플리케이션에 이용가능한 상기 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 포함하는 방법.
  24. 제23항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 상기 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나를 포함하는 방법.
  25. 제23항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 상기 정보는 상기 소정의 제1 입상을 갖는 스트로크의 그룹의 수를 나타내는 정보를 포함하는 방법.
  26. 제23항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나에 대응하는 기계-생성된 텍스트를 포함하는 방법.
  27. 제23항에 있어서,
    상기 분할 방법이 완료되었을 때, 상기 어플리케이션에게 알리는 단계
    를 더 포함하는 방법.
  28. 제23항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 상기 하나 이상의 스트로크의 그룹에 대한 상기 정보의 적어도 일부분은 잉크 분할 결과 오브젝트에 저장되어 있는 방법.
  29. 제23항에 있어서,
    상기 분할 방법의 동작 시에, 언어(language)는, 상기 저장된 잉크 스트로크를 상기 소정의 제1 입상을 갖는 적어도 하나 이상의 상기 스트로크의 그룹으로 그룹화하는데 있어서 고려되는 적어도 한가지 인자인 방법.
  30. 제23항에 있어서,
    상기 소정의 제1 입상은 단어, 라인, 단락(paragraph), 문장, 및 도면을 포함하는 그룹에서 선택되는 방법.
  31. 제23항에 있어서,
    상기 분할 방법의 동작 시에, 상기 분할 방법은, 상기 저장된 잉크 스트로크를 적어도 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹으로 추가로 그룹화하는 방법.
  32. 제23항에 있어서,
    상기 어플리케이션에 이용가능한 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 더 포함하는 방법.
  33. 제23항에 있어서,
    상기 저장된 잉크 스트로크를 변경하여 수정된 잉크 스트로크 세트를 생성하는 단계;
    상기 잉크 분할기 오브젝트에게 제2 분할 요청을 발행하는 단계; 및
    상기 제2 분할 요청에 응답하여, 상기 수정된 잉크 스트로크 세트를 하나 이상의 그룹으로 그룹화하는 상기 분할 방법을 호출하는 단계
    를 더 포함하는 방법.
  34. 그룹으로 분할되어질 잉크 스트로크를 저장하는 잉크 분할기 오브젝트와 어플리케이션 사이에서 통신하는 방법을 수행하기 위한 컴퓨터 실행가능한 명령들을 갖는 컴퓨터 판독가능 매체로서,
    상기 방법은,
    상기 잉크 분할기 오브젝트에게 분할 요청을 발행하는 단계;
    상기 분할 요청에 응답하여, 상기 저장된 잉크 스트로크를 적어도 소정의 제1 입상을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하는 분할 방법을 호출하는 단계; 및
    상기 어플리케이션에 이용가능한 상기 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 포함하는 컴퓨터 판독가능 매체.
  35. 제34항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 상기 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나를 포함하는 컴퓨터 판독가능 매체.
  36. 제34항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 상기 정보는 상기 소정의 제1 입상을 갖는 스트로크의 그룹의 수를 나타내는 정보를 포함하는 컴퓨터 판독가능매체.
  37. 제34항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 상기 정보는 상기 하나 이상의 스트로크의 그룹 중의 적어도 하나에 대응하는 기계-생성된 텍스트를 포함하는 컴퓨터 판독가능 매체.
  38. 제34항에 있어서,
    상기 통신 방법은,
    상기 분할 방법이 완료되었을 때, 상기 어플리케이션에게 알리는 단계
    를 더 포함하는 컴퓨터 판독가능 매체.
  39. 제34항에 있어서,
    상기 어플리케이션에 이용가능하게 만들어진 상기 하나 이상의 스트로크의 그룹에 대한 상기 정보의 적어도 일부분은 잉크 분할 결과 오브젝트에 저장되어 있는 컴퓨터 판독가능 매체.
  40. 제34항에 있어서,
    상기 분할 방법의 동작 시에, 언어(language)는, 상기 저장된 잉크 스트로크를 상기 소정의 제1 입상을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하는데있어서 고려되는 적어도 한가지 인자인 컴퓨터 판독가능 매체.
  41. 제34항에 있어서,
    상기 소정의 제1 입상은 단어, 라인, 단락(paragraph), 문장, 및 도면을 포함하는 그룹에서 선택되는 컴퓨터 판독가능 매체.
  42. 제34항에 있어서,
    상기 분할 방법의 동작 시에, 상기 분할 방법은, 상기 저장된 잉크 스트로크를 적어도 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹으로 추가로 그룹화하는 컴퓨터 판독가능 매체.
  43. 제34항에 있어서,
    상기 통신 방법은,
    상기 어플리케이션에 이용가능한 소정의 제2 입상을 갖는 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 더 포함하는 컴퓨터 판독가능 매체.
  44. 제34항에 있어서,
    상기 통신 방법은,
    상기 저장된 잉크 스트로크에 대한 변경을 수신하여 수정된 잉크 스트로크세트를 생성하는 단계;
    상기 잉크 분할기 오브젝트에게 제2 분할 요청을 발행하는 단계; 및
    상기 제2 분할 요청에 응답하여, 상기 수정된 잉크 스트로크 세트를 하나 이상의 그룹으로 그룹화하는 분할 방법을 호출하는 단계
    를 더 포함하는 컴퓨터 판독가능 매체.
  45. 잉크 분할기 오브젝트에 대한 데이타 구조가 저장되어 있는 컴퓨터 판독가능 매체에 있어서,
    하나 이상의 잉크 스트로크에 대한 정보를 저장하기 위한 스트로크 속성을 정의하는 제1 데이타 세트; 및
    상기 하나 이상의 잉크 스트로크를 적어도 소정의 제1 입상을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하기 위한 분할 방법을 정의하는 제2 데이타 세트
    를 포함하는 컴퓨터 판독가능 매체.
  46. 제45항에 있어서,
    상기 잉크 분할기 오브젝트는, 상기 하나 이상의 잉크 스트로크를 분할하는데 이용되어질 인식기에 대한 정보를 저장하기 위한 인식기 콘텍스트(context) 속성을 정의하는 제3 데이타 세트를 더 포함하는 컴퓨터 판독가능 매체.
  47. 잉크 분할 결과 오브젝트에 대한 데이타 구조가 저장되어 있는 컴퓨터 판독가능 매체에 있어서,
    분할 방법의 대상이었으며 적어도 소정의 제1 입상을 갖는 하나 이상의 그룹으로 그룹화된 하나 이상의 잉크 스트로크에 대한 정보를 저장하기 위한 스트로크 속성을 정의하는 제1 데이타 세트; 및
    상기 적어도 소정의 제1 입상을 갖는 잉크 스트로크의 그룹에 대한 검색을 가능하게 하는 ResultByType 방법을 정의하는 제2 데이타 세트
    를 포함하는 컴퓨터 판독가능 매체.
  48. 제47항에 있어서,
    상기 ResultByType 방법은 상기 소정의 제1 입상을 포함하는 복수의 다양한 입상들에서 잉크 스트로크의 그룹에 대한 검색을 가능하게 하는 컴퓨터 판독가능 매체.
  49. 잉크 분할 유닛 오브젝트에 대한 데이타 구조가 저장되어 있는 컴퓨터 판독가능 매체로서,
    하나 이상의 잉크 스트로크의 그룹에 포함되어 있는 하나 이상의 잉크 스트로크에 대한 정보를 저장하기 위한 스트로크 속성을 정의하는 제1 데이타 세트; 및
    상기 그룹에 포함되어 있는 잉크 스트로크의 유형에 대한 정보를 저장하기 위한 분할 유형을 정의하는 제2 데이타 세트
    를 포함하는 컴퓨터 판독가능 매체.
  50. 제49항에 있어서,
    상기 데이타 구조는, 상기 스트로크 속성에 포함된 상기 하나 이상의 잉크 스트로크에 대응하는 기계-생성된 텍스트를 정의하거나 또는 가리키는 제3 데이타 세트를 더 포함하는 컴퓨터 판독가능 매체.
  51. 제50항에 있어서,
    상기 데이타 구조는, 상기 스트로크 속성에 포함된 상기 하나 이상의 스트로크를 수기(handwriting) 인식 시스템에 도입하기에 적당한 각도로 회전하는데 필요한 회전 각도를 정의하는 제4 데이타 세트를 더 포함하는 컴퓨터 판독가능 매체.
  52. 제51항에 있어서,
    상기 데이타 구조는 상기 분할 유형에 대응하는 계산값(enumerated value)을 정의하는 제5 데이타 세트를 더 포함하는 컴퓨터 판독가능 매체.
  53. 제49항에 있어서,
    상기 데이타 구조는, 상기 스트로크 속성에 포함된 상기 하나 이상의 스트로크를 수기 인식 시스템에 도입하기에 적당한 각도로 회전하는데 필요한 회전 각도를 정의하는 제3 데이타 세트를 더 포함하는 컴퓨터 판독가능 매체.
  54. 제49항에 있어서,
    상기 데이타 구조는 상기 분할 유형에 대응하는 계산값을 정의하는 제3 데이타 세트를 더 포함하는 컴퓨터 판독가능 매체.
  55. 잉크 분할 유닛 오브젝트에 대한 데이타 구조가 저장되어 있는 컴퓨터 판독가능 매체로서,
    잉크 오브젝트에 존재하는 스트로크 그룹의 카운트를 정의하는 제1 데이타 세트; 및
    특정 스트로크 그룹에 대한 인덱스값의 조건 하에 특정 스트로크 그룹을 검색하는 아이템(item) 방법을 정의하는 제2 데이타 세트
    를 포함하는 컴퓨터 판독가능 매체.
  56. 구문해석기(parser)와 어플리케이션 프로그램 사이에서 통신하는 방법에 있어서,
    상기 어플리케이션 프로그램으로부터 상기 구문해석기로 복수의 잉크 스트로크를 나타내는 데이타를 전송하는 단계;
    상기 구문해석기에 구문해석 정보를 제공하는 단계;
    상기 잉크 스트로크를 적어도 소정의 제1 입상을 갖는 하나 이상의 스트로크의 그룹으로 그룹화하는 단계; 및
    상기 어플리케이션 프로그램에 이용가능한 상기 하나 이상의 스트로크의 그룹에 대한 정보를 만드는 단계
    를 포함하는 통신 방법.
  57. 제56항에 있어서,
    상기 구문해석 정보를 제공하는 단계는 상기 그룹화에 이용되어질 인식기를 설정하는 단계를 포함하는 방법.
  58. 제56항에 있어서,
    상기 구문해석 정보를 제공하는 단계는 상기 그룹화에 이용되어질 언어를 설정하는 단계를 포함하는 방법.
  59. 제56항에 있어서,
    상기 구문해석 정보를 제공하는 단계는 상기 소정의 제1 입상을 설정하는 단계를 포함하는 방법.
  60. 제56항에 있어서,
    상기 구문해석 정보를 제공하는 단계는 상기 잉크 스트로크에 포함된 텍스트의 라인들에 대한 예상 라인 높이를 설정하는 단계를 포함하는 방법.
  61. 제56항의 방법을 수행하기 위해 저장되어 있는 컴퓨터 판독가능 명령들을 포함하는 컴퓨터 판독가능 매체.
KR1020030093804A 2003-01-21 2003-12-19 어플리케이션 프로그램에 이용가능한 정보를 만들기 위한 방법, 컴퓨터 판독가능 기록 매체, 및 컴퓨터 시스템 KR100975504B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/347,331 2003-01-21
US10/347,331 US7218779B2 (en) 2003-01-21 2003-01-21 Ink divider and associated application program interface

Publications (2)

Publication Number Publication Date
KR20040067818A true KR20040067818A (ko) 2004-07-30
KR100975504B1 KR100975504B1 (ko) 2010-08-11

Family

ID=32712337

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020030093804A KR100975504B1 (ko) 2003-01-21 2003-12-19 어플리케이션 프로그램에 이용가능한 정보를 만들기 위한 방법, 컴퓨터 판독가능 기록 매체, 및 컴퓨터 시스템

Country Status (12)

Country Link
US (1) US7218779B2 (ko)
EP (2) EP1450294B9 (ko)
JP (1) JP4499407B2 (ko)
KR (1) KR100975504B1 (ko)
CN (1) CN1517904B (ko)
AT (2) ATE367621T1 (ko)
AU (2) AU2003266779B2 (ko)
BR (1) BR0306010A (ko)
CA (1) CA2449073C (ko)
DE (2) DE60314977T2 (ko)
MX (1) MXPA03011669A (ko)
RU (1) RU2358316C2 (ko)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352400B2 (en) 1991-12-23 2013-01-08 Hoffberg Steven M Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore
US7966078B2 (en) 1999-02-01 2011-06-21 Steven Hoffberg Network media appliance system and method
US7079713B2 (en) 2002-06-28 2006-07-18 Microsoft Corporation Method and system for displaying and linking ink objects with recognized text and objects
US7751623B1 (en) 2002-06-28 2010-07-06 Microsoft Corporation Writing guide for a free-form document editor
US7218779B2 (en) * 2003-01-21 2007-05-15 Microsoft Corporation Ink divider and associated application program interface
US20040243852A1 (en) * 2003-05-28 2004-12-02 Rosenstein Adam H. Method, system and software for state signing of internet resources
WO2005029342A1 (en) * 2003-08-21 2005-03-31 Microsoft Corporation Electronic ink processing
US7454393B2 (en) * 2003-08-06 2008-11-18 Microsoft Corporation Cost-benefit approach to automatically composing answers to questions by extracting information from large unstructured corpora
AU2003262759B8 (en) * 2003-08-21 2010-01-07 Microsoft Corporation Electronic ink processing
KR100989011B1 (ko) * 2003-08-21 2010-10-20 마이크로소프트 코포레이션 전자 잉크를 분석하기 위한 애플리케이션 프로그래밍 인터페이스를 포함하는 컴퓨터 판독가능 기록 매체, 전자 잉크 분석 방법 및 분석 콘텍스트 대상 생성 방법
US7616333B2 (en) * 2003-08-21 2009-11-10 Microsoft Corporation Electronic ink processing and application programming interfaces
US7721226B2 (en) 2004-02-18 2010-05-18 Microsoft Corporation Glom widget
US7659890B2 (en) 2004-03-19 2010-02-09 Microsoft Corporation Automatic height adjustment for electronic highlighter pens and mousing devices
US7574048B2 (en) * 2004-09-03 2009-08-11 Microsoft Corporation Freeform digital ink annotation recognition
US7702750B2 (en) 2004-09-29 2010-04-20 Citrix Systems, Inc. System and method for event detection and re-direction over a network using a presentation level protocol
US8069226B2 (en) 2004-09-30 2011-11-29 Citrix Systems, Inc. System and method for data synchronization over a network using a presentation level protocol
US20060085740A1 (en) * 2004-10-20 2006-04-20 Microsoft Corporation Parsing hierarchical lists and outlines
US7518749B2 (en) * 2004-11-12 2009-04-14 Microsoft Corporation Analysis alternates in context trees
US8214754B2 (en) 2005-04-15 2012-07-03 Microsoft Corporation Registration of applications and complimentary features for interactive user interfaces
US7986307B2 (en) * 2005-04-22 2011-07-26 Microsoft Corporation Mechanism for allowing applications to filter out or opt into tablet input
US7928964B2 (en) * 2005-04-22 2011-04-19 Microsoft Corporation Touch input data handling
US20060267958A1 (en) * 2005-04-22 2006-11-30 Microsoft Corporation Touch Input Programmatical Interfaces
US7680332B2 (en) * 2005-05-30 2010-03-16 Microsoft Corporation Grouping lines in freeform handwritten text
US7526737B2 (en) * 2005-11-14 2009-04-28 Microsoft Corporation Free form wiper
CN101495990B (zh) * 2005-12-02 2011-09-14 思杰系统有限公司 用于提供从代理服务器到虚拟计算环境的身份验证证明以访问远程资源的方法和设备
US8509563B2 (en) * 2006-02-02 2013-08-13 Microsoft Corporation Generation of documents from images
US8930834B2 (en) 2006-03-20 2015-01-06 Microsoft Corporation Variable orientation user interface
US20080040692A1 (en) * 2006-06-29 2008-02-14 Microsoft Corporation Gesture input
US9304675B2 (en) * 2006-09-06 2016-04-05 Apple Inc. Portable electronic device for instant messaging
US20080195931A1 (en) * 2006-10-27 2008-08-14 Microsoft Corporation Parsing of ink annotations
US8315482B2 (en) * 2007-06-26 2012-11-20 Microsoft Corporation Integrated platform for user input of digital ink
JP4960817B2 (ja) * 2007-09-19 2012-06-27 キヤノン株式会社 画像処理装置、および画像処理方法
CN101918921B (zh) 2008-01-27 2013-12-04 思杰系统有限公司 用于远程提供三维图形的方法和系统
US8504624B2 (en) * 2009-09-08 2013-08-06 Ricoh Co., Ltd. Stroke and image aggregation and analytics
US8751844B2 (en) * 2009-09-24 2014-06-10 Citrix Systems, Inc. Systems and methods for attributing an amount of power consumption to a workload
US20130067366A1 (en) * 2011-09-14 2013-03-14 Microsoft Corporation Establishing content navigation direction based on directional user gestures
JP5458196B2 (ja) * 2012-03-02 2014-04-02 株式会社 資生堂 塗布動作評価装置、塗布動作評価方法、及び塗布動作評価プログラム
JP2013246732A (ja) * 2012-05-28 2013-12-09 Toshiba Corp 手書き文書検索装置、方法及びプログラム
KR101337872B1 (ko) * 2013-04-04 2013-12-06 주식회사 디오텍 잉크 텍스트 데이터 편집장치 및 잉크 텍스트 데이터 편집방법
JP6109020B2 (ja) * 2013-09-10 2017-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 文書の分割・結合方法、装置、プログラム。
US20150104778A1 (en) * 2013-10-11 2015-04-16 Chi-Chang Liu System and method for computer based mentorship
US20150116283A1 (en) * 2013-10-24 2015-04-30 Livescribe Inc. Paper Strip Presentation Of Grouped Content
CN105765502B (zh) * 2013-11-19 2019-10-08 株式会社和冠 用于墨水数据生成、墨水数据呈现、墨水数据操纵以及墨水数据通信的方法和系统
JP2015148946A (ja) * 2014-02-06 2015-08-20 ソニー株式会社 情報処理装置、情報処理方法及びプログラム
US10698597B2 (en) 2014-12-23 2020-06-30 Lenovo (Singapore) Pte. Ltd. Reflow of handwriting content
US9613263B2 (en) * 2015-02-27 2017-04-04 Lenovo (Singapore) Pte. Ltd. Ink stroke grouping based on stroke attributes
US10643067B2 (en) * 2015-10-19 2020-05-05 Myscript System and method of handwriting recognition in diagrams
US10755029B1 (en) 2016-01-05 2020-08-25 Quirklogic, Inc. Evaluating and formatting handwritten input in a cell of a virtual canvas
US10324618B1 (en) * 2016-01-05 2019-06-18 Quirklogic, Inc. System and method for formatting and manipulating digital ink
US20180173688A1 (en) * 2016-12-15 2018-06-21 Myscript System and method for management of handwritten diagram connectors
EP3736677A1 (en) 2019-05-10 2020-11-11 MyScript A method and corresponding device for selecting and editing handwriting input elements
EP3754537B1 (en) 2019-06-20 2024-05-22 MyScript Processing text handwriting input in a free handwriting mode
EP3772015B1 (en) 2019-07-31 2023-11-08 MyScript Text line extraction
EP3796145B1 (en) 2019-09-19 2024-07-03 MyScript A method and correspond device for selecting graphical objects
KR20210073196A (ko) * 2019-12-10 2021-06-18 삼성전자주식회사 필기 입력을 처리하는 방법 및 그 장치
US11531454B2 (en) * 2020-12-10 2022-12-20 Microsoft Technology Licensing, Llc Selecting content in ink documents using a hierarchical data structure
US11587346B2 (en) * 2020-12-10 2023-02-21 Microsoft Technology Licensing, Llc Detecting ink gestures based on spatial and image data processing
CN112869352B (zh) * 2021-02-04 2021-12-21 上海工程技术大学 一种插画绘图练习用工作台
US20230315271A1 (en) * 2022-03-18 2023-10-05 Sony Group Corporation Collaborative whiteboard for meetings

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2089784C (en) 1992-04-15 1996-12-24 William Joseph Anderson Apparatus and method for disambiguating an input stream generated by a stylus-based user interface
US5903668A (en) * 1992-05-27 1999-05-11 Apple Computer, Inc. Method and apparatus for recognizing handwritten words
US5425110A (en) * 1993-04-19 1995-06-13 Xerox Corporation Method and apparatus for automatic language determination of Asian language documents
US5517578A (en) 1993-05-20 1996-05-14 Aha! Software Corporation Method and apparatus for grouping and manipulating electronic representations of handwriting, printing and drawings
JPH09319829A (ja) * 1996-06-03 1997-12-12 Nec Corp オンライン文字認識装置
US5999896A (en) * 1996-06-25 1999-12-07 Microsoft Corporation Method and system for identifying and resolving commonly confused words in a natural language parser
JP3825087B2 (ja) * 1996-06-28 2006-09-20 松下電器産業株式会社 手書きデータ編集装置
US5892843A (en) * 1997-01-21 1999-04-06 Matsushita Electric Industrial Co., Ltd. Title, caption and photo extraction from scanned document images
US5889523A (en) 1997-11-25 1999-03-30 Fuji Xerox Co., Ltd. Method and apparatus for dynamically grouping a plurality of graphic objects
JP2000285251A (ja) * 1999-03-31 2000-10-13 Hitachi Ltd 手書き入力編集システム
US7564995B1 (en) 2000-03-07 2009-07-21 Apple Inc. Method and apparatus for acquiring and organizing ink information in pen-aware computer systems
EP1272918A1 (en) * 2000-04-13 2003-01-08 QUALCOMM Incorporated Method and apparatus for entry of multi-stroke characters
US7298903B2 (en) * 2001-06-28 2007-11-20 Microsoft Corporation Method and system for separating text and drawings in digital ink
US7050632B2 (en) * 2002-05-14 2006-05-23 Microsoft Corporation Handwriting layout analysis of freeform digital ink input
US20060188162A1 (en) * 2002-10-31 2006-08-24 Microsoft Corporation Common interface for ink trees
US7218779B2 (en) * 2003-01-21 2007-05-15 Microsoft Corporation Ink divider and associated application program interface

Also Published As

Publication number Publication date
AU2003266779B2 (en) 2010-01-28
EP1450294A1 (en) 2004-08-25
ATE443299T1 (de) 2009-10-15
AU2010201687A1 (en) 2010-05-20
EP1811428B1 (en) 2009-09-16
EP1450294B9 (en) 2008-08-13
MXPA03011669A (es) 2004-10-15
KR100975504B1 (ko) 2010-08-11
ATE367621T1 (de) 2007-08-15
DE60329340D1 (de) 2009-10-29
EP1450294A8 (en) 2006-06-07
DE60314977T2 (de) 2007-12-06
US20040141648A1 (en) 2004-07-22
AU2003266779A1 (en) 2004-08-05
EP1450294B1 (en) 2007-07-18
JP2004227564A (ja) 2004-08-12
AU2010201687B2 (en) 2011-08-11
JP4499407B2 (ja) 2010-07-07
DE60314977D1 (de) 2007-08-30
CN1517904A (zh) 2004-08-04
RU2003136812A (ru) 2005-05-27
CN1517904B (zh) 2012-07-04
EP1811428A1 (en) 2007-07-25
CA2449073A1 (en) 2004-07-21
BR0306010A (pt) 2005-05-17
CA2449073C (en) 2012-01-24
RU2358316C2 (ru) 2009-06-10
US7218779B2 (en) 2007-05-15

Similar Documents

Publication Publication Date Title
KR100975504B1 (ko) 어플리케이션 프로그램에 이용가능한 정보를 만들기 위한 방법, 컴퓨터 판독가능 기록 매체, 및 컴퓨터 시스템
US7813556B2 (en) Incremental system for real time digital ink analysis
US7167585B2 (en) Interfacing with ink
JP4235500B2 (ja) 認識されたテキストおよびオブジェクトと共にインクオブジェクトを表示しリンクする方法、およびシステム
US8074184B2 (en) Modifying electronic documents with recognized content or other associated data
US6965384B2 (en) In-situ digital inking for applications
US8072433B2 (en) Ink editing architecture
JP2004030632A (ja) ドキュメントの上に電子インクを重ねる方法
US7284200B2 (en) Organization of handwritten notes using handwritten titles
US7958132B2 (en) Voting based scheme for electronic document node reuse
US7370288B1 (en) Method and system for selecting objects on a display device
KR101005651B1 (ko) 트리 구조와 대화하는 방법 및 시스템
US7788283B2 (en) On demand data proxy
US6970877B2 (en) Reducing and controlling sizes of prototype-based recognizers

Legal Events

Date Code Title Description
A201 Request for examination
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: 20130719

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140716

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150730

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160720

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170719

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180718

Year of fee payment: 9