KR20120099578A - 문서 내의 목록들의 재구성 - Google Patents

문서 내의 목록들의 재구성 Download PDF

Info

Publication number
KR20120099578A
KR20120099578A KR1020120005230A KR20120005230A KR20120099578A KR 20120099578 A KR20120099578 A KR 20120099578A KR 1020120005230 A KR1020120005230 A KR 1020120005230A KR 20120005230 A KR20120005230 A KR 20120005230A KR 20120099578 A KR20120099578 A KR 20120099578A
Authority
KR
South Korea
Prior art keywords
list
lists
instructions
column
document
Prior art date
Application number
KR1020120005230A
Other languages
English (en)
Other versions
KR101321309B1 (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 KR20120099578A publication Critical patent/KR20120099578A/ko
Application granted granted Critical
Publication of KR101321309B1 publication Critical patent/KR101321309B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/103Formatting, i.e. changing of presentation of documents
    • G06F40/109Font handling; Temporal or kinetic typography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/137Hierarchical processing, e.g. outlines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/258Heading extraction; Automatic titling; Numbering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Document Processing Apparatus (AREA)
  • Machine Translation (AREA)
  • Stored Programmes (AREA)

Abstract

일부 실시예들은 몇 개의 원시 요소를 포함하는 문서를 분석하기 위한 방법을 제공한다. 방법은 원시 요소들의 집합의 위치 및 모양에 기초하여, 원시 요소들의 집합이 문서 내의 암시적 목록을 포함함을 식별한다. 방법은 식별된 암시적 목록을 명시적 목록으로서 정의한다. 방법은 명시적 목록을 문서에 연관된 구조로서 저장한다.

Description

문서 내의 목록들의 재구성{RECONSTRUCTION OF LISTS IN A DOCUMENT}
본 출원은 2011년 1월 18일에 출원된 발명의 명칭이 "Reconstruction of Lists, Ordering Page Content, Storing Multiple Representations for a Document, and Adaptive Graphic Objects"인 미국 특허 가출원 제61/433,951호, 및 2011년 1월 18일에 출원된 발명의 명칭이 "Reconstruction of Lists in a Document"인 미국 특허 가출원 제61/433,959호의 우선권을 주장한다. 미국 특허 가출원 제61/433,951호 및 제61/433,959호는 참조에 의해 여기에 포함된다.
본 발명은 문서 내에서 목록을 재구성하는 것에 관한 것이다.
전자 문서의 작성자는 목록 및 기타 순차적인 또는 그룹화된 컨텐츠 구조들(예를 들어, 번호가 매겨진 챕터들, 섹션들, 각주들, 서지적 사항들 등)을, 목록 편집 도구를 이용하지 않고서 또는 목록을 문서 내의 시멘틱 구조로서 다르게 지정하지 않고서 작성하는 경우가 많다. 또한, 작성자가 이러한 구조를 문서 내에 인코딩하더라도, 가상 프린터 드라이버를 통해 PDF로 인쇄할 때 구조가 상실될 수 있다.
목록 정보가 문서의 구조 내에서 명시적이지 않을 때, 이것은 다양한 애플리케이션들이 그러한 목록들을 활용하는 특징들(features)을 이용하는 것을 방지한다. 애플리케이션들은 사용자를 위해 추가의 목록 엔트리들을 제안할 수 없고, 문서를 쉽게 탐색할 수 없고, 또는 목록의 부분들을 정확하게 복사할 수 없다.
본 발명의 일부 실시예들은 목록들이 명시적으로 인코딩되지 않은 문서에 대해 목록들의 집합을 재구성하기 위한 신규한 방법을 제공한다. 일부 실시예들에서, 문서는 하나 이상의 컬럼을 포함하고, 목록들의 집합은 각 컬럼에 대해 따로따로 재구성된다. 컬럼 내에서 목록을 재구성할 때, 일부 실시예들은 기하학적 분석(예를 들어, 텍스트 라인들의 수평 들여쓰기) 및 어휘적 분석(lexical analysis)(예를 들어, 목록 레이블들 내의 캐릭터들에 기초하여 목록들의 타입들을 식별함)의 조합을 이용한다.
일부 실시예들의 방법은, 각각의 컬럼에 대하여, 초기에 기하학적 및 어휘적 분석의 조합을 수행하여, 컬럼 내의 목록 스페이싱(list spacing)을 식별한다. 방법은 적절한 통계적 속성들을 갖는 정렬된(aligned) 들여쓰기 갭들의 컬렉션들에 기초하여, 목록 레이블들과 목록 컨텐츠 간의 잠재적인 스페이서들을 결정한다. 이러한 목록 스페이서들은 목록 항목을 나타내는 특정 기준을 찾기 위해 어휘적 분석을 이용함으로써 확인될 수 있다. 일부 실시예들에서, 그 다음, 방법은 식별된 상이한 목록 스페이서들에 기초하여 컬럼 내의 각각의 목록 항목에 대한 레벨을 결정한다.
이러한 정보를 이용하여, 방법은 컬럼 내의 목록들을 재구성한다. 방법은 목록 레벨들 및 스페이서들을 이용하여, 단일 목록의 부분일 것 같은 목록 항목들을 식별하고, 목록 템플릿들에 기초하여 목록들을 범주화하고 목록 항목들이 단일 목록 내에 함께 들어맞는지를 결정함으로써, 이러한 일치들(matches)을 확인한다. 컬럼 내의 목록들이 재구성되고 나면, 일부 실시예들은 후속하는 컬럼들 간에서 일치하는 목록들을 식별하여, 전체 문서에 걸쳐서 목록들을 재구성한다. 컬럼들은 동일한 페이지에 있을 수도 있고, 복수의 페이지에 있을 수도 있다.
앞의 요약은 본 발명의 일부 실시예들에 대한 간략한 소개의 역할을 하도록 의도된 것이다. 이것은 본 문서에 개시된 모든 발명의 주제의 소개 또는 개요로서 의도된 것이 아니다. 이하의 상세한 설명 및 그 상세한 설명에서 참조되는 도면들은 요약에 설명된 실시예들과, 다른 실시예들을 더 설명할 것이다. 따라서, 본 문서에 의해 설명되는 모든 실시예들을 이해하기 위해서는, 요약, 상세한 설명 및 도면의 완전한 검토가 필요하다. 또한, 청구되는 발명의 주제는 요약, 상세한 설명 및 도면에서의 예시적인 상세들에 의해 한정되어서는 안 되며, 오히려 첨부된 청구항들에 의해 정의되어야 하는데, 왜냐하면 청구되는 발명의 주제는 발명의 주제의 취지를 벗어나지 않고서 다른 구체적인 형태들로 실시될 수 있기 때문이다.
본 발명의 신규한 특징들은 첨부된 청구항들에 제시된다. 그러나, 설명을 위하여, 본 발명의 몇몇 실시예들이 이하의 도면들에서 제시된다.
도 1은 다양한 목록들을 포함하는 컬럼의 예를 도시한 것이다.
도 2는 텍스트의 하나 이상의 컬럼에 걸쳐지는 목록을 재구성하기 위한 일부 실시예들의 프로세스를 개념적으로 도시한 것이다.
도 3은 사람의 눈에 명백히 목록에 속하는 것으로서 보이는 23줄의 순서가 지정된 텍스트 라인들의 단일 컬럼을 도시한 것이다.
도 4는 컬럼의 처음 8 라인으로도 되는, 컬럼에 대한 식별된 목록 항목 시작 후보들을 도시한 것이다.
도 5는 도 4로부터의 컬럼에 대한 일부 실시예들의 목록 레벨 계산을 도시한 것이다.
도 6은 도 4의 컬럼의 처음 2 라인에 대한 가능한 레이블 템블릿들을 도시한 것이다.
도 7은 텍스트 라인들의 컬럼 내의 목록 스페이서들을 식별하기 위한 일부 실시예들의 프로세스를 개념적으로 도시한 것이다.
도 8a 및 도 8b는 단일 컬럼 내에서 목록들을 재구성하기 위한 일부 실시예들의 프로세스를 개념적으로 도시한 것이다.
도 9는 보류 중인 목록들의 스택을 11개의 스테이지에 걸쳐서 개념적으로 도시한 것이다.
도 10은 멀티라인 목록 항목의 예를 도시한 것이다.
도 11은 목록 항목들 간의 단락들이 목록 항목들과 함께 그룹화되고, 목록들의 폐쇄를 야기하지 않는 컬럼을 도시한 것이다.
도 12는 중첩된 목록 헤더들 간에 단락 컨텐츠를 갖는 목록들의 일부분의 예를 도시한 것이다.
도 13은 중첩된 목록들의 집합의 예를 도시한 것이다.
도 14는 복수의 컬럼에 걸쳐서 목록들을 재구성하기 위한 일부 실시예들의 프로세스를 개념적으로 도시한 것이다.
도 15는 문서의 2개의 후속하는 컬럼을 도시한 것이다.
도 16은 컬럼들의 목록들이 조합될 때, 한 목록은 레벨이 변하는 한편 제2 목록은 동일 레벨로 유지되지만, 단조성 요구조건은 보존되는, 문서의 2개의 후속하는 컬럼의 예를 도시한 것이다.
도 17은 일부 실시예들의 목록 재구성 모듈의 소프트웨어 아키텍처를 개념적으로 도시한 것이다.
도 18은 본 발명의 일부 실시예들이 구현되는 전자 시스템을 개념적으로 도시한 것이다.
이하의 설명에서는 설명을 목적으로 다수의 상세가 제시된다. 그러나, 본 기술분야에 통상의 지식을 가진 자는, 본 발명이 이러한 구체적인 상세들을 이용하지 않고서도 실시될 수 있음을 인식할 것이다. 다른 경우들에서, 불필요한 상세들로 본 발명의 설명을 모호하게 하지 않기 위해, 공지된 구조들 및 장치들은 블록도 형태로 도시된다.
본 발명의 일부 실시예들은 목록들이 명시적으로 인코딩되지 않는 문서에 대하여 목록들의 집합을 재구성하기 위한 신규한 방법을 제공한다. 일부 실시예들에서, 문서는 하나 이상의 컬럼을 포함하고, 목록들의 집합은 각각의 컬럼에 대해 따로따로 재구성된다. 컬럼 내에서 목록을 재구성하기 위해, 일부 실시예들은 기하학적 분석(예를 들어, 텍스트 라인들의 수평 들여쓰기) 및 어휘적 분석(예를 들어, 목록 레이블들 내의 캐릭터들에 기초한 목록들의 타입들을 식별하는 것)의 조합을 이용한다.
일부 실시예들의 방법은, 각각의 컬럼에 대하여, 초기에 기하학적 및 어휘적 분석의 조합을 수행하여, 컬럼 내의 목록 스페이싱을 식별한다. 방법은 적절한 통계적 속성들을 갖는 정렬된 들여쓰기 갭들의 컬렉션들에 기초하여, 목록 레이블들과 목록 컨텐츠 간의 잠재적인 스페이서들을 결정한다. 이러한 목록 스페이서들은 목록 항목을 나타내는 특정 기준을 찾기 위해 어휘적 분석을 이용함으로써 확인될 수 있다. 일부 실시예들에서, 그 다음, 방법은 식별된 상이한 목록 스페이서들에 기초하여 컬럼 내의 각각의 목록 항목에 대한 레벨을 결정한다.
이러한 정보를 이용하여, 방법은 컬럼 내의 목록들을 재구성한다. 방법은 목록 레벨들 및 스페이서들을 이용하여, 단일 목록의 부분일 것 같은 목록 항목들을 식별하고, 목록 템플릿들에 기초하여 목록들을 범주화하고 목록 항목들이 단일 목록 내에 함께 들어맞는지를 결정함으로써 이러한 일치들을 확인한다. 컬럼 내의 목록들이 재구성되고 나면, 일부 실시예들은 후속하는 컬럼들 간에서 일치하는 목록들을 식별하여, 전체 문서에 걸쳐서 목록들을 재구성한다. 컬럼들은 동일한 페이지에 있을 수도 있고, 복수의 페이지에 있을 수도 있다.
도 1은 다양한 목록들을 포함하는 컬럼(100)의 예를 도시한 것이다. 사람의 눈에 명백한 바와 같이, 컬럼은 레이블 "Ⅰ", "Ⅱ" 및 "Ⅲ"을 갖는 주요 목록과, 이 목록 내부에 중첩된(nested) 다양한 목록들을 포함한다. 그러나, 목록 구조가 컬럼(100)을 포함하는 문서 내에 인코딩되지 않은 경우, 문서를 이용하는 애플리케이션들은 이 목록 구조를 이용할 수 없을 것이다. 일부 실시예들의 방법은 기하학적 분석(예를 들어, 컬럼(100) 내의 목록 항목들의 들여쓰기의 상이한 레벨들을 식별하는 것) 및 어휘적 분석(예를 들어, "Ⅰ", "Ⅱ" 및 "Ⅲ" 등의 시퀀스를 식별하는 것)의 조합을 이용하여, 이러한 목록들을 재구성하고, 문서의 모델 내에 목록들을 명시적으로 인코딩한다.
본 발명의 몇몇의 더 상세한 실시예들이 이하에 설명된다. 섹션 Ⅰ은 문서 내에 목록들을 재구성하기 위한 프로세스의 전체 흐름을 설명한다. 그 다음, 섹션 Ⅱ는 컬럼 내의 목록들을 식별하고 재구성하기 위한 상세한 프로세스를 설명한다. 섹션 Ⅲ은 컬럼들의 집합에 걸쳐서 목록들을 맞춰보기 위한 상세한 프로세스를 설명한다. 섹션 Ⅳ는 목록들을 재구성하기 위한 일부 실시예들의 모듈의 소프트웨어 아키텍처를 설명한다. 마지막으로, 섹션 Ⅴ는 본 발명의 일부 실시예들이 구현되는 전자 시스템을 설명한다.
Ⅰ. 목록 재구성의 전체적인 흐름
언급된 바와 같이, 일부 실시예들은 목록들이 시멘틱 구조로서 명시적으로 인코딩되지 않은 전자 문서 내에서 목록들을 식별하고 재구성한다. 그러한 목록들은 번호가 매겨진 챕터들, 섹션들, 각주들, 서지적 사항들, 사진들, 요일들, 코드의 라인들, 컨텐츠 엔트리들의 테이블, 글머리 기호가 있는 아웃라인들 등일 수 있다. 이러한 목록들은, 예를 들어 목록 생성 도구를 갖지 않는 워드 프로세싱 애플리케이션(예를 들어, 단순 텍스트 편집기) 또는 목록 내의 각 엔트리에 대해 별도의 텍스트 박스 또는 레이아웃 영역들을 이용하는 그래픽 지향 프로그램에 의해 생성되었기 때문에 명시적으로 인코딩되어 있지 않을 수 있다. 일부 경우들에서, 문서는 명시적인 목록을 가지고서 생성되었을 수 있지만, 그 시멘틱 구조가 서식 변환에서 상실되었을 수 있다(예를 들어, 문서가 가상 프린터 드라이버를 통해 PDF 파일로 저장된 경우).
문서 내에서 그러한 암시적 목록들을 검출하고, 암시적 목록들을 명시적으로 인코딩된 목록으로 변환하는 것은, 그 문서를 이용하는 애플리케이션이 그러한 인코딩된 구조의 혜택들을 제공하는 것을 가능하게 한다. 예를 들어, 편집 소프트웨어는 적절한 서식을 갖는 자동으로 생성된 다음 목록 항목 및 레이블을 제안할 수 있다. 순차적인 항목들에 대한 하이퍼링크, 링크된 컨텐츠 테이블, 및 다른 그러한 전자적으로 인코딩된 참조들은 자동적으로 생성될 수 있고, 사용자가 문서를 편집할 때 그들이 참조하는 개체와 함께 이동할 수 있다. 문서 보기 애플리케이션들은 사용자가 챕터 번호 또는 그러한 다른 목록 항목을 이용하여 문서를 검색하고 탐색하는 것을 가능하게 할 수 있다. 애플리케이션-간 통신을 위해, 목록을 재구성하는 것은 사용자가 문서 뷰어로부터 암시적 목록을 복사하고, 그 목록을 문서 편집기 내에 명시적인 목록으로서 붙이는 것을 가능하게 하여 추가의 편집을 용이하게 한다. 또한, 목록 재구성은 벡터 그래픽 문서(예를 들어, PDF 파일)를 문서 편집 애플리케이션 내로 완전하게 가져오기(import)하는 데에 필요한 일반적인 시멘틱 재구성의 일부분으로서 이용될 수 있다. 이러한 일반적인 시멘틱 재구성은 미국 특허 공개 제2010/0174985호로서 공개된 미국 특허 출원 제12/455,866호에 상세하게 설명되어 있으며, 이것은 여기에 참조에 의해 포함된다.
일부 실시예들에서, 목록 재구성 프로세스는 기하학적 및 어휘적 접근법의 조합을 이용하여 암시적 목록들을 식별하고, 그들을 명시적 목록들로 변환한다. 즉, 프로세스는 컨텐츠의 배치 및 모양(appearance)(예를 들어, 들여쓰기)과, 목록 내의 레이블들을 형성하기 위해 이용되는 특정 캐릭터들(예를 들어, 로마 숫자) 둘 다를 처리한다.
도 2는 텍스트의 하나 이상의 컬럼에 걸쳐지는 목록을 재구성하기 위한 일부 실시예들의 프로세스(200)를 개념적으로 도시한 것이다. 프로세스(200)는 목록 재구성 프로세스의 다양한 양태들을 도시한 도 3-6을 참조하여 설명될 것이다. 도시된 바와 같이, 프로세스(200)는 순서가 정해진(ordered) 텍스트 라인들의 하나 이상의 컬럼을 수신함으로써 시작한다(블록(205)에서). 설명될 바와 같이, 일부 실시예들은 처음에 텍스트의 각 컬럼을 따로따로 평가한 다음, 순차적인 컬럼들 간에서 목록들을 맞춰본다. 멀티페이지 문서에 대하여, 일부 실시예들은 페이지들이 단일 컬럼 페이지일 때조차도, 각 페이지를 목록 재구성 프로세스를 위한 별개의 컬럼으로 취급한다.
일부 실시예들에서, 목록들이 문서 내에 명시적으로 인코딩되지 않더라도, 텍스트 라인들 및 컬럼들의 순서는 문서 내에 명시적으로 인코딩된다. 다른 실시예들에서, 텍스트 라인들 및 컬럼들도 물론 시멘틱적으로 재구성된다. 그러한 재구성을 위한 방법들은 위에서 참조에 의해 포함된 미국 특허 공개 제2010/0174985호에 상세하게 설명되어 있다.
도 3은 사람의 눈에 명백하게 목록에 속하는 것으로 보이는 23줄의 순서가 정해진 텍스트 라인의 단일 컬럼(300)을 도시한 것이다. 그러나, 어떠한 명시적인 인코딩도 없이는, 전자 애플리케이션이 목록 구조를 알지 못할 것이다. 볼 수 있는 바와 같이, 목록 구조는 3 레벨의 목록을 포함한다. 일부 실시예들에서는 행 바꿈이 문서의 구조 내에 인코딩되는 반면에, 다른 실시예들은 단어들 및 라인들을 식별하고, 그 라인들이 모두 단일 컬럼임을 식별하기 위해 문서 재구성 프로세스를 이용한다.
다음으로, 프로세스(200)는 컬럼들 각각에서 목록 스페이서들을 식별한다(블록(210)에서). 언급된 바와 같이, 일부 실시예들은 각 컬럼 내에서 목록들을 따로따로 재구성한다. 본 기술분야에 통상의 지식을 가진 자는, 일부 실시예들에서, 이것이 본 도면에 도시된 프로세스(200)보다는, 컬럼들 각각에 대하여 동작들(210-220)을 순환(looping)하는 것을 수반할 수 있음을 인식할 것이다.
일부 실시예들에서, 목록 스페이서는 갭이 목록 레이블(예를 들어, 컬럼(300)의 첫번째 라인의 "Ⅰ.")과 목록 컨텐츠(예를 들어, 동일 라인의 "Main Header 1") 간의 구분문자(separator)로 될 가능성이 있는 후보임을 나타내는 특정 기준을 만족하는, 텍스트 라인 내의 식별된 갭이다. 목록 스페이서는 특정 타입의 스페이서이며, 일부 실시예들은 이것을 페이지 컨텐츠 없이 가능한 한 멀게 연장되는 수직 스트립으로서 정의한다.
컬럼 내의 목록 스페이서들을 식별하기 위해, 일부 실시예들은 컬럼의 텍스트 라인들 내의 분할 갭들(split gaps)을 식별한 다음, 이러한 분할 갭들의 수직 어셈블리들(assemblies)을 찾는다. 요약하면, 프로세스는 기준선(baseline)의 y 좌표에 의해 분류(sort)되는 텍스트 라인들로 페이지의 바닥에서 시작한다. 페이지의 바닥으로부터, 프로세스는 연속적인 텍스트 라인들로부터의 겹치는(overlapping) x 간격들을 갖는 잠재적인 분할 갭들을 함께 어셈블링한다. 이것은 잠재적인 분할 갭들의 각각의 어셈블링된 컬렉션의 갭들을 완전히 통과하는 수직 직사각형 스트립을 생성한다. 즉, 수직 스트립의 두께는 컬렉션 내에 어셈블링된 x 간격들 전부의 교차에 걸쳐진다. 스트립은 그 스트립이 그것에 겹쳐지는 잠재적인 분할 갭을 갖지 않는 텍스트 라인을 만날 때까지 가능한 한 길게 수직으로 연장된다. 분할 갭의 수직 어셈블리들이 목록 항목들을 나타내는 특정 기준에 맞는 경우, 갭들의 어셈블리는 목록 스페이서로서 식별된다. 이하의 도 7의 논의는 목록 스페이서들을 식별하기 위한 프로세스를 상세하게 설명한다.
도 4는 컬럼(300)의 처음의 8 라인이기도 한 컬럼(400)에 대한 식별된 목록 항목 시작 후보들을 도시한 것이다. 이 경우에서, 텍스트 라인들 전부가 사실은 목록 항목들이므로, 모든 라인들은 도시된 바와 같이, 연관된 목록 스페이서를 갖는다. 8 라인 각각은 라인의 제1 단어와 제2 단어 간에 잠재적인 분할 갭을 갖는데(제1 단어는 예를 들어, "Ⅰ.", "A.", "B.", "ⅰ." 등임), 제2 단어들은 왼쪽에 정렬된다. 이러한 분할 갭들은 도면에 도시된 3개의 목록 스페이서로 어셈블링된다.
도 2로 되돌아가면, 프로세스(200)는 각 라인에 대한 목록 레벨을 목록 스페이서로 식별한다 (블록(215)에서). 라인의 목록 레벨은 컬럼 내의 라인의 상대적인 들여쓰기를 결정하기 위해 이용된다. 도 5는 도 4로부터의 컬럼(400)에 대한 일부 실시예들의 목록 레벨 계산을 도시한 것이다. 도시된 바와 같이, 일부 실시예들은 목록 스페이서를 갖는 임의의 라인의 기준선을 기준선의 왼쪽 에지로부터 컬럼의 왼쪽 에지까지 연장한다. 프로세스는 연장된 기준선이 교차하는 동일 컬럼 내의 텍스트 라인들에 속하는 목록 스페이서들의 개수를 카운트한다. 도시된 바와 같이, 이 개수는 컬럼의 제1 라인에 대해서 제로이다 (즉, 연장되는 기준선이 어떠한 목록 스페이서와도 교차하지 않음). 제3 라인에 대하여(그리고, 제2 라인 및 제7 라인에 대해서도 마찬가지로), 이 카운트는 1인 한편, 제5 라인(그리고, 제4 라인 및 제6 라인)은 2개의 목록 스페이서와 교차한다. 이 카운트들은 그들의 개별 텍스트 라인들에 텍스트 라인의 목록 레벨로서 연관지어진다. 일부 실시예들은 제로가 아니라 1부터 번호매기기를 시작한다.
그 다음, 프로세스는 각 컬럼에 대하여 목록들을 재구성한다 (블록(220)). 목록 재구성 프로세스는 이하에서 도 8 및 도 9를 참조하여 섹션 Ⅱ에서 더 상세하게 설명된다. 일반적으로, 프로세스는 보류 목록들(pending lists)의 스택을 생성하고, 다양한 규칙들을 이용하여, 스택 내에서 새로운 목록들을 생성하고, 항목들을 목록에 추가하고, 목록들을 마감하고 그들을 스택으로부터 제거한다. 일부 실시예들의 목록 재구성 프로세스는 레이블 템플릿 식별 함수(function), 레이블 렉서(lexer) 함수, 및 레이블 생성 함수를 이용한다.
일부 실시예들의 레이블 템플릿 식별 함수는 지원되는 알파벳들의 집합으로부터 선택하여, 특정 목록을 위해 사용되는 알파벳 또는 템플릿을 식별한다. 그러한 알파벳들의 예는 십진법 {0, 1, 2, ..., 9}, 로마자 소문자 {i, v, x, l, c, d, m}, 로마자 대문자 {I, V, X, L, C, D, M}, 라틴어 소문자 {a, b, c, ..., z}, 라틴어 대문자 {A, B, C, ..., Z}, 그리스어 소문자 {α, β, γ,..., ω}, 그리스어 대문자 {Α, Β, Γ, ..., Ω}, 원반형 글머리 기호 {●}, 원형 글머리 기호{○}, 줄표 글머리 기호 {-}, 별표 글머리 기호 {*} 등을 포함한다.
특정 목록 엔트리를 위한 레이블 템플릿은 접두사(prefix) 문자열, 접미사(suffix) 문자열, 및 글머리 기호 또는 서수(ordinal)(이에 대해 알파벳들이 이용됨)의 타입으로 구성된다. 특정 레이블에 대한 레이블 템플릿은 레이블의 마지막 캐릭터(특정 목록 항목에 대한 목록 스페이서의 왼쪽에 대한 첫번째 캐릭터로서 식별될 수 있음)에서 시작하여 지원되는 알파벳들 중 하나에 일치하는 캐릭터에 도달할 때까지 뒤로 이동함으로써 식별된다. 일단 그러한 캐릭터가 발견되고 나면, 이것은 목록 타입 및 알파벳을 정의한다. 캐릭터가 다중의 알파벳으로 되어 있는 경우(예를 들어, "i", "D" 등), 복수의 템플릿이 선택될 수 있고, 목록 재구성의 더 나중 스테이지에서 그들 간의 선택이 결정될 수 있다.
프로세스는 선행하는 캐릭터들이 일치하는 알파벳들 중 하나로부터의 것인 한, 그 선행하는 캐릭터들을 계속하여 체크한다. 이러한 캐릭터들의 범위는 일부 실시예들에서는 레이블에 대한 서수 또는 글머리의 범위를 정의한다. 서수 범위 선행하는 레이블 내의 모든 캐릭터들은 접두사를 정의하고, 서수 범위 이후의 레이블 내의 모든 캐릭터들은 접미사를 정의한다. 따라서, 도 6에 도시된 바와 같이, 컬럼(400)의 제1 라인을 위한 레이블 템플릿은 비어있는 접두사, 로마자 대문자 또는 라틴어 대문자, 및 접미사 "."이다. 이러한 경우에서, 로마자 대문자 템플릿이 라틴어 대문자보다 높은 우선순위를 갖는데, 왜냐하면 특히 컬럼의 최상단에서, 캐릭터 "Ⅰ"가 로마자 대문자 알파벳에 속할 가능성이 더 높기 때문이다. 그러나, 이 레벨에서의 다음 목록 항목이 "J"라면, 이 때 라틴어 대문자 알파벳이 선택될 것이다.
일부 실시예들은 물론 접두사 및/또는 접미사의 속성들을 제한한다. 그러한 속성들은 스트링 길이, 캐릭터 집합 또는 정규 표현식을 포함할 수 있다. 예를 들어, 접미사는 길이에 있어서 단일 캐릭터로 한정될 수 있거나, 또는 몇몇 특정 값들(예를 들어, ".", ")", ":" 등)로 한정될 수 있다. 접두사들 및 접미사들은 일부 실시예들에서 특정 타입들(예를 들어, 글머리 목록들)에 대해서는 완전하게 허용되지 않을 수 있다.
접두사 및 접미사 정의들 및 서수 타입에 더하여, 일부 실시예들은 레이블 템플릿 내의 폰트 및 스타일 정보를 포함한다. 예를 들어, 제1 엔트리가 컬럼(300) 내의 제1 라인인 목록에 대한 템플릿은 보통의(즉, 굵은 꼴이 아닌, 기울임꼴이 아닌, 밑줄이 없는) 타임즈 뉴 로만 서체를 갖는, 비어 있는 접두사, 로마자 대문자 서수, 접미사 "."를 나타낼 수 있다.
특정 목록 타입을 위한 레이블 렉서 함수는 레이블의 글머리 또는 서수 부분을 입력으로서 이용하여 목록 레이블을 위한 항목 번호를 생성한다. 예를 들어, 도 6에 도시된 라인들 둘 다는 항목 번호 1을 갖는 한편, 도 5에 도시된 제3 라인은 항목 번호 2를 갖는다. 일부 실시예들에서, 모든 글머리가 있는 목록 타입들 또는 기타 순서화되지 않은 목록 타입들은 항상 항목 번호 1을 생성한다. 통상의 순서화된 목록 타입들(예를 들어, 로마자 소문자, 로마자 대문자 등)에 대하여, 일부 실시예들은 잘 알려진 기법들을 이용하여 DFA(deterministic finite automaton)로서 레이블 렉서를 구현한다. 가장 간단한 경우에서(예를 들어, 십진법, 라틴어 소문자, 라틴어 대문자), 일부 실시예들은 캐릭터 코드들에 대한 산술을 이용하여 레이블 렉서를 구현한다.
레이블 생성기 함수는 특히 레이블 렉서 함수의 역이다. 레이블 생성기는 주어진 레이블 템플릿 및 항목 번호를 위한 레이블을 생성한다. 예를 들어, 도 6에 도시된 제1 라인에 연관된 레이블 템플릿에 있어서, 항목 번호 4가 주어지는 경우, 레이블 생성기는 "Ⅳ."를 생성한다. 일부 실시예들은 글머리 목록에 대한 입력에 무관하게 동일한 결과를 생성한다. 순서가 정해진 목록의 서수 부분에 대하여, 일부 실시예들의 생성기는 정상적으로는 기수(base)(예를 들어, 십진수 및 로마자에 대해서는 기수 10, 라틴어에 대해서는 기수 26 등)의 거듭제곱에 의한 정수 나눗셈을 이용하여, 그 기수 내에서 숫자의 자릿수들(digits)을 결정한 다음, 각 자릿수의 스트링 기술들(string descriptions)을 순서대로 연쇄시킬 것이다.
도 2로 되돌아가면, 프로세스(200)는 다음으로 컬럼들 간에서 목록들을 맞춰본다(match) (블록(225)에서). 목록 대조 프로세스는 이하에서 도 10 및 도 12를 참조하여 섹션 Ⅲ에서 상세하게 설명된다. 각 컬럼에 대해 재구성된 목록들을 이용하여, 일부 실시예들의 프로세스는 제1 컬럼의 끝에서 개방 목록들을 식별하고, 이들 목록들을 다음 컬럼의 시작에 있는 개방 목록들과 대조하여 그 목록들을 조합하려고 시도한다.
위에서 언급된 바와 같이, 텍스트 라인들의 컬럼 내에서 목록 스페이서들을 식별하기 위해 다수의 동작이 수행된다. 도 7은 텍스트 라인들의 컬럼 내에서 목록 스페이서들을 식별하기 위한 일부 실시예들의 프로세스(700)를 개념적으로 도시한 것이다. 도시된 바와 같이, 프로세스(700)는 순서가 정해진 텍스트 라인들의 컬럼을 수신함으로써 시작한다 (블록(705)에서). 위에서 도 2를 참조하여 설명된 것과 같이, 일부 실시예들은 문서 내의 몇 개의 컬럼 각각을 따로따로 평가한다. 그러한 실시예들에서, 목록 스페이서들은 각각의 컬럼에 대하여 따로따로 식별된다.
프로세스는 다음으로 컬럼의 텍스트 라인들 내의 분할 갭들(또는 잠재적인 분할 갭들)을 식별한다 (블록(710)에서). 분할 갭들은 문장 내의 2개의 후속하는 단어들 사이의 예상되는 갭들보다 큰, 단어들 또는 유사한 컨텐츠 간의 갭들이다. 일부 서식들(예를 들어, 리치 워드 프로세싱 서식)에서, 분할 갭들은 문서 내에서 이용되는 스페이싱 캐릭터들(예를 들어, 탭 캐릭터, 로우(row) 내의 복수의 스페이스 캐릭터의 시퀀스들, 컬럼들을 분리하는 명시적인 패딩(padding) 또는 여백(margins), 플로팅 이미지, 및 다른 문서 컨텐츠 구조들 등)에 기초하여 식별될 수 있다. 벡터 그래픽 문서들(또는 주어진 유일한 정보가 문자모양(glyphs)의 좌표들인 다른 문서들)에 대하여, 일부 실시예들은 위에서 참조에 의해 포함된 미국 특허 공개 제2010/0174985호에 상세하게 설명된 시멘틱 재구성 프로세스의 일부분으로서 분할 갭들을 식별한다. 일부 그러한 실시예들은 단어 내의 문자모양들 간의 평균 스페이싱 및 단어들 간의 평균 스페이싱을 결정하기 위해 클러스터 분석을 수행한 다음, 평균 단어-간 스페이싱보다 큰 갭들을 분할 갭 또는 잠재적인 분할 갭으로서 분류한다.
일단 분할 갭들이 식별되고 나면, 일부 실시예들은 미국 특허 공개 2010/0174985에 상세하게 설명되어 있는 것과 같은 프로세스를 이용하여 이러한 이러한 갭들로부터 스페이서들을 생성한다. 요약하면, 프로세스는 분할 갭들의 수직 컬렉션들을 어셈블링하여 스페이서들로 한다. 프로세스(700)는 컬럼의 가장 아래의 평가되지 않은 텍스트 라인을 선택한다 (블록(715)에서). 동작(715)을 처음으로 할 때, 이것은 컬럼의 가장 아래의 텍스트 라인일 것이다. 동작을 할 때마다, 프로세스는 다음 위의 텍스트 라인을 선택할 것이다.
그 다음, 프로세스는 선택된 텍스트 라인이 적어도 하나의 분할 갭을 포함하는지를 결정한다 (블록(720)에서). 텍스트 라인이 어떠한 분할 갭도 포함하지 않을 때, 프로세스는 그 다음, 블록(750)으로 진행하여 컬럼 내에 임의의 텍스트 라인이 남아있는지를 결정한다. 이 경우, 컬럼은 텍스트 라인을 통과하는 어떠한 목록 스페이서도 포함하지 않을 것이다. 한편, 선택된 라인이 적어도 하나의 분할 갭을 포함할 때, 프로세스는 텍스트 라인으로부터 분할 갭을 선택한다 (블록(725)에서). 상이한 실시예들은 왼쪽으로부터 오른쪽으로, 오른쪽으로부터 왼쪽으로, 또는 무작위 순서로 분할 갭들을 선택한다.
다음으로, 프로세스는 선택된 분할 갭이 개방 스페이서 집합과 교차하는지를 결정한다 (블록(730)에서). 아래의 단락에서 설명되는 바와 같이, 일부 실시예들은 후속하는 텍스트 라인들 내의 적어도 부분적으로 수평하게 정렬되는 분할 갭들의 스페이서 집합들을 생성한다. 예를 들어, 도 4의 컬럼(400)에서, 제5 텍스트 라인의 "ⅱ."와 "Tertiary Header 2" 사이의 갭은 제6 텍스트 라인의 "ⅲ."와 "Tertiary Header 3" 사이의 갭과 정렬된다. 또한, 일부 실시예들은 선택된 분할 갭이 분할 갭들 사이의 라인들 내의 텍스트를 가로막지 않으면서, 선행하는 라인들 중 임의의 것을 포함하는 스페이서 집합과 교차하는지를 결정한다. 예를 들어, 컬럼(400)의 제1 라인의 "Ⅰ."과 "Main Header 1" 사이의 갭은 제8 라인의 "Ⅱ."와 "Main Header 2" 사이의 갭과 정렬되고, 일부 실시예들은 제2 내지 제7 라인에 가로막는 텍스트가 없으므로 이들 분할 갭들을 정렬할 것이다.
선택된 분할 갭이 개방 스페이서 집합(즉, 선행하는 라인을 포함하거나 선행하는 라인의 텍스트에 의해 차단되지 않는 스페이서 집합)과 교차하지 않을 때, 프로세스는 선택된 분할 갭을 포함하는 새로운 스페이서 집합을 생성한다 (블록(735)에서). 예를 들어, 컬럼(400)에서, 프로세스는 초기에 제8 라인 내의 분할 갭에 대한 스페이서 집합을 생성할 것이고, 그 다음, 제7 라인을 평가할 때, "C."와 "Secondary Header 3" 사이의 분할 갭을 위한 새로운 스페이서 집합을 생성해야만 하는데, 왜냐하면 그것은 이미 생성된 스페이서 집합과 교차하지 않기 때문이다.
한편, 선택된 분할 갭이 개방 스페이서 집합과 교차할 때, 프로세스는 선택된 분할 갭을 교차된 스페이서 집합에 추가한다 (블록(740)에서). 일부 실시예들은 분할 갭들의 교차를 이용하여, 스페이서 집합에 의해 정의되는 수직 스트립의 경계들을 결정한다. 예를 들어, 컬럼(400)의 제4, 제5 및 제6 라인은 각각 분할 갭을 갖고, 이들 분할 갭들이 정렬되어 스페이서(405)를 형성한다. 스페이서(405)는 이들 3개의 갭 중 가장 좁은 것만큼만의 폭을 갖는데, 왜냐하면 스페이서의 폭은 갭들의 수평 축을 따른 교차에 의해 정의되기 때문이다.
도 3은 컬럼(300)을 위해 생성된 스페이서들을 도시하고 있다. 도시된 바와 같이, 일부 실시예들은 텍스트 라인의 시작 이전의 스페이스는 분할 갭으로서 카운트하지 않고, 또한 그러한 스페이스를 통한 스페이서의 어셈블리를 방지한다. 예를 들어, 스페이서(305)는 5 내지 8개의 텍스트 라인에 의해 각각 분리되는 4개의 분할 갭의 어셈블리이다. 또한, 아웃라인의 메인 헤더들에 의해 서로 연결되지 못하는 3개의 스페이서(310-320), 및 메인 헤더들 및 2차 헤더들에 의해 연결되지 못하는 4개의 스페이서(325-340)가 존재한다. 이들 스페이서들은 모두 그들의 오른쪽에, 왼쪽 정렬된 텍스트를 가지므로, 이들 스페이서들의 폭은 왼쪽 경계 텍스트(즉, 목록 항목 번호들)의 오른쪽 에지에 기초하여 결정된다.
프로세스(700)로 되돌아가면, 프로세스는 다음으로 추가의 분할 갭들이 텍스트 라인 내에 남아있는지를 결정한다 (블록(745)에서). 추가의 갭들이 남아있는 경우, 프로세스는 블록(725)으로 되돌아가서 다음 갭을 선택한다. 현재 선택된 텍스트 라인에 대해 모든 갭들이 평가된 때, 프로세스는 임의의 텍스트 라인이 남아있는지를 결정한다 (블록(750)에서). 추가의 텍스트 라인들이 평가될 필요가 있는 경우(즉, 현재 선택된 텍스트 라인이 컬럼 내의 최상위 라인이 아닌 경우), 프로세스는 블록(715)으로 되돌아가서 가장 아래의 평가되지 않은 텍스트 라인을 선택한다. 컬럼 내의 갭들 전부(모든 텍스트 라인에 있는 갭들 전부)를 평가한 후, 프로세스는 블록(755)으로 진행하여, 어셈블링된 스페이서들이 목록 스페이서들인지를 결정한다.
프로세스(700)는 스페이서 집합(즉, 동작(715-750)에서 분할 갭들로부터 구성된 집합들 중 하나)을 선택한다 (블록(755)에서). 프로세스는 왼쪽으로부터 오른쪽으로, 위로부터 아래로 등으로, 또는 그들의 조합으로 스페이서 집합들을 선택할 수 있다.
그 다음, 프로세스는 선택된 스페이서 집합이 목록 스페이서의 특성들을 갖는지를 결정한다 (블록(760)에서). 컬럼에 대한 스페이서들을 구성하면서, 일부 실시예들은 컬럼 내에서 발견된 스페이서들 전부에 대한 통계를 수집한다. 이러한 통계를 이용하여, 일부 실시예들은 목록 스페이서들을 특정 기준을 만족하는 스페이서들로서 식별한다. 기준은, 텍스트 라인 내의 분할을 나타내는 스페이서들(예를 들어, 컬럼이 둘로 분할되어야 함을 나타냄)에 비교할 때, 스페이서가 목록 레이블과 목록 컨텐츠 간의 갭일 가능성이 있는 것을 나타내는 것이다. 그러한 기준의 예는 목록 스페이서들의 오른쪽에 있는 단어들이 왼쪽으로 정렬되어야 하는 한편, 목록 스페이서와 그것의 왼쪽에 있는 스페이서(또는 여백) 사이에 제로 또는 하나의 단어가 있는 경향이 있다는 조건이다 (이 하나의 단어가 목록 레이블임).
목록 스페이서들이 식별되고 나면, 일부 실시예들은 목록 스페이서들이 관통하는 잠재적인 분할 갭들을 조사한다. 예를 들어, 도 3의 스페이서(305)의 경우에서, 비록 스페이서가 23 라인의 수직 길이를 갖긴 하지만, 단 4개의 분할 갭만이 존재한다. (임의의 텍스트 라인 분할이 수행된 후) 목록 스페이서가 텍스트 라인의 제1 단어와 제2 단어 사이를 통과할 때, 텍스트 라인은 잠재적인 목록 항목 시작 후보로서 플래그되고, 연관된 목록 스페이서가 그 라인에 할당된다. 일부 실시예들은 스페이서가 다르게는 너무 얇아서 폐기되었을 것이라도, 그 스페이서가 목록 스페이서에 대한 기준 모두를 만족시킬 때, 스페이서들을 목록 스페이서들로서 유지할 수 있다.
선택된 스페이서가 목록 스페이서의 특성들을 만족시킬 때, 프로세스(700)는 집합을 목록 스페이서로서 식별한다 (블록(765)에서). 일부 실시예들에서, 목록 스페이서들은 더 큰 문서의 재구성 프로세스에서의 사용을 위해 메모리 내에 저장된다. 일부 실시예들은 목록 스페이서들을 문서를 기술하는 파일 내의 정보로서 저장한다 (예를 들어, 스페이서들 자체를 문서 개체로서 저장함). 그 다음, 프로세스는 평가할 임의의 추가 스페이서 집합들이 남아있는지를 결정한다 (블록(770)에서). 추가의 스페이서 집합들이 남아있는 경우, 프로세스는 블록(755)으로 되돌아가서 다음 스페이서를 선택한다. 스페이서 집합들 전부가 평가된 때, 프로세스가 종료한다.
Ⅱ. 컬럼 내의 목록들의 재구성
위에서 언급된 바와 같이, 일부 실시예들은 보류 목록들의 스택을 이용하여 한번에 한 컬럼씩 목록을 재구성한다. 도 8a 및 도 8b는 단일 컬럼 내에서 목록들을 재구성하기 위한 일부 실시예들의 프로세스(800)를 개념적으로 도시한 것이다. 프로세스(800)는 8 라인을 갖는 컬럼(400)을 도시한 도 4, 및 11개의 스테이지(905-955)에 걸쳐서 보류 목록들의 스택(900)을 개념적으로 도시한 도 9를 참조하여 설명될 것이다.
도시된 바와 같이, 프로세스(800)는 식별된 목록 스페이서들 및 레벨들을 갖는 텍스트 라인들의 컬럼을 수신함으로써 시작한다 (블록(802)에서). 일부 실시예들에서, 목록 스페이서들 및 레벨들은 위에서 섹션 Ⅰ에서 설명된 것과 같이 식별된다 (즉, 잠재적인 분할 갭들을 이용하여 스페이서들을 찾고, 목록 스페이서들인 스페이서들을 결정하고, 각 스페이서에 대한 레벨을 찾음으로써).
다음으로, 프로세스는 컬럼에 대하여 보류 목록들의 빈 스택을 생성한다 (블록(804)에서). 언급된 바와 같이, 도 9는 제1 스페이지(905)에서 비어있는 스택(900)을 도시하고 있다 (즉, 스택 내에 보류 목록들이 존재하지 않음). 프로세스는 또한 컬럼의 오른쪽 에지에서 개방 위치(open position)를 설정한다 (블록(806)에서). 프로세스(800) 내에서 나중에 설명될 바와 같이, 새로운 목록의 시작이 개방으로 남아있을 수 있는지 아니면 폐쇄되어야 하는지를 결정하기 위해 개방 위치가 이용된다.
그 다음, 프로세스는 컬럼 내의 다음 텍스트 라인을 선택한다 (블록(808)에서). 일부 실시예들의 프로세스는 컬럼 내의 최상위 텍스트 라인에서 시작한다. 컬럼(400)을 참조하면, 이것은 "Ⅰ."으로 시작하는 라인이다. 일부 실시예들은 목록 스페이서들을 갖는 라인들만을 처리하고 다른 라인들(즉, 목록들 사이의 컨텐츠를 갖는 라인들)은 전부 무시하는 반면, 다른 실시예들은 컬럼 내의 텍스트 라인들 전부를 처리한다.
다음으로, 프로세스(800)는 선택된 텍스트 라인이 목록 스페이서 및 식별된 레벨을 갖는지를 결정한다 (블록(810)에서). 언급된 바와 같이, 일부 실시예들은 목록 스페이서들 및 식별된 레벨들을 갖는 텍스트 라인들만을 처리하는 반면에, 다른 실시예들은 모든 텍스트 라인을 처리한다. 프로세스(800)는 텍스트 라인들 전부를 검사하고, 선택된 텍스트 라인이 목록 스페이서 및 식별된 레벨을 갖지 않을 때, 프로세스는 아래에 상세하게 설명되는 블록(852)으로 진행한다.
선택된 텍스트 라인이 목록 스페이서 및 식별된 레벨을 가질 때, 프로세스는 현재의 라인과 동일한 목록 스페이서 및 레벨을 갖는 보류 목록이 스택 내에 있는지를 결정한다 (블록(814)에서). 그러한 경우, 현재의 라인은 그 보류 목록에 속할 수 있다. 물론, 처음으로 동작(814)을 할 때에는, 동일하든 상이하든 간에 목록 스페이서 및 레벨을 갖는 보류 목록이 존재하지 않는다. 현재 선택된 텍스트 라인과 동일한 스페이서 및 레벨을 갖는 목록이 스택 내에 보류 중일 때, 프로세스는 아래에 설명되는 블록(844)으로 진행한다.
한편, 현재 선택된 텍스트 라인과 동일한 스페이서 및 레벨을 갖는 목록이 스택 내에 보류 중이지 않은 경우, 프로세스는 현재 목록에 대한 임의의 후보 목록 템플릿들을 식별한다 (블록(816)에서). 이전 섹션에서 설명된 바와 같이, 일부 실시예들은 목록 스페이서로부터 시작하여 뒤로 가면서 작업하여, 현재 라인이 속하는 목록에 대해 이용되는 알파벳을 식별하려고 시도한다. 일부 실시예들은 복수의 후보 목록 템플릿을 식별할 수 있고, 첫번째 목록 항목이 복수의 상이한 알파벳에 속할 수 있는 캐릭터(예를 들어, "Ⅰ", "ⅰ" 등)를 갖기 때문에 모호한 경우에, 템플릿 결정을 미해결로 둘 수 있다.
그 다음, 프로세스는 지금 식별된 각각의 후보 목록 템플릿에 대하여, 그것의 목록 타입에 대한 렉서를 현재 텍스트 라인의 제1 단어의 서수 부분에 적용한다 (블록(818)에서). 이 때, 프로세스는 후보 목록 템플릿들을 식별하는 것으로부터, 텍스트 라인의 제1 단어(레이블)의 접두사, 접미사 및 서수 부분을 결정한다.
프로세스는 텍스트 라인의 제1 단어가 후보 템플릿들 중 적어도 하나에 대한 대응하는 항목 번호를 갖는 적법한 목록 레이블인지를 결정한다 (블록(#722)에서). 렉서 함수를 이용하여(블록(818)에서), (항목 번호로서 알파벳들 중 하나와 일치할 필요가 없는) 성공적인 출력에 도달한 경우, 현재 라인의 제1 단어는 항목의 적법한 목록 레이블이다. 예를 들어, 레이블 "ⅰ."는 2개의 적법한 알파벳(로마자 소문자 및 라틴어 소문자)으로 분석할 수 있다.
단어가 일치되는 템플릿이 존재하지 않는 경우, 그 라인은 목록 항목이 아니며(적어도, 목록 재구성을 수행하는 애플리케이션에 의해 인식되는 알파벳으로는), 프로세스는 아래에 설명되는 블록(852)으로 진행한다. 그러나, 제1 단어가 적어도 하나의 일치를 갖는 경우, 프로세스는 개방 종료 상태(open end state)를 갖는 새로운 보류 목록을 생성한다 (블록(824)에서). 목록의 끝에 계속하여 항목들을 추가하는 것이 가능할 때, 그 목록은 개방 종료 상태를 갖는다. 한편, 목록의 끝에 항목들을 추가하는 것이 더 이상 가능하지 않게 되고 나면, 목록은 폐쇄 단부 상태를 가질 것이다. 일부 실시예들에서, 목록들은 항상 개방 종료 상태로 스택에 추가된다.
목록 레이블이 하나보다 많은 알파벳으로부터 온 것일 수 있을 때, 새로운 보류 목록은 확실한 템플릿을 갖지 않을 것이고, 대신에 일치되는 임의의 후보 템플릿들이 목록에 대해 저장될 것이다 (동작(822)에서). 제2 목록 항목이 목록에 추가될 때, 프로세스는 일치되는 템플릿들 중 하나를 선택함으로써 이 템플릿 결정을 해결할 것이다.
도 9의 제2 스테이지(910)는 제1 목록(960)이 스택(900)에 추가된 것을 도시하고 있다. 도시된 바와 같이, 목록(960)은 현재, 컬럼(400)의 제1 라인에 대응하는 단 하나의 항목을 갖는다. 이 라인을 위한 목록 레이블이 "Ⅰ."이므로, 이것은 항목 번호 1을 갖는 로마자 대문자이거나, 항목 번호 9를 갖는 라틴어 대문자일 수 있다. 따라서, 목록은 2개의 가능한 템플릿을 저장하면서 스택에 추가된다. 도시된 바와 같이, 로마자 대문자가 먼저 열거되는데, 왜냐하면 이것이 2개의 가능한 알파벳 중에서 더 높은 우선순위를 갖기 때문이다. 일반적으로, 목록 내에서 발견된 제1 서수가 "Ⅰ" 또는 "ⅰ"일 때, 비록 당연히 그 항목이 선행하는 컬럼으로부터의 라틴 알파벳 목록의 연속일 가능성이 남아있긴 하지만, 대응하는 로마 숫자 알파벳이 더 가능성있는 알파벳이다.
그 다음, 프로세스(800)는 현재 라인의 목록 스페이서가 개방 위치의 왼쪽에 있는지를 결정한다 (블록(826)에서). 위에서 나타난 바와 같이, 일부 실시예들은 새로운 목록의 시작 상태가 개방으로 남아있어야 하는지를 결정하기 위해 개방 위치를 이용한다. 목록이 선행하는 컬럼, 페이지, 섹션 등으로부터의 목록의 연속일 가능성이 있는 경우, 목록의 시작 상태는 개방으로 남아있는다. 따라서, 목록이 현재 컬럼의 선행하는 목록 내부에 중첩되지 않을 때, 시작 상태는 개방으로 남아있을 것이다. 개방 위치는 컬럼 내의 가장 왼쪽의 목록을 추적하기 위해 이용되며, 이 위치의 오른쪽에 있는 스페이서들을 갖는 임의의 목록들은 폐쇄 시작 상태를 가질 것이다.
따라서, 현재 라인의 목록 스페이서가 개방 위치의 왼쪽에 있을 때, 프로세스는 새로운 목록의 시작 상태를 개방으로 할 것이다 (블록(828)에서). 그렇지 않으면, 현재 라인의 목록 스페이서가 개방 위치에 있거나 그 오른쪽에 있을 때, 프로세스는 새로운 목록의 시작 상태를 폐쇄로 한다 (블록(829)에서). 현재 라인을 위한 목록 스페이서가 개방 위치의 오른쪽에 있는 경우, 컬럼은 이미 현재 목록 스페이서의 왼쪽에 있는 항목들을 갖는 목록을 갖는다. 이러한 것으로서, 현재 스페이서는 선행하는 컬럼으로부터의 연속이기보다는 새로운 목록의 제1 항목이어야 할 수 있는데, 왜냐하면 그것이 적어도 하나의 다른 목록 내부에 중첩되기 때문이다. 도 9의 스테이지(910)에 도시된 바와 같이, 제1 목록(960)이 스택에 추가될 때, 시작 상태는 개방으로 남아있는다.
다음으로, 프로세스(800)는 현재 텍스트 라인을 항목으로 갖는 목록과 동일하거나 그보다 높은 목록 레벨을 갖는 임의의 보류 목록들의 끝을 폐쇄한다 (블록(830)에서). 또한, 프로세스는 보류 목록들의 스택으로부터 폐쇄 목록들을 제거하고 (블록(832)에서), 새로운 목록을 스택의 최상단에 추가한다 (블록(834)에서). 따라서, 이미 스택에 있는 목록들 중 적어도 하나보다 낮은 레벨에 있는(즉, 목록 스페이서를 더 왼쪽에 갖는) 새로운 목록이 추가될 때, 그 목록들은 (단부 상태에서) 폐쇄되고 스택으로부터 제거된다. 이러한 사례는 선행하는 목록의 연속을 포함하는 컬럼 내에서 발생할 수 있다. 예를 들어, 레벨 3 목록 항목이 컬럼 내의 제1 항목이고, 그 다음 레벨 1 목록 항목이 후속하는 경우, 레벨 1 목록의 생성은 레벨 3 목록의 끝을 나타낼 것이다. 도 9의 스테이지(910)에서, 프로세스에 대한 스택 내에서 폐쇄하고 제거할 항목이 없긴 하지만, 새로운 목록(960)은 스택의 최상단에 추가된다.
다음으로, 프로세스(800)는 개방 위치를 현재 개방 위치와 현재 텍스트 라인의 왼쪽 경계 중 가장 왼쪽에 있는 것으로 이동시킨다 (블록(835)에서). 프로세스는 컬럼 내의 각 텍스트 라인을 처리한 다음에 이러한 동작을 수행하므로, 개방 위치는 항상 임의의 처리되는 텍스트 라인의 가장 왼쪽의 경계일 것이다. 그러나, 일부 실시예들은 목록의 일부인 텍스트 라인들의 다음에서만 개방 위치를 수정하여, 들여쓰기되지 않은 비목록 텍스트(non-indented non-list text)(예를 들어, 챕터 제목들 사이의 본문)가 개방 위치에 영향을 주는 것을 방지한다.
그 다음, 프로세스는 컬럼 내에 임의의 추가의 텍스트 라인이 남아있는지를 결정한다 (블록(836)에서). 모든 텍스트 라인이 검사되고 나면, 프로세스(800)는 이하에서 설명될 블록(860)으로 진행한다. 추가의 텍스트 라인이 남아있는 경우, 프로세스는 블록(808)으로 되돌아가서, 다음 텍스트 라인을 선택하고, 이 새로운 라인을 그것의 목록 속성에 관하여 검사한다. 위에서 언급된 바와 같이, 일부 실시예들의 프로세스는 컬럼의 최상단에서 시작하여 아래로 이동한다.
위에서 설명된 바와 같이, 프로세스가, 스택이 현재 텍스트 라인과 동일한 목록 스페이서 및 레벨을 갖는 보류 목록을 포함한다고 결정할 때(블록(814)에서), 프로세스는 블록(844)으로 진행한다. 여기에서, 프로세스는 현재 텍스트 라인 내의 제1 단어가 적어도 하나의 후보 템플릿에 대하여 목록 내의 예상되는 다음 항목과 일치하는지를 결정한다 (블록(844)에서). 이것은 현재의 라인이 보류 목록에 합쳐질 수 있는지에 관한 결정이다. 현재 라인이 보류 목록에 합쳐질 수 있는지를 결정하기 위해, 일부 실시예들은 가능한 후보 템플릿들 각각에 대한 레이블 생성 함수 및 그러한 템플릿들 내의 다음 항목 번호를 이용한다 (즉, 목록 내의 제1 항목이 "Ⅰ"인 경우, 레이블 생성 함수는 "Ⅱ" 및 "J"를 출력할 것임). 일치가 존재하지 않는 경우, 프로세스는 블록(816)으로 진행하여, 그 항목이 새로운 목록의 시작인지를 결정한다.
생성된 레이블이 일치하는 경우, 프로세스는 일치가 존재하는 최고 우선순위의 템플릿을 선택한다 (블록(845)에서). 이 때, 단 하나의 후보 템플릿만이 존재하는 경우, 이것은 항상 그 후보 템플릿을 선택할 것이다. 항목이 목록 내의 제3 또는 그 이상의 항목인 경우, 임의의 후보 템플릿들 간의 결정이 항상 해결될 것이다. 그러나, 현재 라인이 복수의 후보 템플릿을 갖는 목록 내의 제2 목록 항목을 갖는 경우, 프로세스는 어느 것이든 가장 높은 우선순위를 갖는 템플릿을 선택한다.
그 다음, 프로세스(800)는 현재의 라인을 그것의 레벨에 있는 현재의 보류 목록에 새로운 목록 항목으로서 추가한다 (블록(846)에서). 도 9에서, 제3 스테이지(915)는 컬럼(400)의 제2 라인이 새로운 목록(965)의 생성을 유발하는 것을 도시하고 있다. 프로세스는 이 새로운 목록(965)을 폐쇄 시작 상태로 생성하는데, 왜냐하면 개방 위치가 현재 컬럼(400)의 제2 라인의 시작의 왼쪽에 있기 때문이다. 이 목록은 스택의 최상단에 추가된다. 목록(965)이 현재 2개의 항목을 가지므로, 스테이지(920)에서 제3 라인이 이 목록에 추가된다.
새로운 항목을 보류 목록에 추가한 후, 프로세스는 현재 항목보다 높은 레벨을 갖는 임의의 보류 목록들의 끝을 폐쇄한 다음 (블록(848)에서), 폐쇄된 목록들을 보류 목록들의 스택으로부터 제거한다 (블록(850)에서). 그 다음, 프로세스는 블록(835)으로 진행하여, (필요한 경우) 개방 위치를 이동하고, 컬럼 내에 임의의 추가의 텍스트 라인이 남아있는지를 결정한다.
즉, 특정 레벨에서 새로운 항목이 목록에 추가될 때, 그 목록 내에 중첩되는(따라서, 더 높은 레벨을 갖는) 임의의 목록들이 폐쇄된다. 컬럼(400)을 참조하면, 제7 로우 내의 항목이 레벨 1 목록(라틴어 대문자)에 추가될 때, 프로세스는 레벨 2 목록(로마자 소문자)을 폐쇄한다. 도 9는 이것을 3개의 선행하는 스테이지 이후에 설명될 스테이지(940)에 도시하고 있다. 스테이지(925)에서, 컬럼(400)의 제4 라인은 로마자 소문자 또는 라틴어 소문자 알파벳을 이용할 수 있는 새로운 목록(970)의 추가를 유발한다. 이러한 결정은 스테이지(930)에서 컬럼(400)의 제5 라인으로부터의 제2 항목이 목록(970)에 추가될 때 해결된다. "j"가 아니라 "ⅱ"인 목록 내의 이 제2 항목은, 목록이 그것의 알파벳을 위해 로마자 소문자 번호를 이용함을 나타낸다. 컬럼(400)의 제6 라인은 스테이지(935)에서 목록(970)의 제3 항목으로서 추가된다.
스테이지(940)에서, 컬럼(400)의 제7 라인에 대응하여, 스택(900) 내의 제2 목록(965)에 제3 항목이 추가된다. 제3 목록(970)이 제2 목록(965)보다 높은 레벨에 있으므로, 프로세스는 제3 목록(970)을 폐쇄하고, 그 목록을 제거한다. 도시된 바와 같이, 일부 실시예들은 목록에 관한 관련 상세들(즉, 목록 내의 항목들을 구성하는 텍스트 라인들, 항목들의 수, 항목들의 레이블, 이용되는 템플릿 등)을 저장소(예를 들어, RAM과 같은 휘발성 메모리, 하드 디스크 또는 플래시 메모리와 같은 영구적 저장소 등) 내에 저장한다. 스테이지(945)는 스택(900)이 목록(965)을 최상위 목록으로 하여 현재 2개의 보류 목록만을 가지고 있는 것을 도시하고 있다. 스테이지(950)에서, 컬럼(400)의 제8 라인에 대응하여, 제1 목록(960)에 제2 항목이 추가된다. 이러한 추가는 프로세스가 제2 목록(965)을 폐쇄하고, 이 목록을 제거하게 한다. 스테이지(950)는 현재 제1 목록(960)만이 스택(900) 내에 개방되어 있는 것을 도시하고 있다.
도 8a 및 도 8b로 되돌아가면, 현재 텍스트 라인이 목록을 형성하기 위해 이용될 수 없는 경우(예를 들어, 동작(810 또는 822)에서 결정된 결과), 프로세스(800)는 동작(852)으로 진행한다. 이 때, 프로세스는 현재 텍스트 라인의 왼쪽 경계의 오른쪽에 있는 목록 스페이서를 갖는 임의의 보류 목록의 끝을 폐쇄한다 (블록(852)에서). 또한, 프로세스는 폐쇄된 목록들을 보류 목록들의 스택으로부터 제거한다 (블록(854)에서).
그 다음, 프로세스는 이 목록의 제거 후에 보류 목록들의 스택이 비어있는지를 결정한다 (블록(856)에서). 스택 내에 적어도 하나의 목록이 보류 중으로 남아있을 때, 프로세스는 현재의 텍스트 라인을 스택의 최상단에 있는 목록 내의 마지막 목록 항목으로 추가한다 (블록(858)에서). 따라서, 목록 항목이 복수의 라인에 걸쳐지는 경우, 추가의 라인들은 그 목록 항목과 그룹지어질 것이다. 도 10은 그러한 멀티라인 목록 항목(1000)의 예를 도시한 것이다. 목록 항목(1000)의 제2 라인을 평가할 때, 프로세스는 하나의 목록 항목(항목 "Ⅰ.")을 갖는 목록을 개방으로 유지할 것이고, 그 다음 그 목록 항목에 제2 라인을 추가할 것인데, 왜냐하면 그것은 목록 레이블 자체를 갖지 않고, 또한 그것의 정렬로 인한 목록의 폐쇄도 야기하지 않기 때문이다. 도 11은 목록 항목들 간의 단락들이 목록 항목들과 그룹지어지고 목록들의 폐쇄를 야기하지 않는 컬럼(1100)을 도시한 것이다. 컬럼(1100)의 각 목록 항목은 3 또는 4 라인의 연관된 단락을 갖는다. 이러한 라인들은 일부 실시예들에서 목록 항목과 그룹지어진다 (예를 들어, 제1 단락은 레이블 "Ⅰ."을 갖는 목록 항목의 일부분으로서 그룹지어짐).
그러나, 일부 실시예들은 더 큰 문서에서의 섹터 또는 챕터 제목의 식별, 및 목록 항목들 간에 대량의 비목록 컨텐츠가 존재할 때의 그러한 목록들의 재구성을 가능하게 하기 위해, 동작(852 및 854)을 수행하지 않거나 이러한 동작들의 변형을 수행한다. 예를 들어, 일부 경우들에서, 섹션 제목들은 도 4에 도시된 목록들과 같이 들여쓰기될 것이지만, 이러한 제목들 사이에는 들여쓰기가 없는 단락들이 있을 것이다 (즉, 들여쓰기된 단락들이 없는, 컬럼(1100)과 유사한 상황). 각각의 단락이 보류 목록들의 스택을 비우도록 하기보다는, 이 단락들은 임의의 다른 목록들을 폐쇄하지 않고서 마지막 목록 항목 아래에 컨텐츠로서 추가된다. 도 12는 중첩된 목록 헤더들 간에 단락 컨텐츠를 갖는 그러한 목록들의 부분의 예를 도시한 것이다. 일부 실시예들은 문서 내의 본문 단락들을 인식하고(예를 들어, 명시적으로 인코딩된 서식 또는 문서 재구성 기법들에 기초하여), 목록 재구성 프로세스를 수행하기 전에 이러한 단락들에 속하는 텍스트 라인들을 제거한다.
컬럼 내의 텍스트 라인들 전부가 평가되고 나면, 프로세스(800)는 목록들의 유효성을 검사하고 (블록(860)에서), 임의의 자격없는 목록들을 제거하고, 저장된 목록들의 스택을 필요에 따라 수정한다. 일부 실시예들은 목록을 적법한 것으로 인식하기 위한 최소한의 조건들을 포함한다. 예를 들어, 일부 실시예들은 목록이 적어도 2개의 항목을 가질 것을 요구하여, 단일 항목 목록(single item lists)의 형성을 방지한다. 목록이 자격이 없는 것인 경우, 프로세스는 그 목록을 제거하고, 그것의 텍스트 라인들과 임의의 중첩된 목록들을 저장된 목록들의 스택 내에서 한 레벨 더 낮게 낮춘다. 텍스트 라인이 목록들의 스택의 바닥까지 낮춰지는 경우, 이 라인은 더 이상 어느 목록 내에도 있지 않은 것이다.
따라서, 예를 들어, 컬럼(400)이 그것의 제8 라인을 포함하지 않는 경우, 제1 목록(960)은 자격이 없게 될 것이며, 일부 실시예들에서 저장된 목록들의 스택으로부터 제거될 것이다. 다른 목록들(965 및 970)은 각각 한 레벨 위로 이동될 것이다. 컬럼의 제1 라인은 어떠한 목록과도 연관되지 않을 것이다. 그러나, 문서가 복수의 컬럼을 포함하는 경우, 섹션 Ⅲ에서 설명되는 바와 같이, 그것은 나중의 컬럼에서 계속될 수 있으므로, 일부 실시예들은 이 목록을 제거하지 않을 것이다.
한편, 제5 및 제6 라인("ⅱ" 및 "ⅲ")이 존재하지 않는 경우, 목록(970)은 제거될 것이고, 제4 텍스트 라인은 목록(965) 내의 제2 항목과 연관될 것이다. 이러한 경우에서, 단일 항목 목록이 폐쇄되기 때문에, 복수 컬럼의 상황에서조차도, 목록이 제거되고 2개의 목록만이 남는다.
상기 프로세스(800) 및 설명된 변형들은 목록 레벨의 표시자로서 들여쓰기를 이용한다. 일부 실시예들은 또한 멀티레벨 넘버링(multi-level numbering)을 이용하여 중첩(nesting)이 행해지는 중첩된 목록들을 식별할 수 있다. 도 13은 그러한 중첩된 목록들의 집합(1300)의 예를 도시한 것이다. 이러한 중첩된 목록들의 집합 내에서, 목록 스페이서는 상이한 항목들 전부에 대해 동일한 레벨에 있지만, 목록 항목들은 상이한 목록들로 분리될 필요가 있다. 이러한 쟁점을 다루기 위해, (ⅰ) 현재의 텍스트 라인이 보류 목록과 동일한 레벨에 있을 때, 및 (ⅱ) 보류 목록의 마지막 목록 항목(또는 마지막 목록 항목 더하기 구분 캐릭터(separator character))이 현재 텍스트 라인의 레이블의 접두사 부분일 때, 일부 실시예들은 새로운 목록을 최상위에 추가하기 전에 보류 목록을 닫거나 그 목록을 스택으로부터 제거하지 않는다.
언급된 바와 같이, 일부 실시예들은 들여쓰기에 의해 중첩되는 목록들(예를 들어, 도 3에 도시된 것들) 및 넘버링에 의해 중첩되는 목록들(예를 들어, 도 13에 도시된 것들) 둘 다를 식별할 수 있다. 이와 같이 하기 위해, 일부 실시예들은 프로세스(800)에 대한 변형을 이용한다. 동작(830)에서, 일부 실시예들은 새로운 목록들과 동일한 레벨에 있는 보류 목록들을 항상 닫지 않고, 대신에 동일한 레벨에 있는 임의의 보류 목록들과 새로운 목록 사이에 멀티레벨 넘버링이 존재하는지를 결정한다. 그러한 넘버링은 보류 목록의 마지막 목록 항목(또는 마지막 목록 항목 더하기 구분 캐릭터)이 현재 텍스트 라인의 레이블의 접두사 부분이라고 하는 위에서 언급된 조건이 충족될 때 존재한다.
Ⅲ. 복수의 컬럼에 걸친 목록들의 재구성
위의 섹션은 단일 컬럼 내에서 목록들을 식별하고 재구성하기 위한 일부 실시예들의 프로세스를 설명하였다. 위에서 설명된 바와 같이, 일부 실시예들은 멀티컬럼 문서의 각 컬럼에 대하여 그러한 프로세스를 수행한 다음, 목록들의 유효성을 검사하기 전에, 컬럼들에 걸쳐 개방 목록들을 맞춰본다. 도 14는 복수의 컬럼에 걸쳐 목록들을 재구성하기 위한 일부 실시예들의 프로세스(1400)를 개념적으로 도시한 것이다. 프로세스(1400)는 문서의 2개의 후속하는 컬럼(1505 및 1510)을 도시한 도 15를 참조하여 설명될 것이다.
도시된 바와 같이, 프로세스(1400)는 순서가 정해진 컬럼들의 집합을 수신한다 (블록(1405)에서). 컬럼들은 모두 동일 페이지의 동일 레이아웃 내에 있을 수 있고, 또는 복수의 레이아웃, 페이지, 섹션 등에 걸쳐질 수 있다. 일부 실시예들에서, 컬럼들의 순서가 주어진다 (예를 들어, 문서의 구조 내에 인코딩됨). 다른 실시예들에서, 목록 재구성은 위에서 참조에 의해 포함된 미국 특허 공개 제2010/0174985호에 설명된 것과 같은 더 큰 문서의 재구성 프로세스의 일부분이다.
다음으로, 프로세스는 모든 컬럼들의 목록들을 식별한다 (블록(1410)에서). 일부 실시예들에서, 컬럼들의 목록들을 식별하기 위해, 프로세스(800)의 대부분(블록(860)에서의 유효성 검사 동작을 제외)이 수행된다. 이것은 목록들의 일부를 개방 시작 또는 종료 상태들로 남겨둔다. 예를 들어, 도 15에서, 제1 컬럼(1505)은 개방 종료 상태를 갖는 3개의 목록(라인 1, 8 및 14로부터의 "Ⅰ", "Ⅱ" 및 "Ⅲ"의 목록, 라인 15 및 16으로부터의 "A" 및 "B"의 목록, 라인 17로부터의 "ⅰ"의 단일 항목 목록)을 가질 것이다. 이러한 목록들 중 제1 목록은 또한 개방 시작 상태를 가질 것이다. 제2 컬럼(1510)에서, 2개의 목록은 개방 시작 상태를 가질 것이다 (라인 1 및 2로부터의 "ⅱ" 및 "ⅲ"의 목록, 및 제3 및 제6 라인으로부터의 "C" 및 "D"의 목록). 이러한 2개의 목록 중 후자는 또한 개방 상태를 가질 것이다.
목록들 전부가 식별되면, 프로세스는 컬럼들에 걸쳐 목록들을 맞춰보려고 시도할 수 있다. 프로세스는 제1 컬럼을 순서대로 현재 선택된 컬럼으로서 설정한다 (블록(1415)에서). 프로세스는 또한 선택된 컬럼 이후의 컬럼을 다음 컬럼으로서 설정한다 (블록(1420)에서). 일부 실시예들은 적어도 2개의 컬럼을 갖는 문서에 대해서만 프로세스(1400)를 수행한다. 다른 실시예들은 단일 컬럼 문서에 대해서도 이 프로세스를 항상 수행하지만, 문서가 단 하나의 컬럼을 갖는 경우에 대한 종료 조건(exit condition)을 포함한다.
문서가 둘 이상의 컬럼을 갖는다고 가정하면, 프로세스는 선택된 컬럼이 개방 종료 상태를 갖는 임의의 목록들을 갖는지를 결정한다 (블록(1425)에서). 컬럼이 개방 목록을 갖지 않는 경우, 프로세스는 이하에 설명되는 블록(1445)으로 진행한다. 개방 목록이 존재하지 않는 경우, 프로세스는 다음 컬럼으로부터의 임의의 목록을 현재 선택된 컬럼과 맞춰보려고 시도하지 않을 것인데, 왜냐하면 2개의 컬럼 중 제1 컬럼으로부터의 개방 종료부를 갖는 목록이 그러한 일치를 위한 조건이기 때문이다.
그 다음, 프로세스는, 다음 컬럼이 개방 시작 상태를 갖는 임의의 목록들을 갖는지를 결정한다 (블록(1430)에서). 컬럼들의 쌍 중 제1 컬럼 내에서의 개방 종료 상태의 요구조건과 마찬가지로, 프로세스는 제1 컬럼의 목록들과 일치하기 위해, 쌍 내의 제2 컬럼이 개방 시작 상태를 갖는 적어도 하나의 목록을 가질 것을 요구한다. 다시 말해, 개방 시작 상태를 갖는 목록들이 존재하지 않는 경우, 프로세스는 컬럼들에 걸쳐 목록들을 맞춰보려고 시도하지 않고, 블록(1445)으로 진행한다.
제1 컬럼 내에 개방 종료 상태들을 갖는 목록들이 존재하고, 제2 컬럼 내에 개방 시작 상태들을 갖는 목록들이 존재하는 경우, 프로세스는 레벨들 간에서 일치하는 목록 연속 또는 목록 연속들의 집합이 존재하는지를 결정한다 (블록(1435)에서). 일부 실시예들에서, 제1 컬럼의 단부에 있는 임의의 개방 목록은, 모든 일치된 목록 레벨들의 집합이 원래 레벨의 단조 증가 함수인 한, 그리고 제2 컬럼에서 시작하는 항목 레벨들이 제1 컬럼으로부터의 목록들에 대한 다음 항목 레이블들로서 일치되는 한, 제2 컬럼의 시작에 있는 임의의 개방 목록에 일치될 수 있다. 즉, 목록 레벨들 중 일부는 변하는 한편, 다른 것들은 동일하게 유지되는 것이긴 하지만, 목록 레벨들의 순서는 맞춰보는 과정 전체에서 유지되어야 한다.
2개의 목록이 일치하는지를 결정하기 위해, 일부 실시예들은 레이블 생성 함수를 이용하여 제1 컬럼으로부터 개방 종료 상태 목록의 다음 목록 항목을 생성한 다음, 이것이 제2 컬럼으로부터의 개방 시작 상태 목록의 제1 목록 항목의 레이블과 일치하는지를 확인한다. 제1 컬럼 내의 목록들 각각에 대하여 일치가 존재하는지를 결정한 후, 일부 실시예들은 임의의 요구되는 목록 레벨 변경이 단조성 요구조건을 위반할지를 결정한다.
2개의 컬럼 사이에 유효한 일치(또는 일치들의 집합)가 존재하는 경우, 프로세스는 2개의 컬럼에 걸쳐 일치된 목록들을 조합한다 (블록(1440)에서). 2개의 컬럼 간에 하나보다 많은 유효한 일치 또는 일치들의 집합이 존재하는 예상 밖의 경우에서, 일부 실시예들은 들여쓰기들(예를 들어, 컬럼의 왼쪽 에지로부터 목록 스페이서까지의 거리)을 비교하여, 유효한 일치들 중 어느 것이 최상의 것인지를 결정한다 (동일한 들여쓰기를 갖는 목록들에 우선순위를 두고서).
그 다음, 프로세스(1400)는 다음 컬럼을 선택된 컬럼으로 설정한다 (블록(1445)에서). 일부 실시예들은 또한 이전에 선택된 컬럼을 다음 컬럼의 일부분으로서 포함한다. 따라서, 이전에 선택된 컬럼 내의 임의의 개방 종료 목록들이 일치를 찾지 못하고, 더 낮은 레벨의 개방 종료 목록들의 일치로 인해 폐쇄되지 않은 경우, 프로세스는 다음 컬럼 내에서 일치를 찾아볼 수 있다. 일부 실시예들에서, 프로세스는 이전에 선택된 컬럼을 다음 컬럼에 연쇄시키고, 그에 따라, 목록들이 복수의 컬럼에 걸쳐지는 것을 가능하게 한다 (예를 들어, 특정 목록 내의 제1 목록 항목이 제1 컬럼 내에 있고, 그 목록 내의 제2 항목이 제3 컬럼까지 나타나지 않는 경우).
프로세스는 새롭게 선택된 컬럼 이후에 임의의 추가의 컬럼들이 존재하는지를 결정한다 (블록(1450)에서). 추가의 컬럼들이 남아있는 동안, 프로세스는 다음 컬럼과의 일치를 확인하기 위해 블록(1420)으로 되돌아간다. 더 이상의 컬럼이 남아있지 않은 경우, 프로세스는 컬럼들의 집합 내의 목록들 전부의 유효성을 검사한다 (블록(1455)에서). 일부 실시예들에서, 이것은 위에서 설명된 프로세스(800)의 동작(860)과 동일하다. 즉, 프로세스는 목록들 전부의 유효성을 검사하고, 임의의 자격없는 목록들을 제거하고, 저장된 목록들의 스택을 필요에 따라 수정한다. 그 다음, 프로세스(1400)는 종료한다.
도 15에서, 제2 컬럼(1510)의 가장 낮은 목록 레벨은 제1 컬럼(1505)의 두번째로 가장 낮은 목록 레벨과 일치하고 (즉, "C" 목록 항목이 "B" 목록 항목에 후속함), 제2 컬럼(1510)의 가장 높은 목록 레벨은 제1 컬럼(1505)의 가장 높은 목록 레벨과 일치한다 (즉, "ⅱ" 목록 항목이 "ⅰ" 목록 항목에 후속함). 제1 컬럼의 가장 낮은 레벨의 개방 목록(로마자 대문자)은 제2 컬럼 내에 일치를 갖지 않는다. 프로세스는 목록 항목들의 일치하는 알파벳들 및 연속적인 서수들에 기초하여 이러한 목록들을 쉽게 맞춰볼 수 있다.
도 16은 한 목록은 레벨이 변하는 한편 제2 목록은 동일 레벨로 유지되지만 단조성 요구조건은 보존되는 예를 도시한 것이다. 본 도면에서, 제2 컬럼(1610)은 레벨 0 및 레벨 1을 갖는 2개의 목록을 갖는다. 레벨 0의 로마자 대문자 목록은 제1 컬럼(1605)의 레벨 0의 로마자 대문자 목록과 일치하지만, 제2 컬럼(1610)의 레벨 1의 로마자 소문자 목록은 제1 컬럼의 개방된 레벨 2 로마자 소문자 목록과 일치한다.
위에서 설명된 바와 같이, 문서에 대해 목록들이 완전하게 재구성되면, 다양한 특징들이 가능하게 될 수 있다. 이러한 특징들은 추가의 목록 항목들의 자동 생성, 순차적인 항목들로의 하이퍼링크 및 기타 참조, 목록 항목들에 의한 검색 및 탐색 기능, 서식들 간의 복사 및 붙이기 등을 포함할 수 있다.
Ⅳ. 소프트웨어 아키텍처
일부 실시예들에서, 위에서 설명된 프로세스들은 컴퓨터 또는 핸드핼드형 장치와 같은 특정 머신 상에서 실행되거나, 컴퓨터 판독가능한 매체에 저장되는 소프트웨어로서 구현된다. 도 17은 일부 실시예들의 목록 재구성 모듈(1700)의 소프트웨어 아키텍처를 개념적으로 도시한 것이다. 일부 실시예들에서는 목록 재구성 모듈(1700)이 독립형 애플리케이션이거나 (예를 들어, 문서 재구성 애플리케이션의 일부분으로서) 애플리케이션 내에 통합되는 한편, 다른 실시예들에서는 애플리케이션이 운영 체제 내에서 구현될 수 있다. 또한, 일부 실시예들에서, 모듈은 서버 기반 솔루션의 일부분으로서 제공된다. 일부 그러한 실시예들에서, 모듈은 씬 클라이언트(thin client)를 통해 제공된다. 즉, 모듈은 (예를 들어, 서버 상에서 동작하는 애플리케이션의 일부분으로서) 서버 상에서 실행되는 한편, 사용자는 서버로부터 원격인 별개의 머신을 통해 애플리케이션과 상호작용한다. 다른 그러한 실시예들에서, 모듈은 씩 클라이언트(thick client)를 통해 제공된다. 즉, 모듈은 서버로부터 (예를 들어, 서버로부터 배포된 애플리케이션의 일부로서) 클라이언트 머신에 배포되고, 그 클라이언트 머신 상에서 실행된다.
목록 재구성 모듈(1700)은 목록 스페이서 식별기(1705), 목록 레벨 식별기(1710), 목록 재구성자(1715), 크로스-컬럼 매처(cross-column matcher)(1720), 목록 유효성 검사기(list validator)(1722), 및 목록 템플릿 함수들(1740)을 포함한다. 또한, 목록 재구성 모듈(1700)은 문서 저장소(1745), 보류 목록들의 스택을 위한 저장소(1750), 및 템플릿 정의들(1755)을 이용한다. 문서 저장소(1745)는 목록 재구성 모듈(1700)이 목록들을 식별하고 재구성할 하나 이상의 문서에 관한 정보를 저장한다. 이 정보는 이러한 문서 개체들의 경계를 포함하여, 컬럼 및 텍스트 라인 정보를 포함할 수 있다. 일부 실시예들에서, 문서 저장소(1745)는 위에서 참조에 의해 포함된 미국 특허 공개 제2010/0174985호에 설명된 것과 같은 문서 개체 모델을 저장한다. 보류 목록들의 스택을 위한 저장소(1750)는 목록 재구성 프로세스 동안, 가능한 목록들의 보류 스택을 저장한다. 일부 실시예들에서, 이 정보는 RAM 내에 저장된다. 템플릿 정의들은 알파벳들의 목록, 및 목록 템플릿 함수들(1740)이 필요로 하는 알파벳들에 관한 정보를 저장한다. 일부 실시예들에서, 문서 정보, 보류 스택 및 템플릿 정의들은 하나의 물리적 저장소 내에 저장된다. 다른 실시예들에서, 이 정보는 상이한 물리적 저장소들에 저장되는데, 예를 들어, 보류 목록은 RAM에 저장되는 한편, 문서 정보 및 템플릿 정의는 영구적인 저장소들에 저장될 수 있다. 또한, 저장소들 중 하나는 실제로 복수의 물리적 저장소에 걸쳐 분할될 수 있다 (예를 들어, 상이한 문서들이 상이한 디스크들 상에 저장될 수 있다).
목록 스페이서 식별기(1705)는 문서 정보(1745)를 이용하여 문서 내의 목록 스페이서들을 식별한다. 일부 실시예들에서, 목록 스페이서 식별기(1705)는 문서의 컬럼 내에서 잠재적인 분할 갭들을 식별하고, 스페이서들을 겹치는 분할 갭들의 수직 스트립들로서 어셈블링하고, 스페이서들이 목록 스페이서들에 대한 요구조건들을 만족시키는지를 결정한다.
목록 레벨 식별기(1710)는 목록 스페이서들 및 문서 정보(1745)를 이용하여, 목록 스페이서를 갖는 각각의 텍스트 라인에 대한 목록 레벨들을 식별한다. 위에서 설명된 바와 같이, 일부 실시예들은 텍스트 라인의 기준선의 왼쪽 에지에서 시작하고, 왼쪽 컬럼 에지와 그 포인트 사이에서 얼마나 많은 목록 스페이서들이 교차되는지를 결정한다. 이 개수가 텍스트 라인을 위한 목록 레벨이다.
목록 재구성기(1715)는 목록 스페이서 및 목록 레벨 정보, 및 문서 저장소(1745)로부터의 문서 정보(예를 들어, 텍스트 라인들 내의 단어들 및/또는 캐릭터들에 관한 정보)를 이용하여 컬럼 내에서 목록들을 재구성한다. 일부 실시예들에서, 목록 재구성기(1715)는 도 8에 도시된 프로세스(800)의 일부 또는 전부를 수행한다.
일부 실시예들의 목록 재구성기(1715)는 목록 템플릿 함수(1740)를 이용한다. 이들은 템플릿 식별기(1725), 레이블 렉서(1730), 및 레이블 생성기(1735)를 포함한다. 이러한 함수들 전부는 글머리 기호 또는 서수 타입, 및 그들의 알파벳을 포함하는 템플릿 정의들(1755)을 이용한다. 템플릿 식별기(1725)는 주어진 목록 레이블에 대한 템플릿을 식별한다. 템플릿 식별기는 목록 레이블의 캐릭터들을 검사하여 그것의 알파벳을 식별하고, 알파벳이 식별되고 나면, 목록 템플릿에 대한 접두사 및 접미사를 결정한다. 레이블 렉서(1730)는 레이블의 글머리 기호 또는 서수 부분을 입력으로서 취하고, 그 레이블에 의해 표현되는 항목 번호를 출력으로서 생성한다. 레이블 생성기(1735)는 본질적으로 레이블 렉서(1730)의 역 함수를 수행하여, 항목 번호 및 레이블 템플릿을 레이블로 변환한다.
크로스-컬럼 매처(1720)는 복수의 순서가 정해진 컬럼에 대하여 목록 재구성기(1715)의 출력을 이용하며, 컬럼들 간에서 목록들을 맞춰본다. 일부 실시예들에서, 위에서 설명된 것과 같이, 크로스-컬럼 매처는 개방 종료 상태를 갖는 제1 컬럼의 목록들과 개방 시작 상태를 갖는 후속 컬럼의 목록들 간에서 특정 기준에 맞는 일치들을 찾아본다. 이러한 일치들을 식별하기 위해, 크로스-컬럼 매처(1720)는 목록 템플릿 함수들(1740)을 이용한다.
목록 유효성 검사기(1722)는 크로스-컬럼 매처의 출력(목록들의 최종 집합)을 이용하고, 목록들의 유효성을 검사한다. 특정한 유효성 검사 기준에 맞지 않는 임의의 목록들은 목록들의 집합으로부터 제거되고, 임의의 중첩된 목록들이 필요에 따라 수정된다. 일부 실시예들에서, 이러한 기준은 각각의 목록이 적어도 2개의 항목을 가질 것을 명령하는 것을 포함한다.
특징들 중 다수가 하나의 모듈(예를 들어, 목록 재구성기(1715), 목록 스페이서 식별기(1705) 등)에 의해 수행되는 것으로서 설명되었지만, 본 기술분야에 통상의 지식을 가진 자는 여기에 설명된 함수들이 복수의 모듈로 분할될 수 있음을 인식할 것이다. 마찬가지로, 복수의 상이한 모듈에 의해 수행되는 것으로서 설명된 함수들이 일부 실시예들에서는 단일 모듈에 의해 수행될 수 있다 (예를 들어, 크로스-컬럼 매처(1720)는 목록 재구성기(1715)의 일부분일 수 있음).
Ⅴ. 전자 시스템
위에서 설명된 특징들 및 애플리케이션들 중 다수는 컴퓨터 판독가능한 저장 매체(컴퓨터 판독가능한 매체라고도 칭해짐)에 기록된 명령어들의 집합으로서 지정된 소프트웨어 프로세스들로서 구현된다. 이러한 명령어들이 하나 이상의 계산 또는 처리 유닛(들)(예를 들어, 하나 이상의 프로세서, 프로세서의 코어, 또는 기타 처리 유닛)에 의해 실행될 때, 그들은 처리 유닛(들)으로 하여금 명령어들에 나타난 액션들을 수행하게 한다. 컴퓨터 판독가능한 매체의 예들은, CD-ROM, 플래시 드라이브, RAM(random access memory) 칩들, 하드 드라이브들, EPROM(erasable programmable read only memory), EEPROM(electrically erasable programmable read-only memory) 등을 포함하지만 그에 한정되지 않는다. 컴퓨터 판독가능한 매체는 무선으로, 또는 유선 접속을 통해 전달되는 반송파 및 전자 신호들을 포함하지 않는다.
본 명세서에서, "소프트웨어"라는 용어는 프로세서에 의한 처리를 위해 메모리 내로 판독될 수 있는 자기 저장소 내에 저장된 애플리케이션들 또는 판독 전용 메모리 내에 상주하는 펌웨어를 포함하도록 의도된다. 또한, 일부 실시예들에서는, 다중 소프트웨어 발명들(multiple software inventions)이 개별 소프트웨어 발명들을 남겨두면서 더 큰 프로그램의 서브파트들로서 구현될 수 있다. 일부 실시예들에서, 다중 소프트웨어 발명들은 별개의 프로그램들로서도 구현될 수 있다. 마지막으로, 여기에 설명된 소프트웨어 발명을 함께 구현하는 별개의 프로그램들의 어떠한 조합도 본 발명의 범위 내에 있다. 일부 실시예들에서, 소프트웨어 프로그램들은, 하나 이상의 전자 시스템 상에서 동작하도록 설치될 때, 소프트웨어 프로그램들의 동작들을 실행하고 수행하는 하나 이상의 구체적인 머신 구현을 정의한다.
도 18은 본 발명의 일부 실시예들이 구현되는 전자 시스템(1800)을 개념적으로 도시한 것이다. 전자 시스템(1800)은 컴퓨터(예를 들어, 데스크탑 컴퓨터, 개인용 컴퓨터, 태블릿 컴퓨터 등), 전화기, PDA, 또는 임의의 다른 종류의 전자 장치일 수 있다. 그러한 전자 시스템은 다양한 타입의 컴퓨터 판독가능한 매체 및 다양한 다른 타입의 컴퓨터 판독가능한 매체를 위한 인터페이스들을 포함한다. 전자 시스템(1800)은 버스(1805), 처리 유닛(들)(1810), 그래픽 처리 유닛(GPU)(1815), 시스템 메모리(1820), 네트워크(1825), 판독 전용 메모리(1830), 영구적 저장 장치(1835), 입력 장치들(1840), 및 출력 장치들(1845)을 포함한다.
버스(1805)는 전자 시스템(1800)의 다수의 내부 장치들을 통신상 접속하는 모든 시스템, 주변장치 및 칩셋 버스들을 총괄하여 나타낸다. 예를 들어, 버스(1805)는 처리 유닛(들)(1810)을 판독 전용 메모리(1830), GPU(1815), 시스템 메모리(1820) 및 영구적 저장 장치(1835)와 통신상 접속한다.
이러한 다양한 메모리 유닛들로부터, 처리 유닛(들)(1810)은 본 발명의 프로세스들을 실행하기 위해 실행할 명령어들 및 처리할 데이터를 검색한다. 처리 유닛(들)은 상이한 실시예들에서, 단일 프로세서 또는 멀티코어 프로세서일 수 있다. 일부 명령어들은 GPU(1815)에 전달되고 그에 의해 실행된다. GPU(1815)는 처리 유닛(들)(1810)에 의해 제공되는 이미지 처리를 보완하거나 다양한 계산들을 오프로드할 수 있다. 일부 실시예들에서, 그러한 기능성은 CoreImage의 커널 쉐이딩 언어(kernel shading language)를 이용하여 제공될 수 있다.
판독 전용 메모리(ROM)(1830)는 처리 유닛(들)(1810) 및 전자 시스템의 다른 모듈들이 필요로 하는 정적 데이터 및 명령어들을 저장한다. 한편, 영구적 저장 장치(1835)는 판독-기입 메모리 장치이다. 이 장치는 전자 시스템(1800)이 오프 상태일 때도 명령어들 및 데이터를 저장하고 있는 비휘발성 메모리 유닛이다. 본 발명의 일부 실시예들은 영구적 저장 장치(1835)로서 대용량 저장 장치(예를 들어, 자기 또는 광학 디스크, 및 그에 대응하는 디스크 드라이브)를 이용한다.
다른 실시예들은 영구적 저장 장치로서 이동식 저장 장치(예를 들어, 플로피 디스크, 플래시 메모리 장치 등과 그에 대응하는 드라이브)를 이용한다. 영구적 저장 장치(1835)와 마찬가지로, 시스템 메모리(1820)는 판독-기입 메모리 장치이다. 그러나, 저장 장치(1835)와는 달리, 시스템 메모리(1820)는 랜덤 액세스 메모리와 같은 휘발성 판독-기입 메모리이다. 시스템 메모리(1820)는 프로세서가 런타임에서 필요로 하는 명령어들 및 데이터 중 일부를 저장한다. 일부 실시예들에서, 본 발명의 프로세스들은 시스템 메모리(1820), 영구적 저장 장치(1835) 및/또는 판독 전용 메모리(1830) 내에 저장된다. 예를 들어, 다양한 메모리 유닛들은 일부 실시예들에 따라 멀티미디어 클립들을 처리하기 위한 명령어들을 포함한다. 이러한 다양한 메모리 유닛들로부터, 처리 유닛(들)(1810)은 일부 실시예들의 프로세스들을 실행하기 위해 실행할 명령어들 및 처리할 데이터를 검색한다.
버스(1805)는 또한 입력 장치들(1840)과 출력 장치들(1845)에 접속된다. 입력 장치들(1840)은 사용자가 전자 시스템에 대하여 정보를 전달하고 커맨드들을 선택하는 것을 가능하게 한다. 입력 장치들(1840)은 영숫자 키보드 및 포인팅 장치들("커서 제어 장치들"이라고도 칭해짐), 카메라(예를 들어, 웹캠), 음성 커맨드들을 수신하기 위한 마이크로폰 또는 유사한 장치들 등을 포함한다. 출력 장치들(1845)은 전자 시스템에 의해 생성되는 이미지들을 디스플레이하거나, 다르게 데이터를 출력한다. 출력 장치들(1845)은 프린터, 및 CRT(cathode ray tubes) 또는 LCD(liquid crystal displays)와 같은 디스플레이 장치들과, 스피커 또는 유사한 오디오 출력 장치들을 포함한다. 일부 실시예들은 입력 및 출력 장치 둘 다로서 기능하는 터치스크린과 같은 장치들을 포함한다.
마지막으로, 도 18에 도시된 바와 같이, 버스(1805)는 전자 시스템(1800)을 네트워크 어댑터(도시되지 않음)를 통해 네트워크(1825)에 연결한다. 이러한 방식으로, 컴퓨터는 컴퓨터들의 네트워크(예를 들어, 근거리 네트워크("LAN"), 광역 네트워크("WAN") 또는 인트라넷), 또는 인터넷과 같은 네트워크들의 네트워크의 일부분일 수 있다. 전자 시스템(1800)의 일부 또는 모든 컴포넌트들이 본 발명과 관련하여 이용될 수 있다.
일부 실시예들은 마이크로프로세서, 머신 판독가능한 또는 컴퓨터 판독가능한 매체(대안적으로는, 컴퓨터 판독가능한 저장 매체, 머신 판독가능한 매체, 또는 머신 판독가능한 저장 매체라고 칭해짐) 내에 컴퓨터 프로그램 명령어들을 저장하는 메모리 및 저장소와 같은 전자 컴포넌트들을 포함한다. 그러한 컴퓨터 판독가능한 매체의 일부 예들은, RAM, ROM, CD-ROM(read-only compact discs), CD-R(recordable compact discs), CD-RW(rewritable compact discs), 판독 전용 DVD(digital versatile discs)(예를 들어, DVD-ROM, 듀얼-레이어 DVD-ROM), 다양한 기록가능한/재기입가능한 DVD(예를 들어, DVD-RAM, DVD-RW, DVD+RW 등), 플래시 메모리(예를 들어, SD 카드, 미니 SD 카드, 마이크로 SD 카드 등), 자기 및/또는 고체 상태 하드 드라이브, 판독 전용 및 기록가능한 Blu-Ray® 디스크, 초밀 광학 디스크(ultra density optical discs), 임의의 다른 광학 또는 자기 매체, 및 플로피 디스크를 포함한다. 컴퓨터 판독가능한 매체는 적어도 하나의 처리 유닛에 의해 실행될 수 있는 컴퓨터 프로그램을 저장할 수 있고, 다양한 동작들을 수행하기 위한 명령어들의 집합을 포함한다. 컴퓨터 프로그램들 또는 컴퓨터 코드의 예들은 컴파일러에 의해 생성되는 것과 같은 머신 코드, 및 컴퓨터, 전자 컴포넌트 또는 마이크로프로세서에 의해 해석기(interpreter)를 이용하여 실행되는 하이레벨 코드를 포함하는 파일들을 포함한다.
위의 논의가 주로 소프트웨어를 실행하는 마이크로프로세서 또는 멀티코어 프로세서들을 참조하지만, 일부 실시예들은 ASIC(application specific integrated circuits) 또는 FPGA(field programmable gate arrays)와 같은 하나 이상의 집적 회로에 의해 수행된다. 일부 실시예들에서, 그러한 집적 회로들은 회로 자체에 저장되는 명령어들을 실행한다. 또한, 일부 실시예들은 PLD(programmable logic devices), ROM 또는 RAM 장치들에 저장된 소프트웨어를 실행한다.
본 명세서 및 본 출원의 임의의 청구항들에서 이용될 때, "컴퓨터", "서버", "프로세서" 및 "메모리"라는 용어는 모두 전자 또는 기타 기술적 장치들을 참조하는 것이다. 이 용어들은 사람들, 또는 사람들의 그룹은 배제한다. 본 명세서를 위하여, "디스플레이(display)" 또는 "디스플레이하는(displaying)"은 전자 장치 상에 디스플레이하는 것을 의미한다. 본 명세서 및 본 출원의 임의의 청구항들에서 이용될 때, "컴퓨터 판독가능한 매체", "컴퓨터 판독가능한 매체들" 및 "기계 판독가능한 매체"라는 용어는 전적으로, 컴퓨터에 의해 판독될 수 있는 형태로 정보를 저장하는 유형의(tangible) 물리적 개체로 한정된다. 이 용어들은 임의의 무선 신호들, 유선 다운로드 신호들, 및 임의의 다른 수명이 짧은(ephemeral) 신호들은 배제한다.
본 발명이 다수의 구체적인 상세를 참조하여 설명되었지만, 본 기술분야에 통상의 지식을 가진 자는, 본 발명이 본 발명의 취지를 벗어나지 않고서 다른 구체적인 형태들로 구현될 수 있음을 인식할 것이다. 예를 들어, 여기에서의 설명은 텍스트가 왼쪽에서 오른쪽으로, 그리고 위에서 아래로 읽혀진다는 것을 가정한다. 본 기술분야의 통상의 지식을 가진 자는, 오른쪽에서 왼쪽으로, 및/또는 아래에서 위쪽으로 읽히는 텍스트(예를 들어, 오른쪽에서 왼쪽으로 읽는 언어(right-to-left languages))에 대해 유사한 프로세스들이 이용될 수 있음을 인식할 것이다. 또한, (도 2, 7, 8 및 14를 포함하는) 도면들 중 다수는 프로세스들을 개념적으로 도시하고 있다. 이러한 프로세스들의 구체적인 동작은 도시되고 설명된 정확한 순서로 수행되지 않을 수 있다. 구체적인 동작들은 하나의 연속적인 일련의 동작들로 수행되지 않을 수 있으며, 상이한 구체적인 동작들이 상이한 실시예들에서 수행될 수 있다. 또한, 프로세스는 수개의 서브-프로세스를 이용하여 구현되거나, 더 큰 마크로 프로세스의 일부로서 구현될 수 있다. 따라서, 본 기술분야에 통상의 지식을 가진 자는 본 발명이 앞의 예시적인 상세들에 의해 한정되어서는 안 되고, 오히려 첨부된 청구항들에 의해 정의되어야 함을 이해할 것이다.

Claims (21)

  1. 컴퓨터 판독가능한 매체로서,
    적어도 하나의 프로세서에 의해 실행될 때, 복수의 원시 요소(primitive elements)를 포함하는 문서를 분석하는 컴퓨터 프로그램을 저장하고 있고,
    상기 컴퓨터 프로그램은:
    원시 요소들의 집합의 위치 및 모양(appearance)에 기초하여 상기 원시 요소들의 집합이 문서 내의 암시적 목록(implicit list)을 포함함을 식별하는 명령어 집합;
    식별된 암시적 목록을 명시적 목록(explicit list)으로서 정의하는 명령어 집합; 및
    상기 명시적 목록을 상기 문서에 연관된 구조로서 저장하는 명령어 집합
    을 포함하는 컴퓨터 판독가능한 매체.
  2. 제1항에 있어서,
    상기 식별하는 명령어 집합은:
    상기 원시 요소들의 스페이싱(spacing), 정렬(alignment) 및 컨텐츠에 기초하여 잠재적인 목록 항목들을 식별하는 명령어 집합; 및
    상기 잠재적인 목록 항목들을 목록들로 분류(sort)하기 위해 상기 원시 요소들의 스페이싱, 정렬 및 컨텐츠를 이용하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  3. 제1항에 있어서,
    상기 식별하는 명령어 집합은:
    제1 컬럼 내의 제1 목록과 제2 컬럼 내의 제2 목록을 따로따로 식별하는 명령어 집합; 및
    상기 제1 목록 및 상기 제2 목록을 단일 목록의 일부분이라고 결정하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  4. 제3항에 있어서,
    상기 정의하는 명령어 집합은 상기 제1 목록 및 상기 제2 목록을 합치는(joining) 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  5. 제1항에 있어서,
    상기 문서는 PDF(portable document format) 문서이고, 상기 명시적 목록을 구조로서 저장하는 명령어 집합은:
    상기 문서를 위한 직렬화된 서식(serialized format)을 정의하는 명령어 집합; 및
    상기 명시적 목록을 직렬화된 문서 내의 구조로서 저장하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  6. 컴퓨터 판독가능한 매체로서,
    적어도 하나의 프로세서에 의해 실행될 때, 복수의 원시 요소를 포함하는 문서를 분석하는 컴퓨터 프로그램을 저장하고 있고,
    상기 컴퓨터 프로그램은:
    문서의 컬럼 내의 복수의 텍스트 라인의 특정한 특징들에 기초하여 상기 텍스트 라인들을 목록 항목들로서 식별하는 명령어 집합;
    상기 목록 항목들의 정렬, 스페이싱 및 컨텐츠에 기초하여, 상기 목록 항목들을 위한 계층적 레벨들을 식별하는 명령어 집합; 및
    상기 컬럼에 대해, 동일한 계층적 레벨을 갖는 목록 항목들이 동일한 목록 내에 있는, 계층적으로 조직된 목록들의 집합(hierarchically-organized set of lists)을 정의하는 명령어 집합
    을 포함하는 컴퓨터 판독가능한 매체.
  7. 제6항에 있어서,
    상기 복수의 텍스트 라인을 식별하는 명령어 집합은:
    상기 컬럼의 텍스트 라인들 내의 정렬된 갭들(aligned gaps)을 식별하는 명령어 집합; 및
    상기 정렬된 갭들 중 어느 것이 목록 항목 레이블과 목록 항목 간의 스페이싱을 나타내는지를 결정하는 명령어 집합
    을 포함하는 컴퓨터 판독가능한 매체.
  8. 제7항에 있어서,
    상기 원시 요소들은 복수의 문자모양(glyphs)을 포함하고,
    상기 정렬된 갭들을 식별하는 명령어 집합은:
    텍스트 라인 내에서 단어 내의 문자모양들 간의 갭들과 단어들 간의 갭들보다 큰 연속적인 문자모양들 간의 갭들을 식별하는 명령어 집합; 및
    상기 컬럼 내의 연속적인 텍스트 라인들 내에 정렬되는 갭들의 집합들을 식별하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  9. 제7항에 있어서,
    상기 정렬된 갭들 중 어느 것이 스페이싱을 나타내는지를 결정하는 명령어 집합은 단일의 짧은 단어(single short word)를 왼쪽에 갖고, 왼쪽 정렬된 텍스트(left-aligned text)를 오른쪽에 갖는 갭들을 식별하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  10. 제7항에 있어서,
    상기 목록 항목들을 위한 계층적 레벨들을 식별하는 명령어 집합은:
    목록 항목 레이블과 목록 항목 간의 스페이싱을 나타내는 갭을 갖는 각각의 텍스트 라인에 대하여, 상기 목록 항목 레이블의 왼쪽에 있는 갭들의 개수를 결정하는 명령어 집합; 및
    텍스트 라인에 대한 상기 목록 항목 레이블의 왼쪽에 있는 갭들의 개수에 기초하여, 상기 텍스트 라인들 각각을 계층적 레벨에 할당하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  11. 제6항에 있어서,
    상기 계층적으로 조직된 목록들의 집합을 정의하는 명령어 집합은, 추가의 목록 항목들이 추가될 수 있는 목록들에 관한 정보를 저장하는 보류(pending) 목록들의 스택을 생성하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  12. 제11항에 있어서,
    상기 계층적으로 조직된 목록들의 집합을 정의하는 명령어 집합은, 반복적으로,
    상기 컬럼으로부터 텍스트 라인을 선택하는 명령어 집합; 및
    선택된 텍스트 라인을 상기 목록들의 집합 내의 목록에 할당하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  13. 제12항에 있어서,
    상기 선택된 텍스트 라인을 목록에 할당하는 명령어 집합은:
    상기 텍스트 라인 내의 목록 항목 레이블에 기초하여 상기 텍스트 라인을 위한 목록 타입을 식별하는 명령어 집합;
    식별된 목록 타입의 목록이 보류 목록들의 스택에서 보류 중인지를 결정하는 명령어 집합;
    식별된 목록 타입의 목록이 보류 중일 때, 상기 텍스트 라인을 보류 목록 내의 목록 항목으로서 할당하는 명령어 집합; 및
    식별된 목록 타입의 어떤 목록도 보류 중이지 않을 때, 상기 텍스트 라인을 갖는 새로운 목록을 보류 목록들의 스택에 목록 항목으로서 추가하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  14. 제13항에 있어서,
    상기 목록 타입은 다른 목록들에 대한 들여쓰기(indentation) 레벨, 및 상기 목록 항목 레이블에 대하여 이용되는 알파벳을 나타내는 컴퓨터 판독가능한 매체.
  15. 제14항에 있어서,
    상기 식별된 목록 타입의 목록이 보류 중인지를 결정하는 명령어 집합은:
    상기 스택 내의 임의의 보류 목록들이 동일한 들여쓰기 레벨 및 동일한 알파벳을 갖는지를 결정하는 명령어 집합; 및
    상기 목록 항목 레이블이 상기 알파벳에 따라 상기 보류 목록 내의 다음 목록 항목과 일치하는지를 결정하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  16. 제13항에 있어서,
    상기 새로운 목록을 상기 보류 목록들의 스택에 추가하는 명령어 집합은 상기 계층적으로 조직된 목록들의 집합 내의 상기 새로운 목록보다 높은 레벨에 있는 임의의 목록들을 상기 보류 목록들의 스택으로부터 제거하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  17. 제13항에 있어서,
    상기 텍스트 라인을 보류 목록 내의 목록 항목으로서 할당하는 명령어 집합은 상기 계층적으로 조직된 목록들의 집합 내의 상기 보류 목록보다 높은 레벨에 있는 임의의 목록들을 상기 보류 목록들의 스택으로부터 제거하는 명령어 집합을 포함하는 컴퓨터 판독가능한 매체.
  18. 복수의 원시 요소를 포함하는 문서를 분석하기 위한 방법으로서,
    문서 내에서, 제1 컬럼 내의 계층적으로 조직된 목록들의 제1 집합, 및 상기 제1 컬럼에 후속하는 제2 컬럼 내의 계층적으로 조직된 목록들의 제2 집합을 식별하는 단계;
    상기 계층적으로 조직된 목록들의 제1 집합 내의 제1 목록이 상기 계층적으로 조직된 목록들의 제2 집합 내의 제2 목록으로서 계속됨을 결정하는 단계; 및
    상기 제1 목록 및 상기 제2 목록을 상기 문서와 연관된 단일의 목록 구조로서 저장하는 단계
    를 포함하는 방법.
  19. 제18항에 있어서,
    상기 제1 집합 내의 제1 목록이 상기 제2 집합 내의 제2 목록으로서 계속됨을 결정하는 단계는,
    상기 제1 목록이 개방 종료 상태(open end state)를 갖고, 상기 제2 목록이 개방 시작 상태(open start state)를 가짐을 결정하는 단계;
    상기 제1 목록 내의 목록 레이블들을 위해 이용되는 알파벳이 상기 제2 목록 내의 목록 레이블들에 대해 이용되는 것과 동일한 알파벳임을 결정하는 단계; 및
    상기 제2 목록 내의 제1 목록 항목의 헤더가 상기 알파벳에 따라 상기 제1 목록 내의 마지막 목록 항목의 헤더에 후속함을 결정하는 단계
    를 포함하는 방법.
  20. 제18항에 있어서,
    상기 계층적으로 조직된 목록들의 제1 집합 내의 제3 목록이 상기 계층적으로 조직된 목록들의 제2 집합 내의 제4 목록으로서 계속됨을 결정하는 단계를 더 포함하는 방법.
  21. 제20항에 있어서,
    상기 제1 목록의 레벨과 상기 제3 목록의 레벨 간의 관계는 상기 제2 목록의 레벨과 상기 제4 목록의 레벨 간의 관계와 동일한 방법.
KR1020120005230A 2011-01-18 2012-01-17 문서 내의 목록들의 재구성 KR101321309B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201161433951P 2011-01-18 2011-01-18
US201161433959P 2011-01-18 2011-01-18
US61/433,951 2011-01-18
US61/433,959 2011-01-18
US13/106,806 2011-05-12
US13/106,806 US8380753B2 (en) 2011-01-18 2011-05-12 Reconstruction of lists in a document

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020130091256A Division KR101394723B1 (ko) 2011-01-18 2013-07-31 문서 내의 목록들의 재구성

Publications (2)

Publication Number Publication Date
KR20120099578A true KR20120099578A (ko) 2012-09-11
KR101321309B1 KR101321309B1 (ko) 2013-10-29

Family

ID=45655141

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020120005230A KR101321309B1 (ko) 2011-01-18 2012-01-17 문서 내의 목록들의 재구성
KR1020130091256A KR101394723B1 (ko) 2011-01-18 2013-07-31 문서 내의 목록들의 재구성

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020130091256A KR101394723B1 (ko) 2011-01-18 2013-07-31 문서 내의 목록들의 재구성

Country Status (7)

Country Link
US (2) US8380753B2 (ko)
EP (1) EP2477124A1 (ko)
JP (2) JP5480920B2 (ko)
KR (2) KR101321309B1 (ko)
AU (1) AU2012200110B2 (ko)
TW (1) TWI472933B (ko)
WO (1) WO2012099803A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9251123B2 (en) * 2010-11-29 2016-02-02 Hewlett-Packard Development Company, L.P. Systems and methods for converting a PDF file
US8380753B2 (en) 2011-01-18 2013-02-19 Apple Inc. Reconstruction of lists in a document
AU2012282688B2 (en) 2011-07-11 2017-08-17 Paper Software LLC System and method for processing document
AU2012281166B2 (en) 2011-07-11 2017-08-24 Paper Software LLC System and method for processing document
CA2840228A1 (en) 2011-07-11 2013-01-17 Paper Software LLC System and method for searching a document
US10572578B2 (en) * 2011-07-11 2020-02-25 Paper Software LLC System and method for processing document
US10346516B2 (en) * 2013-02-27 2019-07-09 International Business Machines Corporation Readable structural text-based representation of activity flows
KR102147935B1 (ko) * 2013-08-29 2020-08-25 삼성전자주식회사 데이터 처리 방법 및 그 전자 장치
CN107704468A (zh) * 2016-08-08 2018-02-16 广州市动景计算机科技有限公司 页面显示方法、装置和客户端设备
KR101880508B1 (ko) * 2017-04-27 2018-07-20 주식회사 한글과컴퓨터 웹 문서에서 목록 생성을 지원하는 웹 문서 편집 지원 장치 및 방법
CN109871743B (zh) * 2018-12-29 2021-01-12 口碑(上海)信息技术有限公司 文本数据的定位方法及装置、存储介质、终端
US11140112B1 (en) * 2020-06-29 2021-10-05 Unify Patente Gmbh & Co. Kg Method of generating a thread for discussion amongst a plurality of participants in a group conversation and real-time communication and collaboration platform
US20220335240A1 (en) * 2021-04-15 2022-10-20 Microsoft Technology Licensing, Llc Inferring Structure Information from Table Images
AU2023210531B1 (en) * 2023-07-31 2023-11-16 Canva Pty Ltd Systems and methods for processing designs

Family Cites Families (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6346565A (ja) * 1986-08-13 1988-02-27 Nec Corp 目次生成処理方式
JP2855797B2 (ja) 1990-06-15 1999-02-10 富士ゼロックス株式会社 文書処理装置
US5335290A (en) 1992-04-06 1994-08-02 Ricoh Corporation Segmentation of text, picture and lines of a document image
US5680479A (en) 1992-04-24 1997-10-21 Canon Kabushiki Kaisha Method and apparatus for character recognition
JP2789971B2 (ja) 1992-10-27 1998-08-27 富士ゼロックス株式会社 表認識装置
JPH06214983A (ja) * 1993-01-20 1994-08-05 Kokusai Denshin Denwa Co Ltd <Kdd> 文書画像の論理構造化文書への変換方法および装置
JP3302147B2 (ja) 1993-05-12 2002-07-15 株式会社リコー 文書画像処理方法
NL9301004A (nl) 1993-06-11 1995-01-02 Oce Nederland Bv Inrichting voor het bewerken en reproduceren van digitale beeldinformatie.
JP2618832B2 (ja) 1994-06-16 1997-06-11 日本アイ・ビー・エム株式会社 文書の論理構造の解析方法及びシステム
US5555556A (en) 1994-09-30 1996-09-10 Xerox Corporation Method and apparatus for document segmentation by background analysis
US5987171A (en) 1994-11-10 1999-11-16 Canon Kabushiki Kaisha Page analysis system
US5689585A (en) 1995-04-28 1997-11-18 Xerox Corporation Method for aligning a text image to a transcription of the image
US5848186A (en) 1995-08-11 1998-12-08 Canon Kabushiki Kaisha Feature extraction system for identifying text within a table image
JPH0969101A (ja) 1995-08-31 1997-03-11 Hitachi Ltd 構造化文書生成方法および装置
US5892842A (en) 1995-12-14 1999-04-06 Xerox Corporation Automatic method of identifying sentence boundaries in a document image
US5841900A (en) 1996-01-11 1998-11-24 Xerox Corporation Method for graph-based table recognition
US5784487A (en) 1996-05-23 1998-07-21 Xerox Corporation System for document layout analysis
US5956737A (en) 1996-09-09 1999-09-21 Design Intelligence, Inc. Design engine for fitting content to a medium
US6175844B1 (en) 1997-05-29 2001-01-16 Adobe Systems Incorporated Ordering groups of text in an image
US6687404B1 (en) 1997-06-20 2004-02-03 Xerox Corporation Automatic training of layout parameters in a 2D image model
US6562077B2 (en) 1997-11-14 2003-05-13 Xerox Corporation Sorting image segments into clusters based on a distance measurement
US6173073B1 (en) 1998-01-05 2001-01-09 Canon Kabushiki Kaisha System for analyzing table images
JP3940491B2 (ja) 1998-02-27 2007-07-04 株式会社東芝 文書処理装置および文書処理方法
US6377704B1 (en) 1998-04-30 2002-04-23 Xerox Corporation Method for inset detection in document layout analysis
JP2001101164A (ja) 1999-09-29 2001-04-13 Toshiba Corp 文書画像処理装置及び文書画像処理方法
US7249318B1 (en) 1999-11-08 2007-07-24 Adobe Systems Incorporated Style sheet generation
US6910182B2 (en) 2000-01-31 2005-06-21 Xmlcities, Inc. Method and apparatus for generating structured documents for various presentations and the uses thereof
US6757870B1 (en) 2000-03-22 2004-06-29 Hewlett-Packard Development Company, L.P. Automatic table detection method and system
US8230323B2 (en) 2000-12-06 2012-07-24 Sra International, Inc. Content distribution system and method
JP2002178811A (ja) 2000-12-14 2002-06-26 Takata Corp 子供用座席装置
US20030004971A1 (en) * 2001-06-29 2003-01-02 Gong Wen G. Automatic generation of data models and accompanying user interfaces
US6801673B2 (en) 2001-10-09 2004-10-05 Hewlett-Packard Development Company, L.P. Section extraction tool for PDF documents
JP2003288334A (ja) 2002-03-28 2003-10-10 Toshiba Corp 文書処理装置及び文書処理方法
US7142728B2 (en) * 2002-05-17 2006-11-28 Science Applications International Corporation Method and system for extracting information from a document
US20040006742A1 (en) 2002-05-20 2004-01-08 Slocombe David N. Document structure identifier
US7191186B1 (en) * 2002-11-27 2007-03-13 Microsoft Corporation Method and computer-readable medium for importing and exporting hierarchically structured data
US7272258B2 (en) 2003-01-29 2007-09-18 Ricoh Co., Ltd. Reformatting documents using document analysis information
US7313754B2 (en) 2003-03-14 2007-12-25 Texterity, Inc. Method and expert system for deducing document structure in document conversion
US7305612B2 (en) 2003-03-31 2007-12-04 Siemens Corporate Research, Inc. Systems and methods for automatic form segmentation for raster-based passive electronic documents
US7890852B2 (en) 2003-06-26 2011-02-15 International Business Machines Corporation Rich text handling for a web application
JP2005149269A (ja) 2003-11-18 2005-06-09 Hitachi Systems & Services Ltd 構造化文書の処理システム
JP4012140B2 (ja) 2003-11-20 2007-11-21 キヤノン株式会社 画像処理装置、情報処理装置及びそれらの制御方法、プログラム
US7386789B2 (en) 2004-02-27 2008-06-10 Hewlett-Packard Development Company, L.P. Method for determining logical components of a document
KR100747879B1 (ko) 2004-06-10 2007-08-08 캐논 가부시끼가이샤 화상 처리 장치, 제어 방법 및 기록 매체
US7558792B2 (en) 2004-06-29 2009-07-07 Palo Alto Research Center Incorporated Automatic extraction of human-readable lists from structured documents
JP2006134036A (ja) * 2004-11-05 2006-05-25 Matsushita Electric Ind Co Ltd スライド構造化装置
US7693848B2 (en) 2005-01-10 2010-04-06 Xerox Corporation Method and apparatus for structuring documents based on layout, content and collection
US8245131B2 (en) 2005-02-10 2012-08-14 Hewlett-Packard Development Company, L.P. Constraining layout variations for accommodating variable content in electronic documents
US8302002B2 (en) 2005-04-27 2012-10-30 Xerox Corporation Structuring document based on table of contents
US7392473B2 (en) 2005-05-26 2008-06-24 Xerox Corporation Method and apparatus for determining logical document structure
US7555711B2 (en) 2005-06-24 2009-06-30 Hewlett-Packard Development Company, L.P. Generating a text layout boundary from a text block in an electronic document
DE602005002473T2 (de) 2005-07-01 2008-01-10 Pdflib Gmbh Verfahren zum Erkennen von semantischen Einheiten in einem elektronischen Dokument
GB2428114A (en) 2005-07-08 2007-01-17 William Alan Hollingsworth Data Format Conversion System
US7613996B2 (en) 2005-08-15 2009-11-03 Microsoft Corporation Enabling selection of an inferred schema part
US8307275B2 (en) * 2005-12-08 2012-11-06 International Business Machines Corporation Document-based information and uniform resource locator (URL) management
US7623710B2 (en) 2006-02-14 2009-11-24 Microsoft Corporation Document content and structure conversion
CN101055578A (zh) * 2006-04-12 2007-10-17 龙搜(北京)科技有限公司 基于规则的文档内容挖掘器
US7603351B2 (en) 2006-04-19 2009-10-13 Apple Inc. Semantic reconstruction
US7756333B2 (en) 2006-04-26 2010-07-13 Microsoft Corporation Document layout verification
JP2008097436A (ja) 2006-10-13 2008-04-24 Canon Inc 構造化文書構造自動解析および構造自動再構築装置
US8504553B2 (en) 2007-04-19 2013-08-06 Barnesandnoble.Com Llc Unstructured and semistructured document processing and searching
US8996682B2 (en) * 2007-10-12 2015-03-31 Microsoft Technology Licensing, Llc Automatically instrumenting a set of web documents
JP2009110500A (ja) 2007-10-29 2009-05-21 Toshiba Corp ドキュメント処理装置、ドキュメント処理方法、ドキュメント処理装置のプログラム
RU2007141666A (ru) 2007-11-13 2009-05-20 Николай Игоревич Докучаев (RU) Способ сбора, обработки и каталогизации целевой информации из неструктурированных источников
US20100145720A1 (en) 2008-12-05 2010-06-10 Bruce Reiner Method of extracting real-time structured data and performing data analysis and decision support in medical reporting
TW201025049A (en) * 2008-12-31 2010-07-01 Inventec Appliances Corp Method and system to integrate location information within file, and computer program product using the method thereof
US8438472B2 (en) 2009-01-02 2013-05-07 Apple Inc. Efficient data structures for parsing and analyzing a document
US8380753B2 (en) 2011-01-18 2013-02-19 Apple Inc. Reconstruction of lists in a document

Also Published As

Publication number Publication date
JP2012164305A (ja) 2012-08-30
KR101321309B1 (ko) 2013-10-29
AU2012200110A1 (en) 2012-08-02
TWI472933B (zh) 2015-02-11
AU2012200110B2 (en) 2013-05-16
US20120185491A1 (en) 2012-07-19
JP2014096171A (ja) 2014-05-22
JP5480920B2 (ja) 2014-04-23
US20130227406A1 (en) 2013-08-29
WO2012099803A1 (en) 2012-07-26
US8886676B2 (en) 2014-11-11
KR20130096686A (ko) 2013-08-30
EP2477124A1 (en) 2012-07-18
TW201250494A (en) 2012-12-16
US8380753B2 (en) 2013-02-19
JP5826299B2 (ja) 2015-12-02
KR101394723B1 (ko) 2014-05-15

Similar Documents

Publication Publication Date Title
KR101394723B1 (ko) 문서 내의 목록들의 재구성
US8442998B2 (en) Storage of a document using multiple representations
US9575945B2 (en) Efficient data structures for parsing and analyzing a document
US10360294B2 (en) Methods and systems for efficient and accurate text extraction from unstructured documents
AU2012207560A1 (en) Storage of a document using multiple representations
US7046847B2 (en) Document processing method, system and medium
US20150370781A1 (en) Extended-context-diverse repeats

Legal Events

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

Payment date: 20160921

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170919

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180918

Year of fee payment: 6