KR101681281B1 - 입력 방법 에디터에 대한 확장 프레임워크 - Google Patents

입력 방법 에디터에 대한 확장 프레임워크 Download PDF

Info

Publication number
KR101681281B1
KR101681281B1 KR1020127029136A KR20127029136A KR101681281B1 KR 101681281 B1 KR101681281 B1 KR 101681281B1 KR 1020127029136 A KR1020127029136 A KR 1020127029136A KR 20127029136 A KR20127029136 A KR 20127029136A KR 101681281 B1 KR101681281 B1 KR 101681281B1
Authority
KR
South Korea
Prior art keywords
script
user input
ime
candidates
engine
Prior art date
Application number
KR1020127029136A
Other languages
English (en)
Other versions
KR20130072209A (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 KR20130072209A publication Critical patent/KR20130072209A/ko
Application granted granted Critical
Publication of KR101681281B1 publication Critical patent/KR101681281B1/ko

Links

Images

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
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/02Input arrangements using manually operated switches, e.g. using keyboards or dials
    • G06F3/023Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
    • G06F3/0233Character input methods
    • G06F3/0237Character input methods using prediction or retrieval techniques
    • 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/14Tree-structured documents
    • G06F40/146Coding or compression of tree-structured data
    • 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/018Input/output arrangements for oriental characters
    • 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/02Input arrangements using manually operated switches, e.g. using keyboards or dials
    • G06F3/023Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
    • 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
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language
    • 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
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/454Multi-language systems; Localisation; Internationalisation
    • 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
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Document Processing Apparatus (AREA)
  • User Interface Of Digital Computer (AREA)
  • Machine Translation (AREA)

Abstract

본 발명에 개시된 구현은 IME들의 기능을 확장하기 위해 IME 확장 프레임워크를 제공한다. 일부 구현에서, IME의 사용자 인터페이스에서 사용자 입력이 수취되고, 스크립트 엔진에 제공된다. 스크립트는 스크립트 리포지토리 내에 전자식으로 저장된 복수의 스크립트 중에서 선택된다. 사용자 입력은 스크립트 엔진을 사용하여 스크립트를 통해 프로세싱되어서 하나 이상의 후보들을 생성하게 하고, 하나 이상의 후보들은 IME 엔진에 제공된다. 일부 구현에서, 스크립트 파일은 수취되어서, IME 시스템에서의 사용자 입력에 기초하여 하나 이상의 후보들을 생성하도록, IME 시스템에 의해 실행될 수 있다. 스크립트 파일은 중앙 레지스트리 내에 전자식으로 저장되고, 중앙 레지스트리는 복수의 스크립트들을 포함하고, 복수의 스크립트들은 사용자 디바이스 상에서 다운로드 및 인스톨될 수 있게 공표되고, 사용자 디바이스는 IME 시스템을 포함한다.

Description

입력 방법 에디터에 대한 확장 프레임워크{EXTENSION FRAMEWORK FOR INPUT METHOD EDITOR}
본 개시는 입력 방식들에 관한 것이다.
1개나 2개의 문자들이 대략적으로(roughly) 한 단어 또는 그 의미에 상응하는 표어 문자 스크립트(logographic script)를 사용하는 언어는 컴퓨터 키보드나 모바일 디바이스 키패드와 같은 표준 입력 디바이스 상에서 키들보다 많은 문자들을 가진다. 예를 들어, 중국어는 기본 병음 문자(basic pinyin character)와 오성(five tones)으로 규정된 수만개의 문자들을 포함한다. 이러한 다―대―일(many―to―one) 관련 맵핑(mapping)은 입력 디바이스들 상에서 찾을 수 없는 문자나 심볼들을 입력 가능하게 하는 입력 방법들에 의해 구현될 수 있다. 따라서, 서양식 키보드나 모바일 디바이스는 중국어 문자들을 입력하는데 사용될 수 있다. 마찬가지로, 일본어, 한국어, 및 다른 언어들과 같이 표의 문자(ideogram)들을 포함하는 다수의 다른 언어들을 입력하는데, 서양식 키보드를 사용해 입력 방법들을 사용할 수 있다.
입력 방법 에디터(input method editor; IME)는 입력 방식을 실현하는데 사용될 수 있다. 예를 들어 중국어를 사용함에 있어서, 사용자는 하나 이상의 병음 문자들 또는 쿼리(query)들을 입력할 수 있고, 이는 IME에 의해 프로세싱되어 하나 이상의 중국어 문자 후보들(candidates)을 제공한다. 하나의 시나리오는 쿼리―대―후보들 맵핑 함수 f(query)〓candidates를 포함하고, 여기서 쿼리는 ASCII 키의 시퀀스를 포함하고, 후보들은 중국 또는 비중국 스트링들의 리스트를 포함한다.
다른 입력―대―출력 맵핑이 ASCII 쿼리들을 중국어 또는 비―중국어 후보들로 맵핑하는 경우에도, 이들 맵핑들은 기능적으로 제한된다.
본 명세서는 입력 방법 에디터들(input method editors)에 관한 기술들 및 특히 입력 방법 에디터들에 대한 확장 프레임워크(extension framework)를 기술한다.
일반적으로, 본 명세서에 기술된 주제 중 한 혁신적인 측면은, 입력 방법 에디터(IME)의 사용자 인터페이스에서 사용자 입력을 수취하고, 그 사용자 입력을 스크립트 엔진에 제공하고, 스크립트 리포지토리(script repository) 내에 전자식으로 저장된 복수의 스크립트들 중에서 스크립트를 선택하고, 스크립트 엔진을 사용하여 그 스크립트를 통해 사용자 입력을 프로세싱해서 하나 이상의 후보들을 생성하게 하고, 하나 이상의 후보들을 IME 엔진에 제공하는 동작들을 포함하는 방법으로 실시될 수 있다는 것이다.
일부 측면에서, 동작들은 샌드박스 프로세스(sandbox process)를 인스턴트화(instantiate)하는 것을 추가로 포함하고, 스크립트 엔진은 샌드박스 프로세스 내에서 실행된다.
일부 측면에서, IME 엔진은 프로세스간 통신을 사용하여 스크립트 엔진과 통신한다.
일부 측면에서, 동작들은 샌드박스 프로세스 내에서 IPC 서버를 실행시키는 것을 추가로 포함하고, IPC 서버는 IME 엔진과 스크립트 엔진 사이의 통신을 가능하게 한다.
일부 측면에서, 샌드박스 프로세스는 스크립트 엔진의 기능을 제한한다.
일부 측면에서, 사용자 입력은 스크립트와 그 스크립트에 의해 프로세싱되는 입력을 식별하는 입력 시퀀스를 포함한다.
일부 측면에서, 동작들은 사용자 입력을 하나 이상의 트리거 스트링들과 비교하고, 사용자 입력이 하나 이상의 트리거 스트링들 중 하나와 매칭되는지를 결정하고, 그 하나 이상의 트리거 스트링들 중 하나에 기초하여 스크립트를 선택하는 것을 추가로 포함한다.
일부 측면에서, 동작들은 확장 모드(extension mode)에서 IME의 입력 표시 작동을 수취하고, 그 입력 수취에 응답하여 확장 모드에서 IME를 작동하고, 확장 모드에서의 작동 시 모든 사용자 입력을 스크립트 엔진에 제공하는 것을 추가로 포함한다.
일부 측면에서, 스크립트를 통해 사용자 입력을 프로세싱하는 것은 웹―기반 서비스와의 네트워크 연결을 구축하고, 사용자 입력의 적어도 일부를 웹―기반 서비스에 제공하고, 웹―기반 서비스로부터 응답을 수취하는 동작들을 포함하고, 이 응답은 사용자 입력의 적어도 일부에 기초하여 생성되고, 하나 이상의 후보들은 이 응답을 포함한다. 일부 측면에서, 웹―기반 서비스는 맵 서비스, 서치 서비스, 번역 서비스 중 적어도 하나를 포함한다.
일부 측면에서, 동작들은 제1 세트의 후보들을 구비한 제1 후보 리스트를 생성하고, 스크립트 엔진을 사용하여 생성된 하나 이상의 후보들을 가지는 제2 세트의 후보들을 구비한 제2 후보 리스트를 생성하고, 제1 세트의 후보들 중 적어도 일부와 제2 세트의 후보들의 적어도 일부를 조합하여 제3 후보 리스트를 제공하고, 제3 후보 리스트를 사용자 디바이스 상에 디스플레이하는 것을 추가로 포함한다.
일부 측면에서, IME 엔진은 사용자 인터페이스 상에 디스플레이하기 위해 하나 이상의 후보들을 프로세싱한다.
일부 측면에서, 동작들은 하나 이상의 후보들 중 하나의 선택을 나타내는 제2 사용자 입력을 수취하고, 그 하나 이상의 후보들 중 하나를 사용자 디바이스 상에서 실행된 어플리케이션에 입력한다. 일부 측면에서, 어플리케이션은 워드 프로세싱 어플리케이션, 텍스트 편집 어플리케이션, 스프레드시트 어플리케이션, 이메일 어플리케이션, 프리젠테이션 어플리케이션 및 웹 브라우저 중 하나를 포함한다.
일부 측면에서, 스크립트 리포지토리 내에 전자식으로 저장된 각 스크립트는 승인된 복수의 루틴들 중에서 선택된 하나 이상의 루틴들을 구비한다.
일부 측면에서, 동작들은 스크립트의 스크립트 언어를 식별하는 것을 추가로 포함하고, 스크립트 엔진은 스크립트를 통해 사용자 입력을 프로세싱하기 위해 스크립트 언어에 상응하는 런타임을 인스턴스화한다.
일부 측면에서, 사용자 입력은 제1 언어로 제공된다. 일부 측면에서, 하나 이상의 후보들은 제1 언어로 제공된다. 다른 측면에서, 하나 이상의 후보들은 제2 언어로 제공된다. 다른 측면에서, 하나 이상의 후보들은 제1 언어와 제2 언어의 조합으로 제공된다. 일부 측면에서, 하나 이상의 후보들은 하나 이상의 심볼들을 포함한다.
일부 측면에서, 동작들은 입력을 수취하고, 그 입력에 응답하여 중앙 레지스트리(central registry) 내에 전자식으로 저장되고, 스크립트를 포함하는 사용 가능한 스크립트들의 리스트를 생성하고, 스크립트의 선택을 나타내는 제2 입력을 수취하고, 그 제2 입력에 응답하여 중앙 레지스트리로부터 스트립트를 검색하고, 스크립트 리포지토리에 스크립트를 저장하는 것을 추가로 포함한다.
본 명세서에 기술된 주제의 또다른 혁신적인 측면은, IME의 사용자 인터페이스에서 사용자 입력을 수취하고, 그 사용자 입력을 스크립트 엔진에 제공하고, 스크립트 리포지토리 내에 전자식으로 저장된 복수의 스크립트들 중에서 스크립트를 선택하고, 스크립트에 제공된 명령어(instruction)들에 기초하여 웹―기반 서비스와 네트워크 연결을 구축하고, 웹―기반 서비스에 사용자 입력의 적어도 일부를 제공하고, 웹―기반 서비스로부터 응답을 수취하고, 그 응답을 IME 엔진에 제공하여 사용자에게 디스플레이하는 동작을 포함하는 방법으로 실시될 수 있다는 것이다.
일부 측면에서, 웹―기반 서비스는 맵 서비스, 서치 서비스, 번역 서비스 중 적어도 하나를 포함한다. 일부 측면에서, 사용자 입력의 적어도 일부는 맵 서비스에 제공되고, 그 응답은 맵 서비스에 의해 생성되고 사용자 선택가능 하이퍼링크를 포함한다. 다른 측면에서, 사용자 입력의 적어도 일부는 검색어(search term)로 검색 서비스에 제공되고, 그 응답은 서치 서비스에 의해 생성되고 검색어에 기초하여 서치 서비스에 의해 생성된 하나 이상의 서치 결과들을 포함한다. 다른 측면에서, 사용자 입력의 적어도 일부는 번역 서비스에 제공되고, 제1 언어로 제공되고, 그 응답은 번역 서비스에 의해 생성되고 제2 언어로 제공된다.
일반적으로, 본 명세서에 기술된 주제 중 또다른 혁신적인 측면은, IME 시스템에 의해 실행되는 스크립트 파일을 수취하여, 사용자 입력에 기초한 하나 이상의 후보들을 IME 시스템에 생성하고, 복수의 스크립트들을 구비한 중앙 레지스트리 내에 이 스크립트 파일을 전자식으로 저장하고, IME 시스템을 구비한 사용자 디바이스 상에 다운로드 및 인스톨될 수 있는 복수의 스크립트들을 공표하는 동작을 포함하는 방법으로 실시될 수 있다는 것이다.
일부 측면에서, 복수 스크립트의 각 스크립트는 승인된 복수의 루틴들 중에서 선택된 하나 이상의 루틴들을 포함한다.
일부 측면에서, 복수의 스크립트들의 스크립트들은 JavaScipt, Lua 및 VBScript 중 하나로 작성된다.
일부 측면에서, 복수의 스크립트 중 적어도 하나의 스크립트는 하나 이상의 후보들을 디스플레이하기 위한 명령어들을 제공하는 관련 메타―데이터를 포함한다. 일부 측면에서, 명령어들은 후보 리스트의 하나 이상의 후보들을 디스플레이하기 위해 번호 시퀀스를 제공하는 것을 포함한다. 다른 측면에서, 명령어들은 후보 리스트의 하나 이상의 후보들을 디스플레이하기 위해 글자 시퀀스(letter sequence)를 제공하는 것을 포함한다.
본 명세서에 설명된 주제 중 하나 이상의 구현예들의 상세한 것은 첨부한 도면과 아래의 설명에 명시된다. 기타 특징들, 측면들, 그리고 주요 장점들은 설명, 도면들 및 청구 범위들로 명백해질 것이다. 또한, 본 명에서에 기설된 주제의 측면들은 상술한 바를 포함하고, 하나 이상의 조합으로 결합될 수 있다.
도 1은 여기에 기술된 시스템과 방법들을 구현하기 위해 사용될 수 있는 시스템의 일례를 나타내는 블록도이다.
도 2는 입력 방법 에디터(IME)의 일례를 나타내는 블록도이다.
도 3은 IME 확장 프레임워크의 일례를 나타내는 블록도이다.
도 4는 IME의 명령어 확장 모드에 대한 프로세스의 일례를 나타내는 흐름도이다.
도 5는 IME의 실행에 대한 프로세스의 일례를 나타내는 흐름도이다.
도 6a는 명령어 확장 모드에 상응하는 확장의 일례를 나타내는 도면이다.
도 6b는 도 6a의 확장에 기초한 출력의 일례를 나타내는 도면이다.
각종 도면에서의 동일한 참조 부호는 동일한 구성요소를 나타낸다.
§ 1.0 개요
본 명세서는 입력 방법 에디터들(input method editors; IMEs)에 대한 확장 프레임워크에 관한 기술들을 설명한다. 구현예들이 영어와 중국어의 문맥으로 설명될 것이지만, 본 발명은 다른 비―표어 문자 언어들(예를 들어, 독일어, 프랑스어, 이탈리아어, 스페인어, 포르투갈어, 스웨덴어 등을 포함) 및 표어 문자 언어들(예를 들어, 일본어, 한국어 및/또는 인도어)에도 쉽게 적용할 수 있다.
도 1은 여기에 기술된 시스템과 방법들을 구현하기 위해 사용될 수 있는 시스템(100)의 일례를 나타내는 블록도이다. 시스템(100)은 예를 들어 개인용 컴퓨터 디바이스와 같은 컴퓨터 디바이스, 또는 모바일폰, 모바일 통신 디바이스, PDA 등과 같은 다른 전자 디바이스들을 포함한다. 시스템(100)은 프로세싱 디바이스(102), 제1 데이터 스토어(104), 제2 데이터 스토어(106), 입력 디바이스들(108), 출력 디바이스(110), 및 네트워크 인터페이스(112)를 포함한다. 버스 시스템(114)은 예를 들어 데이터 버스, 마더보드를 포함하고, 구성요소들(102, 104, 106, 108, 110, 112)간 데이터 통신을 구축하고 제어하는데 사용된다. 다른 시스템 구성도 사용될 수 있다.
프로세싱 디바이스(102)는 예를 들어 하나 이상의 마이크로 프로세서들을 포함한다. 제1 데이터 스토어(104)는 예를 들어 동적 랜덤 액세스 메모리와 같은 랜덤 액세스 메모리 저장 디바이스나, 또는 다른 타입의 컴퓨터 판독가능 매체 메모리 디바이스를 포함한다. 제2 데이터 스토어(106)는 예를 들어 하나 이상의 하드 드라이브들, 플래시 메모리 및/또는 ROM(Read Only Memory)이나, 또는 다른 타입의 컴퓨터 판독가능 매체 메모리 디바이스들을 포함한다.
일례의 입력 디바이스들(108)은 키보드, 마우스, 스타일러스 등을 포함하고, 일례의 출력 디바이스들(110)은 디스플레이 디바이스, 오디오 디바이스 등을 포함한다. 네트워크 인터페이스(112)는 예를 들어 네트워크(116)와 통신 데이터를 송수신할 수 있게 하는 유선 또는 무선 네트워크 디바이스를 포함한다. 네트워크(116)는 하나 이상의 근거리 통신망(LAN) 및/또는 인터넷과 같은 광대역 통신망(WAN)을 포함한다.
일부 구현에서, 시스템(100)은 데이터 스토어(106)와 같은 데이터 저장부로부터의 IME 코드(101)를 포함한다. IME 코드(101)는 실행 시 프로세싱 디바이스(102)가 IME 기능을 수행할 수 있게 하는 명령어들을 포함한다. 예를 들어, IME 코드(101)는 웹 브라우저 환경에서 실행될 수 있는, 일례로 JavaScript 또는 ECMAScript 명령어들과 같은 스크립트 명령어들과 같은 해석형(interpreted) 명령어들을 포함할 수 있다. 또한, 다른 구현은 예를 들어 독립형 어플리케이션, 애플릿, 플러그인 모듈 등에도 사용될 수 있다.
IME 코드(101)의 실행은 IME 인스턴스(103)를 생성하거나 또는 개시(launch)한다. IME 인스턴스(103)는 시스템(100)이 한자(Hanzi character)와 같은 문자나 심볼 입력을 위한 합성 입력(composition input)을 수취하는 동안, 디바이스(100)에서 하나 이상의 입력 방법들의 프로세싱을 가능하게 한다. 일례로, 사용자는 하나 이상의 입력 디바이스들(108; 예를 들어 서양식 키보드와 같은 키보드, 필기 인식 엔진 등을 가지고 사용되는 스타일러스)을 사용하여, 한자들의 식별을 위한 합성 입력들을 입력한다. 일부 예에서, 한자는 하나 이상의 합성 입력들로 구성된다.
제1 데이터 스토어(104) 및/또는 제2 데이터 스토어(106)는 합성 입력들과 문자들의 관련성(association)을 저장할 수 있다. 사용자 입력에 기초하여, IME 인스턴스(103)는 제1 데이터 스토어(104) 및/또는 제2 데이터 스토어(106) 내의 정보를 사용하여, 입력이 나타내는 하나 이상의 후보 선택들을 식별한다. 일부 구현에서, 하나 이상의 후보 선택이 식별된 경우, 후보 선택들은 출력 디바이스(110) 상에 디스플레이된다. 사용자는 입력 디바이스(108)를 사용하여, 후보 선택으로부터 사용자가 입력하고자 하는 한자를 선택할 수 있다.
일부 구현에서, 시스템(100) 상에서 IME 인스턴스(103)는 하나 이상의 병음 합성 입력들을 수취하고, 그 합성 입력들을 한자로 변환할 수 있다. IME 인스턴스(103)는 예를 들어 한자들을 표현하기 위해 키 입력으로부터 수취된 병음 음절들 또는 문자들의 조합을 사용한다. 각 병음 음절은 예를 들어 서양식 키보드 중 하나 이상의 키 입력에 상응한다. 사용자는 병음 IME를 사용하여, 한자의 소리를 나타내는 하나 이상의 병음 음절들을 포함하는 합성 입력들을 사용하여 한자를 입력한다. 그러나 다른 언어에 대한 입력 방법도 용이하게 할 수 있다.
일부 구현에서, 시스템(100)에 액세스할 수 있는 원격 컴퓨팅 시스템(118)은 표어 문자 스크립트를 편집하는데에도 사용될 수 있다. 예를 들어, 시스템(100)은 네트워크(116)를 통해 표어 문자 스크립트 편집 기능을 제공하는 서버일 수 있다. 일례에서, 사용자는 예를 들어 클라이언트 컴퓨터와 같은 원격 컴퓨팅 시스템을 사용하여 제1 데이터 스토어(104) 및/또는 제2 데이터 스토어(106) 내에 저장된 표어 문자 스크립트를 편집할 수 있다. 일례의 시스템(100)은 문자를 선택할 수 있고, 네트워크 인터페이스(112)를 통해 사용자로부터 합성 입력을 수취한다. 일례의 프로세싱 디바이스(102)는 선택된 문자와 그와 유사한 하나 이상의 문자들을 식별하고, 수취된 합성 입력과 그와 유사한 문자들에 기초하여 하나 이상의 후보 선택들을 식별한다. 시스템(100)은 원격 컴퓨팅 시스템에 되돌려 줄 후보 선택들을 포함하는 데이터 통신을 전달한다.
일부 구현에서, IME 인스턴스(103)는 하나 이상의 합성 입력들 및 언어 문맥들(105)에 기초하여 후보 선택들을 식별한다. 일례의 언어 문맥들(105)은 IME 인스턴스(103)에 의해 지원된 다른 언어들(예를 들어 영어 문맥(105a), 중국어 문맥(105b), 한국어 문맥(105c) 등)을 규정한다. 일례의 IME 인스턴스(103)는 영어 문맥(105a)을 합성 입력들에 적용하여, 그 합성 입력들을 영어 알파벳에 맵핑한다. 마찬가지로, IME 인스턴스(103)는 중국어 문맥(205b)을 합성 입력들에 적용하여, 그 합성 입력들을 병음 입력 등에 맵핑한다.
IME 인스턴스(103)는 합성 입력 및 언어 문맥들(105)에 기초하여, 사용자의 선택을 위한, 하나 이상의 후보 선택들을 식별한다. 일부 구현에서, 언어 문맥들(105)은 예를 들어 단어를 규정하는 글자들인 영어로부터의 후보 선택들이 한자와 같은 중국어 문자들과 동시에 디스플레이되는 삽입형 디스플레이 모드(interleaved display mode)와 같이, 다른 언어에 의해 규정된 후보 선택들을 자동으로 제공하는데 활용된다. 일부 구현에서, 언어 문맥들(105)은 예를 들어 단어들을 규정하는 글자들인 영어만으로부터의 후보 선택들이 제1 세트의 문자들로 디스플레이되고, 한자들과 같은 중국어로부터의 후보 선택들이 제2 세트의 문자들로만 디스플레이되는 토글형 디스플레이 모드(toggled display mode)와 같이, 한 언어에 의해 규정된 후보 선택들을 자동으로 제공하는데 활용된다.
도 2는 IME 시스템(120)의 일례를 나타내는 블록도이다. 일례의 IME 시스템(120)은 IME 코드(101) 및 관련 데이터 스토어들(104 및 106)을 사용하여 구현된다. IME 시스템(120)은 IME 엔진(122), 문자 데이터 스토어(124), 합성 입력 데이터 스토어(126), 언어 모델 데이터 스토어(128), 및 확장 프레임워크(200)를 포함한다. 또한 다른 저장 구성도 사용될 수 있다. 문자 데이터 스토어(124)는 하나 이상의 언어 모델들에 사용된 표어 문자 스크립트의 문자들과, 예를 들어 영어, 독일어, 스페인어 등과 같은 로마―기반 또는 서양식 알파벳들로 된 문자들이나 단어들을 포함한다. 일부 구현에서, 문자 데이터 스토어(124)는 문자들간의 관계에 대한 정보도 포함한다. 일례의 문자 데이터 스토어(124)는 문자와 그와 유사한 문자에 따라 달라지는 문자에 할당된 스코어들이나 확률값들(probability values)을 포함한다. 또한 다른 문맥 관련 데이터도 사용된다. 이하에 보다 상세히 기술하는 바와 같이, 확장 프레임워크(200)는 IME 엔진(122)과 상호 작용하여, 임의의 쿼리―대―후보(들) 맵핑들을 지원한다.
합성 입력 데이터 스토어(126)는 문자 데이터 스토어(124) 내에 저장된 합성 입력들과 문자들의 관련성(association)을 포함한다. 일부 구현에서, 구성 데이터 스토어(126)는 IME 엔진(122)에 사용된 합성 입력에, 문자 데이터 스토어(124) 내의 문자들 각각을 링크한다. 일례의 IME 엔진(122)은 문자 데이터 스토어(124)와 그 문자 데이터 스토어(124) 내의 정보를 사용하여, 문자 데이터 스토어(124) 내 하나 이상의 문자들을, 합성 입력 데이터 스토어(126) 내의 하나 이상의 합성 입력들과 관련짓거나 및/또는 식별하게 한다.
언어 모델 데이터 스토어(128)는 영어 모델, 중국어 모델 등과 같은 하나 이상의 언어 모델들을 규정한다. 각 언어 모델은 예를 들어 그 언어 특유의 문법, 관용어구 세트들, 구문 등과 같은 특정 룰 세트를 규정하고, 한 세트의 합성 입력들을 입력하는데 있어서 사용자가 의도하고자 하는 바를 결정하는데 사용된다. 또한 각 언어 모델은 특정 사용자에 의해 빈번하게 사용된 구절과 단어 사전과 같은, 특정 사용자의 사용자 이력(user history)도 포함한다.
일부 구현에서, IME 엔진(122)은 예를 들어 영어 문맥(105a), 중국어 문맥(105b), 한국어 문맥(105c) 등과 같은 언어 문맥(105)에 따라 합성 입력들을 해석한다. 그 합성 입력들이 언어 문맥(105)에 따라 해석됐을 때, 언어 문맥값(107)이 결정된다. 그 언어 문맥값(107)과 합성 입력들에 기초하여, 후보 선택들이 사용자에게 선택을 위해 식별되어서 제시된다.
일례로 키 입력들과 같은 여러 합성 입력들은 IME 엔진(122)에 의해 수취된다. 키 입력들은 중국 문맥(105b) 내에서 일련의 병음 입력들을 규정하고, 영어 문맥(105a) 내 일련의 글자들을 규정한다. 따라서, 일례의 단어들과 같은 하나 이상의 영어 후보 선택들과, 예를 들어 한자와 같은 하나 이상의 중국어 후보 선택들이 사용자에게 선택되도록 제시된다.
일부 구현에서, 영어 문맥값(107a)은 합성 입력들을 영어 단어의 접두사와 비교하고, 그 비교에 기초하여 영어 문맥값을 설정함으로써 결정된다. 예를 들어, 합성 입력 o―p―p―o는 단어 "opportunity"의 문자 스트링들과 매칭된다. 영어 문맥값(107a)은 그 비교에 의해 식별된 접두사 매칭에 비례하여 설정되는데, 예를 들어 그 문맥값은 합성 입력 o―p에 대해서는 낮지만, 합성 입력 o―p―p―o―r―t―u에 대해서는 매우 높다.
또한 언어 문맥값(107)은 다른 프로세스들에 의해 결정될 수도 있다. 일례의 중국 문맥값(107b)은 중국어 모델에 대해 중국 문자들을 평가하고, 그 평가에 기초하여 중국 문맥값(107b)을 설정함으로써 결정된다. 일례의 중국어 모델은 중국어 문법 모델을 포함한다. 일례의 중국어 문법 모델들은 직렬 동사 구성 모델들, 완료형 및 비완료형(perfectives 및 imperfectives) 모델들, 그외 문법 모델들을 포함한다.
일례로 키 입력과 같은 합성 입력들에 기초하여, 일련의 병음 입력들이 식별된다. 병음 합성 입력들은 차례로, 한자들을 식별하는 데 사용된다. 중국어 문법 모델은 한자에 적용되어서, 중국어 문맥 내에서 사용자가 입력하고자 의도하는 바를 결정한다. 일례로, 합성 입력 스트링은 한자 내에서 모든 동사들이 매우 낮은 값으로 스코어화되는 결과가 되지만, 동사와 목적어는 보다 높은 값으로 스코어화되는 결과가 된다. 다른 예를 들자면, 합성 입력은 중국어 문자 스트링 내에서 "I love flowers"라고 읽혀지는 것이 보다 높은 중국어 문맥값(107b)을 받는 결과가 되고, "bed cow tv"라고 읽혀지는 것은 매우 낮은 중국어 문맥값(107b)을 받는 결과가 된다.
다른 프로세스들이 언어 문맥값(107)을 결정하는데 사용될 수 있다. 일례로, 특정 언어에서 자주 사용된 단어의 문맥값은 보다 낮은 값으로 책정되는 반면, 사용자 프로파일에 의해 규정된 것으로서 자주 사용된 단어나 구문들의 문맥값은 보다 높은 값으로 책정된다.
§ 2.0 확장 프레임워크
IME는 일반적으로 다음과 같이 제공되는 쿼리―대―후보(들) 맵핑 함수를 제공한다:
f(query)=candidate(s)
여기서 쿼리는 ASCII 키들의 시퀀스이다. 일례로서 중국어를 사용하면, 그 결과가 되는 후보들은 중국어 또는 비―중국어 스트링들의 리스트를 포함한다. 예를 들어 다음과 같다:
Figure 112012091108118-pct00001
이는 병음 IME의 기본 입력 모드인 병음―대―중국어 맵핑을 나타낸다.
다른 맵핑들은 ASCII 쿼리들을, 하나 이상의 후보들(예를 들어, 중국어 또는 비―중국어 후보들)에 대해 맵핑한다. 일례로서, IME는 영어 자동―완성 모드로 작동하여, 일부 단어 입력에 기초한 단어 후보들 리스트를 제공한다. 예를 들어 다음과 같다:
Figure 112012091108118-pct00002
다른 일례로서, IME는 중국어 숫자 입력 모드로 작동된다. 예를 들어 다음과 같다:
Figure 112012091108118-pct00003
본 발명에 개시된 IME 확장 프레임워크는 명령어 확장 모드("확장 모드"로 참조)를 제공함으로써 IME의 성능들을 확장시켜서, 다른 사용자의 요구 및/또는 선호를 만족시키기 위해, IME가 임의의 쿼리―대―후보(들) 맵핑을 지원할 수 있게 한다. IME 확장 프레임워크는 기초 맵핑 작동들의 하드―코딩을 필요로 하는 일 없이 상술한 바를 달성한다. 일반적으로, IME 확장 프레임워크는 스크립트 엔진, 샌드박스 프로세스, 스크립트 리포지토리, 프로세스간 통신(IPC) 메커니즘, 공개 어플리케이션 인터페이스(API), 및 콘솔 툴을 포함한다. 스크립트 엔진은 스크립트 언어 인터프리터(script language interpreter)의 런타임을 호스팅하여, 스크립트 리포지토리 내에 저장된 하나 이상의 스크립트들을 수행하고, 그 결과를 되돌려 준다. 샌드박스 프로세스들은 안전한 환경에서 스크립트 엔진을 실행한다. IPC 메커니즘은 IME 엔진과 샌드박스 프로세스들 사이의 통신을 가능하게 한다. 공개 API는 제3의 개발자들이 통일된 방식으로 IME 확장자들(IME extensions)을 작성할 수 있게 하고, 콘솔 툴은 그 개발자들이 생성된 확장 스크립트들을 테스트 및 확인할 수 있게 한다.
도 3은 IME 확장 프레임워크(200)의 일례를 나타내는 블록도이다. IME 확장 프레임워크(200)는 IME가 명령어 확장 모드에서 작동할 때 구현되고, 샌드박스 프로세스(202) 및 스크립트 리포지토리(204)를 포함한다. 샌드박스 프로세스(202)는 IPC 서버(206)와 스크립트 엔진(208)을 실행한다. IME 확장 프레임워크(200)는 IME 엔진(122)과 통신해서, 사용자 입력에 기초하여 스크립트―기반의 쿼리―대―후보(들) 맵핑을 제공하게 한다. 특히, 사용자는 하나 이상의 어플리케이션(220)들과 상호 작용할 수 있다. 각 어플리케이션(220)은 사용자 입력을 수취하고 사용자 입력에 기초하여 생성된 하나 이상의 후보들을 디스플레이하는 사용자 인터페이스(222)를 포함한다. 예를 들자면(한정되지 않음), 각 어플리케이션(220)은 워드 프로세싱 어플리케이션, 텍스트 편집 어플리케이션, 스프레드시트 어플리케이션, 이메일 어플리케이션, 프리젠테이션 어플리케이션, 및/또는 웹 브라우저를 포함한다.
IME 확장 프레임워크(200)에 의해 제공된 쿼리―대―후보(들) 맵핑들은 간단한 테이블 조회에 의해 구현될 수 있는 1대1 맵핑들을 포함한다. 또한 IME 확장 프레임워크(200)에 의해 제공된 맵핑들은 구현된 스크립트 언어에 기초한 보다 복잡한 쿼리―대―후보(들)도 포함한다. 일례의 스크립트―기반의 확장은 아래와 같이, 사용자 텍스트 입력을 수평 레이아웃으로부터 수직 레이아웃으로 변환하도록 제공된다:
Figure 112012091108118-pct00004
또한, IME 확장 프레임워크(200)는 네트워크(예를 들어, 도 1의 네트워크(116))를 통해 그 리소스(resource)들과 연결됨으로써 리소스들을 원격으로 액세스할 수 있게 한다. 예를 들어, 온라인 서비스 제공자(예: Google)에 의해 제공된 서비스들은 확장 스크립트 실행으로 이어진다. 이러한 방식으로, 확장 스크립트 특성들은 서비스 제공자의 서비스들에 액세스하여, 보다 유용한 입력 특성들을 구현하게 한다. 일례의 입력 특성들은 상세한 어드레스 스트링(예를 들어, 사용자가 선택할 수 있는 하이퍼 링크로서 제공)에 대한 Google 맵들을 쿼링하고, IME 사용자로 하여금 Google 서치하는데 가이딩하고, Google로부터 제안된 결과들을 검색하고, 및/또는 Google 번역기를 사용하여 다른 언어 및/또는 심볼들로 사용자 입력을 변한하는 것을 포함한다. IME 확장 프레임워크(200)는 C++ 코딩 후 컴파일링하는 것과는 대조적으로, 아래에 더욱 상세히 설명하는 바와 같이, 제3의 개발자들이 스크립트 프로그래밍을 사용하여 사용자 정의된(customized) 쿼리―대―후보(들)을 작성할 수 있게 하는 것을 추가로 포함한다.
확장 스크립트들은 제3자들에 의해 생성 및 테스트될 수 있다. 확장 스크립트들을 작동시키는 것은 IME 사용자들에게 유용하도록, 레지스터화 및 공표된다. 일례로, 사용자는 IME를 통해, 유용한 리스트(즉, 공표된 확장 스크립트들)를 요청할 수 있다. 일례로 IME는 네트워크를 통해 중앙 레지스트리(예를 들어, 도 1의 네트워크(116)를 통해 중앙 레지스트리(230))에 연결하고, 중앙 레지스트리는 공표된 확장 스크립트들을 저장한다. 사용자는 하나 이상의 확장 스크립트들을 선택하고, 선택된 확장 스크립트는 사용자 로컬 디바이스에 다운로드 및 인스톨되어서, 확장 모드에서 IME를 작동할 때 호출되게 한다. 확장 스크립트들은 스크립트 리포지토리(204) 내에 저장되어서, 시스템(100)의 디지털 메모리에 제공된다. 스크립트 리포지토리는 스크립트 엔진(208)이 로컬적으로 상응하는 스크립트를 로드 및 실행할 수 있게 한다. 사용자에 의해 인스톨된 모든 스크립트들은 스크립트 리포지토리(204) 내에 저장된다. 일부 구현에서, (예를 들어, 제3의 개발자들에 의해 유지되는) 하나 이상의 스크립트 호스트 웹 사이트들 각각은 스크립트 리포지토리를 원격으로 작동시키는데, 이는 사용자 디바이스로부터 원격으로 작동한다. 사용자 디바이스는 하나 이상의 스크립트 호스트 웹 사이트들을 액세할 수 있고, 특정 사이트로부터 유용한 스크립트 리스트들을 제공받고, 선택된 스크립트들을 스크립트 리포지토리(204)에 다운로드하도록 제공된다.
확장 모드에서 작동할 때, IME 확장 프레임워크(200)는 인스톨된 명령어 확장자들을 검색 및 실행하고, 하나 이상의 결과들을 IME 엔진에 제공하여 사용자에게 디스플레이하게 한다. 그 결과들은 표어 문자들, 비―표어 문자들, 숫자, 수학적 표현들, 하이퍼텍스트 링크들, 아이콘들, 이모티콘 및/또는 심볼들로 구성된다. 예를 들자면(한정되지 않음), 심볼들은 수학적 심볼들(예를 들어,
Figure 112012091108118-pct00005
등), 조디악 심볼들(예를 들어,
Figure 112012091108118-pct00006
등), 또는 그 외 타입의 심볼들(예를 들어,
Figure 112012091108118-pct00007
등)을 포함한다. 확장 모드는 명령어 확장 모드("i―ext 모드"로 참조), 트리거 확장 모드, 및 핸들러 확장 모드를 포함한다. 명령어 확장 모드에서, 확장 함수는 사용자가 특정 문자 시퀀스를 입력한 경우 호출된다. 문자 시퀀스의 일례는 아래에 더욱 상세히 설명하는 바와 같이, i+ 명령+ 인수(argument)를 포함한다. 트리거 확장 모드에서, 확장 함수는 입력 시퀀스, 또는 IME에 의해 생성된 후보들 중 하나가 사전―등록된 트리거 스트링 또는 패턴과 매칭된 경우 호출된다. 즉, IME는 입력 시퀀스에 기초하여 하나 이상의 후보들을 생성하고, 입력 시퀀스와 하나 이상의 후보들 모두는 사전―등록된 트리거 패턴과의 매칭을 결정하도록 검토된다. 핸들러 확장 모드에서, 모든 사용자 입력은 확장 함수로 이동되고, IME에 의해 디스플레이되는 모든 후보들은 확장 함수에 의해 생성된다. 이 모드에서, IME의 동작은 확장 스크립트에 의해 제어된다. 따라서, 사용자는 IME에 분명하게 명령하여(예를 들어 확장―등록된 핫키를 클릭하여), 핸들어 확장 모드에 진입하게 해서, 모든 사용자 입력을 확장 스크립트로 라우팅한다.
제3의 개발자들은 멀티―문자 명령어 이름, 입력 함수 이름, 짧은 설명을 제공하여, 명령어 확장 모드에서 사용할 수 있도록 확장 스크립트들을 등록한다. 제3의 개발자들은 트리거 확장 모드 내에서 사용하기 위해, 입력 함수 이름, 짧은 설명, 0 ~ N 트리거 스트링들/패턴들을 제공함으로써 확장 스크립트들을 등록하여 사용자 입력과 매칭하고, 0 ~ M 트리거 스트링들/패턴들을 등록하여 하나 이상의 IME 생성된 후보들과 매칭한다. 제3의 개발자들은 핸들러 확장 모드에서 사용하기 위해, 확장자, 입력 함수 이름, 짧은 설명, 및 작성자 핫키나 메뉴 아이템에 의해 핸들링된 입력 모드의 이름을 제공함으로써 확장 스크립트들을 등록하여, 사용자가 핸들러 확장 모드를 활성화할 수 있게 한다. 이러한 정보는 IME 사용자들이 다운로드 및 인스톨할 수 있도록 중앙 리포지토리 내에 저장된다.
확장 모드(즉, 명령, 트리거 및 핸들러 확장 모드들 중 하나)에서의 IME 작동은 아래에 더욱 상세히 설명한다.
§ 2.1 스크립트 엔진
스크립트 엔진은 스크립트 런타임 환경을 초기화하고, 내장 루틴들을 런타임에 등록하고, 스크립트 리포지토리로부터 스크립트들을 로딩하고, IME 코어 엔진의 요구가 있을 때마다 맵핑 함수를 평가한다. 다중 스크립트 언어들(예를 들어, JavaScipt, Lua 및 VBScript)은 병렬로 지원된다. 일례의 스크립트 엔진은 로딩된 스크립트의 파일 확장자(예를 들어, js. lua, vb)에 기초하여 상응하는 스크립트 런타임을 선택하고, 함수를 런타임에서 평가한다.
일부 구현에서, 스크립트 언어는 직접 내장되고, MS Windows 스크립트 엔진은 IActiveScript 인터페이스를 통해 사용된다. 이러한 구현에서, 추가 인스톨러 사이즈는 필요하지 않고, 2개 스크립트 언어들(예: JavaScript와 VBScript)은 추가적 수고 없이 지원되고, 사전―인스톨된 ActiveX 컨트롤이 활용된다. 일부 구현에서는 내장된 Lua 런타임 엔진이 제공된다. Lua 런타임 메모리이 필요로 하는 사항은 극히 작다(예를 들어, 약 50KB의 추가 인스톨러 메모리만 필요로 함). 또한, Lua 런타임은 트리밍화(trim) 및/또는 사용자 정의화(customized)되기가 용이하고, Lua 특성 및 내장 루틴들을 화이트―리스트화(white-listed)하기 쉽게 하여 보안 위험들을 피하게 한다. 일부 구현에서는 일례로 내장된 JavaScipt 엔진이 구현된다. JavaScipt는 웹 개발자들 사이에서 인기있는 스크립트 언어이고, JavaScipt 코드를 실행하는 경우 Windows 스크립트 엔진보다 빠르고, 트리밍화 또는 사용자 정의화가 가능하다.
내장형 Lua 런타임 엔진을 포함하는 구현에서, Lua 런타임 엔진은 다음과 같은 모듈 중 하나 이상을 포함한다: 렉사(lexer), 파서(parser), 가상 머신(virtual machine), 메모리 매니지먼트 및 가비지 컬렉션(garbage collection), 프리컴파일형 청크 덤프/언덤프(pre―compiled chunk dump/undump), Lua API, 디버그 서포트, 내장―루틴들. 내장 루틴들 모듈은 기본 라이브러리, 공동―런타임 루틴들, 모듈/패키지 루틴들, 스트링 라이브러리, 수학 라이브러리, 운영 시스템 라이브러리, 테이블 라이브러리, 입력/출력 라이브러리, 및/또는 디버그 라이브러리를 포함한다. 이러한 모듈들은 2진 사이즈를 최소화하거나 또는 보안 고려 사항을 위한 특성들의 화이트―리스트화와 루틴들의 내장화하기 위해 트리밍화되고 사용자 정의화된다. Lua 런타임을 사용자 정의화하는 목적 중 하나는 제3의 개발자들에 의해 사용될 수 있는 언어 특성들을 제한하고 루틴들을 내장화하는 것이다. 스트링 루틴, 수학 루틴, 테이블 루틴 및 IME―특정 루틴과 같은 전용 IME―관련 루틴들만을 가지고, 제3의 개발자들은 아래에 상세히 설명된 바와 같이, 샌드박스의 보호없이 사용자의 로컬 시스템에 직접적으로 영향을 끼칠 수는 없다.
일반적으로, IME 확장 프레임워크는 언어 독립적이다. 따라서, IME 확장 프레임워크는 모든 스크립트 언어를 지원할 수 있으며, 여기서 논의된 스크립트 언어들로 제한되지 않는다.
§ 2.2 샌드박스 프로세스
샌드박스는 프로그램 실행에 있어서 제한적 환경에 있고, 그 제한적 환경 내에서 실행하기 위해, 통상적으로 스크립트 엔진과 같이 프로세스들을 가능하게 하는 라이브러리에 통해 사용된다. 샌드박스화된 경우, 스크립트 엔진은 제한된 기능을 가진다. 일부 구현에서, 스크립트 엔진은 CPU 사이클들과 메모리만을 액세스한다. 이러한 구현에서, 샌드박스화된 스크립트 엔진은 예를 들어 디스크에 작성하거나 자신의 윈도우를 디스플레이할 수 없다. 샌드박스 프로세스에 대한 스크립트 실행을 구속함으로써, 제3의 스크립트들은 어플리케이션(들)으로부터 논리적으로 분리된다.
스크립트 엔진의 허용된 기능은 명시적 규칙에 의해 규제된다. 샌드박스는 특정 운영 시스템에 의해 제공된 보안에 영향을 끼쳐서, 컴퓨터에 대해 영구적 변경이 불가능하게 하는 코드 실행을 가능하게 하거나, 또는 기밀 정보를 액세스한다. 샌드박스가 제공하는 구조 및 확실한 보장은 운영 시스템에 따라 달라진다. 윈도우에서, 예를 들어 코드는 시스템 호출을 하지 않고는 모든 형식의 I/O를 수행할 수 없다. 대부분의 시스템 호출에서, 윈도우는 보안 검사를 수행한다. 샌드박스는 서버 프로세스가 상응하는 규칙에 규정된 수행에서 금지된 특정 동작들에 대해 보안 검사가 실패하게 한다.
일부 구현에서, 샌드박스는 토큰, 객체 및/또는 무결성(integrity) 레벨(이들로 제한되지는 않음)을 포함하는 운영 시스템 메커니즘들에 의해 제공된 보호에 의존한다. 이러한 메커니즘의 일례는 운영 시스템, 그 구성 및 사용자 데이터를 보호하는데 매우 효과적이다. 실질적 제한은 규칙에 의해 구성되고, 프로그래밍형 인터페이스인 스크립트 엔진의 제한 및 허용을 규정하기 위해 호출된다. 일부 구현에서, 제한을 제어하는 메커니즘의 일례로는 메인 토큰, 가장(impersonate) 토큰 및 잡(job) 토큰을 포함한다. 일부 구현(예를 들어, Windows Vista 운영 시스템을 포함하는 구현)에서는 무결성 레벨을 추가로 포함한다.
또다른 예로서, 구글에 의해 제공된 크롬 운영 시스템은 샌드박스 프로세스를 생성하기(예를 들어, 스크립트 엔진) 위해 제공된다. 크롬 운영 시스템은 토큰 제한, 잡 객체 및 API 차단을 사용하여 샌드박스 프로세스의 권한을 제한하고, 샌드박스 프로세스와 브로커 프로세스의 사이에 통신을 제공하기 위해 IPC와 같은 간단한 공유 메모리(예를 들어 IME 엔진)를 사용한다. 일례의 IME 엔진은 샌드박스 프로세스를 개시 및 초기화하는데 사용되는 자동―개시 IME 데몬 프로세스를 제공한다. 본 발명에 개시된 IME 확장 프레임워크를 위해, 간단한 샌드박스(예를 들어 API 차단을 사용하지 않고, 토큰 제한 및 잡 객체를 사용하여 스크립트 엔진의 권한을 제한하기 위한 샌드박스)가 구현될 수 있다. 또한, 샌드박스 프로세스 자체는 IPC에서 서버 역할을 한다.
상술한 바와 같이, 토큰 제한, 잡 객체 및 API 차단은 샌드박스 프로세스의 권한을 제한하기 위해 구현된다. 토큰 제한에 관해서, 프로세스(예를 들어, 스크립트 엔진)는 보안 식별자(Security IDentifier; SID)들의 일부 또는 전부가 제거된 토큰(예를 들어, 액세스 토큰)을 가지는 샌드박스 내에서 개시된다. 어떤 SID도 없다면, 객체들을 안전하게 하기 위한 액세스는 운영 시스템의 보안 관리자에 의해 거부될 것이다. 잡 객체에 관해서, 프로세스(예를 들어, 스크립트 엔진)는 프로세스의 성능들을 제한하는데 사용되는 잡 객체 내에서 실행된다. 특히, 제한은 토큰들을 변경하고, 잡 범위 밖으로 메시지들을 전달하고, 및/또는 새로운 데스크탑들을 생성함므로써 프로세스들을 방해하도록 잡 객체 상에 마련된다. API 차단은 안전이 보장되지 않은 리소스들에 대한 샌드박스형 프로세스의 액세스를 제어하는데 사용되고, 낮은 레벨의 API 호출을 차단해서 실패시키는데 사용된다.
IME 엔진의 자동 개시 데몬 프로세스는 샌드박스 프로세스를 개시 및 초기화하는데 사용된다. 이를 달성하기 위해, 데몬 프로세스는 제한된 토큰들을 만들고, 잡 객체를 생성하고, 성능들을 제한하고, 제한된 토큰으로 샌드박스 프로세스를 산란시키고(spawn), 그 샌드박스 프로세스를 잡 객체에 할당하고, 및/또는 새로운 프로세스의 주요 스레드(main thread)의 토큰을 보다 많은 권리를 가진 가장 토큰(impersonation token)으로 변경한다. IME 엔진은 확장 스크립트들을 로딩하고, 보다 많은 권리를 가진 가장 토큰과 함께 스크립트 엔진과 IPC 서버를 초기화한다.
§ 2.3 IME 샌드박스 프로세스의 사이에서의 통신
일부 구현에서, 상술한 바와 같이, IME 엔진과 샌드박스 프로세스의 사이에서의 통신은 IPC를 사용하여 구축된다. IPC는 하나 이상의 프로세스들에서 다중 스레드들간의 데이터 교환을 위한 한 세트의 기술들을 제공한다. IPC 방법 기술들은 원격 프로시져 호출(Remote Procedure Call: RPC)을 포함한다. RPC는 프로그램 어플리케이션을 호출하는 어드레스 스페이스와는 구별되는 다른 어드레스 스페이스 내에서 서브루틴 또는 프로시져가 실행 가능하게 한다.
일부 구현에서, IME 엔진은 간단한 공유 메모리 IPC를 사용하여, 샌드박스 내에 랩핑(wrap)된 스크립트 엔진과 통신한다. 일례로 알림 메커니즘(notification mechanism)은 운영 시스템 이벤트에 기초하여 구현되어서, 메시지 송수신을 처리하도록 한다. 이를 달성하기 위해, IPC는 더욱 간단한 IPC(예를 들어, 크롬 샌드박스 브로커―타겟 IPC보다 간단한 IPC)로 제공된다. 일례로, 샌드박스 내에 랩핑된 IPC 서버는 다중 태스크들을 지원하는데 필요하지 않다. IME 엔진과 샌드박스 프로세스의 사이에서 정보를 전송하는 경우 IPC 인터페이스는 데이터 포맷으로서 프로토콜 버퍼를 사용한다.
일부 구현에서, IPC는 C++ 템플릿 및 프로토콜 버퍼들을 사용하여, 임의의 요청과 응답 타입들을 지원한다. IPC 요청과 응답들의 일례는 다음을 포함한다:
Figure 112012091108118-pct00008
§ 2.4 공개 API
상술한 바와 같이, 공개 API는 제3의 개발자들이 통일된 방식으로 IME 확장자들을 작성할 수 있게 한다. Lua 스크립트 언어로 작성된 확장 스크립트는 예를 들어, 하나 이상의 쿼리―대―후보(들) 맵핑 함수들을 갖는다. 맵핑 함수의 일례는 다음을 포함한다:
Figure 112012091108118-pct00009
맵핑 함수는 확장자 명령어(extension command)로서 등록된다. 특히, 등록 함수는 여기서 추가로 상세히 설명하는 바와 같이, 명령어 확장자(command extension), 트리거 확장자(trigger extension) 또는 핸들러 확장자(handler extension)로서 제공되는 확장자(extensions)를 개발자가 등록할 수 있게 한다
명령어 확장자의 이름은 확장 모드인 경우 명령어 스트링 입력을 매칭하는데 사용되는 다중―문자 스트링(예를 들어 2-character 스트링)으로서 제공된다. 확장 모드를 사용하여 입력하는 인수는 함수 호출(예를 들어, Lua 함수 호출)의 인수 스트링으로서 전해진다(passed). 함수가 어떤 인수도 필요로 하지 않는 경우, 인수는 IME 엔진에 의해 무시된다. 즉, 사용자가 명령 후에 인수를 명확하게 입력한 경우에도, 인수를 요청하지 않는다면 함수는 인수를 무시한다. 일부 스크립트 언어들(예를 들어, Lua나 JavaScipt)에서, 함수가 인수를 가지고 있지 않는 것으로 규정되지만, 호출자는 무시될 일부 인수를 여전히 전한다. 사용자 입력이 확장 모드로 제공되지 않는 경우, 빈 스트링이 함수에 전해진다. 중복 확장자 명령어 이름은 스크립트 엔진에 의해 허용되지 않는다. 예를 들어, 제1 스크립트는 상응하여 등록된 확장자 명령어 이름을 가지고, 개발자가 동일한 명령어 이름을 사용하여 제2 스크립트를 등록하려고 하면, 이 함수는 거짓(false)을 돌려줄 것이다. 확장 기능의 반환값은 하나의 객체(예를 들어, 스트링이나 숫자)가 되거나, 또는 2개 이상의 객체들(예를 들어, 스트링 또는 번호)을 포함한 테이블이 될 수 있다. IME 엔진은 IME 프론트―엔드(front-end)에 의해 디스플레이되는 후보로서 각 객체의 스트링 수식을 사용한다.
§ 2.5 개발자 툴
상술한 바와 같이, 본 발명에 개시된 IME 확장 프레임워크는 제3의 개발자들이 IME에 사용할 확장 스크립트들을 생성 및 등록할 수 있게 하는 개발자 툴을 제공한다. 개발자 툴은 화이트―리스트화된(즉, 승인된) 루틴들을 포함한다. 사용 가능한 루틴들을 제한함으로써, 샌드박스의 보호 없이도 제3의 개발자들이 사용자의 로컬 시스템에 직접적으로 영향을 미치는 것을 제약할 수 있다. Lua―기반의 확장 스크립트들의 일례에서, 화이트―리스트화된 루틴들은 기본 루틴들(예를 들어 assert, error, ipairs, loadstring, next, pairs, select, tonumber, tostring, type, unpack)과, 스트링 루틴들(예를 들어, string.byte, string.char, string.find, string.format, string.gmatch, string.gsub, string.len, string.lower, string.match, string.rep, string.reverse, string.sub, string.upper)과, 날짜 시간 루틴들(예들 들어 os.date, os.time, os.difftime)과, 수학 루틴들(예를 들어, math.abs, math.acos, math.asin, math.atan, math.ceil, math.cosh, math.cosh, math.cos, math.deg, math.exp, math.floor, math.fmod, math.frexp, math.log, math.ldexp, math.log10, math.max, math.min, math.modf, math.pi, math.pow, math.rad, math.random, math.randomseed, math.sinh, math.sin, math.sqrt, math.tanh)과, 테이블/리스트 조작 루틴들(예를 들어, table.concat, table.insert, table.maxn, table.remove, table.sort)을 포함한다.
화이트―리스트화된 루틴들뿐만 아니라, 언어 IME 모듈은 추가 기능이 가능하게 제공된다. Lua 스크립트 언어의 일례로, Lua IME 모듈은 스크립트 엔진 내에서 실행되어서, IME 관련 함수들이나 다른 헬퍼(helper) 함수들을 제공한다. 상술한 다중 등록 함수들은 Lua IME 모듈에 의해 제공되어, 개발자들이 IME 확장 프레임워크에 확장자들(extensions)을 등록한다. 또한, Lua IME 모듈도 헬퍼 루틴들(예를 들어, ime.parse_mapping, ime.join_string)을 제공한다. 헬퍼 루틴은 용이하게 IME 확장을 구현하도록 개발자를 조력한다. 일례로, 다수 확장 스크립트들의 코드는 (예를 들어, 스트링 리터럴(string literal)을 맵핑으로 분할시키기 위해) 일부 공통 로직을 공유한다. 헬퍼 루틴들은 처음부터 확장자들(extensions)을 작성해야 하는 노력을 덜어줄 수 있다.
추가 루틴들은 C/C++로 루틴들을 구현하고, 이 루틴들을 Lua 런타임에 등록함으로써, 및/또는 Lua 그 자체에서 루틴들을 구현하고 스크립트를 초기 스크립트로서 로딩함으로써, Lua 런타임 내에 제공된다. C/C++ 함수를 Lua 런타임 내에 등록하기 위한 코드의 일례는 다음을 포함한다:
Figure 112012091108118-pct00010
Lua 그 자체로 IME 모듈 루틴들을 구현하기 위한 코드의 일례는 다음을 포함한다:
Figure 112012091108118-pct00011
C++에서, 다음의 코드 예는 Lua 그 자체로 구현된 루틴들을 로딩하는데 사용된다:
Figure 112012091108118-pct00012
일반적으로, 일부 스크립트 언어들(예를 들어, Lua)에 대해서, 사전―규정된 내장 루틴들은 언어 인터프리터가 구현된 언어로 구현된다. 이 작업을 단순화하기 위해, Lua 언어의 인터프리터를 가정하는 것은 C++로 구현되고, 제1 루틴도 C++로 구현되고, 제2 루틴은 Lua로 구현된다: Lua 인터프리터가 로딩된 경우, 제1 루틴이 네이티브 머신 코드(native machine code)이며, Lua 인터프리터와 함께 로딩된다. 제2 루틴은 Lua로 되어 있어서, 일반적인 Lua 스크립트가 로딩되지만, Lua에 의해 *내장 루틴들*로서 마크된다. 스크립트가 제1 루틴 다음에 제2 루틴을 호출한 경우, 제1 루틴이 이미 네이티브 머신 코드로 컴파일됐기 때문에, Lua 인터프리터는 추가 작동들없이 제1 루틴을 실행한다. 그러나 제2 루틴에 대해서, Lua 인터프리터는 먼저 그것이 정상 스크립트를 실행하는지 제2 루틴을 해석한 다음 실행해야 한다.
§ 2.6 연결 루틴
상술한 바와 같이, 본 발명에 개시된 IME 확장 프레임워크는 하나 이상의 온라인 서비스 제공자들에 의해 제공된 서비스들을 액세스할 수 있게 하여, 보다 유용한 입력 기능들을 구현한다. 특히, 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol: HTTP) 연결 루틴들을 포함하는 연결 루틴들은 스크립트 엔진에서 실행된 IME 모듈에 의해 제공되어서, 확장 스크립트들이 온라인 서비스 제공자들로부터 온라인 데이터를 가져올 수 있게 한다. 일부 API의 일례는 다음을 포함한다:
번역 서비스를 제공하는 ime.google_translate(text, from_language, to_language, callback), 서치 서비스를 제공하는 ime.google_search(query, parameters, callback)
결과를 되돌려 주기 위해 시간이 필요하기 때문에, 연결 루틴들은 비동기(asynchronous)이다. 확장 스크립트는 데이터 전달이 완료된 경우, 그 결과를 수취하도록 자신의 콜백 함수를 규정한다. 콜백 함수는 IME 엔진으로 하여금, API를 사용하여 후보들을 디스플레이하도록 한다. API의 일례는 다음을 포함한다: 서치 서비스의 결과를 디스플레이하는 ime.show_result(query_id, candidates). IME 엔진과 IME 프런트―엔드는 비동기 동작을 인식하고, 웨이팅 아이콘(예를 들어, 모래 시계)이 프로세싱 동안 디스플레이된다.
§ 3.0 일반 작동
IME는 기본 IME 모드에서 기능해서, 기존의 쿼리―대―후보(들) 맵핑을 사용하여 사용자 입력을 프로세싱한다. 또한 IME는 확장 모드에서 기능해서, IME 확장 프레임워크를 사용하여 사용자 입력을 프로세싱한다. 즉, IME는 명령, 트리거 및 핸들러 확장 모드 중 하나에서 기능해서, 식별된 확장 스크립트를 사용하여 사용자 입력을 프로세싱한다.
도 4는 IME의 명령어 확장 모드에 대한 프로세스(400)의 일례를 나타내는 흐름도이다. 도 4에서, 중국어는 예로 참조되지만, 한정되지 않는다. 프로세스(400)의 일례는 IME 엔진(122)과 확장 프레임워크(200)를 사용하여 예를 들어 시스템(100)에 의해 실행된다. 사용자 입력은 IME 엔진(122)에서 수취되고, 복수의 입력 패턴들 중 하나로 제공된다. 한 입력 패턴은 입력 문자(예를 들어 "i") 다음에 인수(예를 들어, [0―9]+)가 제공된다. 따라서, 결합된 입력 패턴은 i[0―9]+로서 제공되고, IME의 기본 입력 모드(402)를 개시하여(402), 쿼리―대―후보(들) 맵핑을 제공한다. 특히, 기존의 i―모드 로직은 인수에 적용되어서(404), 하나 이상의 후보들을 제공하여, 사용자에게 디스플레이한다. 일부 구현에서, 기존의 i―모드 로직은 테이블에 대해 입력으로서 인수를 사용하여, 간단한 테이블 조회로 관련 후보들을 결정한다. 하나 이상의 후보들은 하나 이상의 프런트―엔드 구성요소들(예를 들어, 출력 디바이스들(110))을 통해 사용자에게 디스플레이된다(406).
다른 입력 패턴은 입력 문자(예를 들어 "i") 다음에 다중―문자 스크립트 이름(예를 들어, [a―z][a―z])과 인수가 제공되어서, 스크립트(예를 들어 .+)에 의해 프로세싱되도록 한다. 따라서 결합된 입력 패턴은 i[a―z][a―z].+로 제공되고, IME의 명령어 확장 모드("i―ext mode")를 개시하여(408), IME 확장 프레임워크(200)에 의해 프로세싱된 스크립트에 기초하여 쿼리―대―후보(들)을 맵핑을 제공한다. 특히, 사용자 입력에 의해 지정된 스크립트는 인수("arg")를 평가하고, 하나 이상의 후보들을 결정하거나 생성하도록 실행된다(410). 일부 구현에서, 스크립트는 테이블에 대해서 입력으로서 인수를 사용하여, 간단하게 테이블을 조회하는데, 이는 관련 후보들을 결정하도록 스크립트에 규정된 것이다. 다른 구현에서, 스크립트는 인수들을 수학적으로 프로세싱하여 관련 후보들을 생성한다. 일부 구현에서, 스크립트는 상술한 바와 같이, (예를 들어 서비스 제공자에 의해 제공된) 네트워크형 리소스를 액세스하여, 관련 후보들을 생성한다. 일부 구현에서, 다른 기능 및/또는 그 기능의 조합은 후보들을 생성하도록 제공된다. 하나 이상의 후보들은 하나 이상의 프런트―엔드 구성요소들(예를 들어, 출력 디바이스(110))을 통해 IME 엔진(122)에 제공되어서 사용자에게 디스플레이한다(406).
하나 이상의 트리거 확장자(trigger extension)들은 IME에 등록된다. 각 트리거 확장자는 IME 엔진(122)에 의해 인식된 경우, 트리거 확장 모드를 개시하는 패턴이나 트리거 스트링을 포함한다. 특히 IME에 대한 사용자 입력은 등록된 트리거 스트링들과 비교된다. 사용자 입력이 트리거 스트링과 매칭된 경우, 사용자 입력은 IME 확장 프레임워크(200)에 제공되어서, 식별된 스크립트를 사용하여 그 입력이 프로세싱되도록 한다. 일부 구현에서, 사용자 입력은 IME 엔진(122)을 사용하여 프로세싱되어(즉, 기본 입력 모드에서), 제1 세트의 후보들을 생성하고, 또한 사용자 입력도 트리거 스트링과 매칭된 경우, 사용자 입력은 IME 확장 프레임워크(200)를 사용하여 프로세싱되어(즉, 트리거 확장 모드에서), 제2 세트의 후보들을 생성한다. 제2 세트의 후보들은 IME 확장 프레임워크(200)에 의해 의해 IME 엔진(122)에 제공되고, 제1 및 제2 세트의 후보들은 IME 엔진(122)에 의해 조합되어서, 사용자에게 디스플레이된다.
일부 구현에서, 트리거 확장 모드는 하나 이상들의 후보에 기초하여 개시된다. 특히 IME에 대한 사용자 입력은 등록된 트리거 스트링들과 비교된다. 사용자 입력이 트리거 스트링과 매칭되지 않은 경우, 사용자 입력은 ME 엔진(122)에 의해 프로세싱되어서, 제1 세트의 후보들을 생성한다. 생성된 후보들은 등록된 트리거 스트링들과 각각 비교된다. 후보가 트리거 스트링과 매칭된 경우, 후보는 IME 확장 프레임워크(200)를 사용하여 프로세싱되어서(즉, 트리거 확장 모드에서), 제2 세트의 후보들을 생성한다. 제2 세트의 후보들은 프레임워크(200)에 의해 IME 엔진(122)에 제공되고, 제1 및 제2 세트의 후보들은 IME 엔진(122)에 조합되어서, 사용자에게 디스플레이한다.
IME는 모든 사용자 입력을 프로세싱하기 위해 IME 확장 프레임워크(200)에 제공하는 핸들러 확장 모드로 설정된다. 특히, 핸들러는 IME 엔진(122)에 등록되고, 사용자가 기본 입력 모드와 핸들러 확장 모드 사이를 스위칭 가능하게 한다. 일례를 들자면, 이러한 핸들러는 선택가능 메뉴 항목 및/또는 사용자에게 디스플레이되는 핫키를 포함한다. 사용자가 메뉴 항목 및/또는 핫키를 선택한 경우, 핸들러 확장 모드가 개시되고, 모든 사용자 입력은 IME 확장 프레임워크로 이동된다. 사용자가 메뉴 항목 및/또는 핫키를 선택하지 않은 경우, 핸들러 확장 모드는 중단되고, 여기서 설명한 바와 같이 사용자 입력이 프로세싱된다.
§ 3.1 프로세스의 일례
도 5는 IME의 실행에 대한 프로세스(500)의 일례를 나타내는 흐름도이다. 프로세스(500)는 예를 들어 도 1의 시스템(100) 및/또는 도 2의 IME 시스템(120)에서 구현된다. 프로세스(500)는 특정 확장 모드가 지정됐는지의 여부를 결정한다(502). 일례로, 사용자는 (예를 들어 메뉴 아이템 및/또는 핫키를 선택함으로써) 입력을 시스템(100)에 제공하고, 시스템(100)은 모든 사용자 입력을 프로세싱을 위해 IME 확장 프레임워크에 제공하는 핸들러 확장 모드에서 작동하도록 IME를 개시한다. 확장 모드가 지정되면, IME 시스템(120)은 핸들러 확장 모드에서 작동하고, 사용자 입력이 수취된다(504).
사용자 입력은 IME 확장 프레임워크에 입력으로서 제공된다(508). IME 확장 프레임워크는 사용자 입력을 프로세싱하고 하나 이상의 후보들을 IME 엔진에 되돌려주기 위해, 스크립트를 실행함으로써 사용자 입력을 프로세싱한다(510). 이 경우, IME 확장 프레임워크는 핸들러 확장 모드에 의해 지정된 스크립트를 실행한다. 프로세스(500)는 하나 이상의 후보들에 기초하여 후보 리스트를 생성한다(512). 이 프로세스는 모든 후보들이 트리거 스트링과 매칭되는지의 여부를 결정한다(514). 일례의 IME 엔진은 후보들 각각을 하나 이상의 등록된 트리거 스트링들과 비교한다.
확장 모드가 지정되지 않은 경우(502), 사용자 입력이 수취되고(506), 프로세스(500)는 명령어 확장 모드의 개시 여부를 결정한다(516). 일례의 IME 엔진은 명령어 확장 모드의 개시 여부를 결정하기 위해 사용자 입력을 평가한다. 명령어 확장 모드가 개시된 경우, 사용자 입력은 IME 확장 프레임워크에 입력으로서 제공되고(508), 그 프로세서는 상술한 바와 같이 계속된다. 이 경우, IME 확장 프레임워크는 사용자 입력에 의해 지정된 스크립트를 실행한다.
사용자 입력이 명령어 확장 모드를 개시하는 것이 아닌 경우, 프로세스(500)는 사용자 입력과 트리거 스트링의 매칭 여부를 결정한다(518). 일례의 IME 엔진은 사용자 입력을 하나 이상의 등록된 트리거 스트링들과 비교한다. 사용자 입력이 트리거 스트링을 매칭되는 경우, 사용자 입력은 IME 확장 프레임워크에 대한 입력으로서 제공되고(508), 이 프로세스는 상술한 바와 같이 계속된다. 이 경우, IME 확장 프레임워크는 트리거 스트링에 의해 지정된 스크립트를 실행한다. 사용자 입력이 트리거 스트링과 매칭되지 않는 경우, 프로세스(500)는 사용자 입력에 기초한 후보 리스트를 생성한다(520). 특히, IME 시스템은 IME 엔진을 사용하여 쿼리―대―후보(들)을 제공하기 위해 기본 입력 모드에서 작동한다.
프로세스(500)는 후보 리스트의 모든 후보가 트리거 스트링과 매칭되는지의 여부를 결정한다(514). 일례의 IME 엔진은 후보 리스트의 각 후보를 하나 이상의 등록된 트리거 스트링들과 비교한다. 후보 리스트의 후보가 트리거 스트링과 매칭되지 않는 경우, 프로세스(500)는 후보 리스트를 디스플레이하고(522) 종료된다. 일례의 IME 엔진은 후보 리스트를 디스플레이하도록 출력 디바이스를 명령한다.
후보 리스트의 후보가 트리거 스트링과 매칭되는 경우, 후보는 IME 확장 프레임워크에 입력으로서 제공되고, IME 확장 프레임워크는 후보를 프로세싱하고 하나 이상의 확장 후보들을 IME 엔진에 되돌려 주기 위해, 스크립트를 실행하여 후보를 프로세싱한다(524). 프로세스(500)는 후보 리스트와 하나 이상의 확장 후보들에 기초하여 수정된 후보 리스트를 생성한다(526). 일례의 IME 엔진은 하나 이상의 확장 후보들을 수취하고, 하나 이상의 확장 후보들을 포함하는 원래의 후보 리스트(예를 들어, 512 또는 520에 제공된 것)를 수정한다. 프로세스(500)는 수정된 후보 리스트를 디스플레이하고(528), 종료된다. 일례의 IME 엔진은 출력 디바이스로 하여금, 수정된 후보 리스트를 디스플레이하도록 하게 한다.
§ 4.0 확장의 일례
확장의 일례와 후보 결과는 아래에 제공된다. 확장 및 후보 결과는 기능 키들(예를 들어, 키보드)이나 또는 동등한 입력(예를 들어, 터치 스크린 또는 스타일러스 입력)을 사용하여 탐색된다. 기능 키들은 대괄호([...])를 사용하여 표시되고, 기능 키들의 일례는 다음을 포함한다:
[ENTER] 사용자 입력을 전송
[SPACE] 현재 후보를 전송
[BACKSPACE] 사용자 입력의 마지막 문자를 삭제
[DEL] 사용자 입력의 현재 문자를 삭제하는 방법
[PGDN]/[PGUP] 각각 이전/이후 후보 페이지로 이동
[↑](상방 키)/[↓](하방 키) 후보 리스트 내에서 이동
[←](좌방 키)/[→](우방 키) 쿼리를 편집하기 위해 탈자 기호(caret) 이동
[ESC] 현재 입력 취소
일반적으로, 사용자는 사용자 입력을 제공하고, 이는 [ENTER]이나 또는 동등한 입력을 누름으로써 IME에 전송된다. 그 다음 사용자 입력은 IME 엔진(122)(예를 들어, 기본 입력 모드에서), IME 엔진(122) 및 IME 프레임워크(200)(예를 들어, 명령어 확장 모드 또는 트리거 확장 모드에서), 또는 IME 확장 프레임워크(200)(예를 들어, 핸들러 확장 모드에서)에 의해 프로세싱된다. 하나 이상의 후보들이 결정되고, 후보 리스트는 IME 엔진(122)을 사용하여 사용자에게 디스플레이된다. 후보 리스트는 후보의 수에 따라서 달라지는데, 주어진 시간에 사용자에게 디스플레이되는 단일 후보 리스트 페이지를 가지는 한 페이지 이상을 포함한다. 후보는 문자나 숫자 순서대로 제공되고, 아래 도시된 바와 같이, 각 후보는 연계된 시퀀스 문자나 숫자를 갖는다. 사용자는 [PGDN]/[PGUP] 및/또는 [↑]/[↓]나 동등한 입력을 사용하여 후보 리스트 및/또는 페이지들을 탐색해서, 원하는 후보를 선택한다. 사용자는 [SPACE]나 동등한 입력을 사용하여 선택된 후보를 전송할 수 있다. 전송되고 나면, 후보는 IME에 의해 호스트 어플리케이션(예를 들어 도 2의 어플리케이션(220))에 입력된다. 일례로 호스트 어플리케이션은 워드 프로세싱 어플리케이션인 경우, 전송된 후보는 문서로 제공될 수 있다. 다른 예로서, 호스트 어플리케이션이 인터넷 브라우저인 경우, 전송된 후보는 브라우저의 모든 입력 필드(예를 들어, 디스플레이된 대화 상자, 어드레스 바)에 입력될 수 있다.
§ 4.1 명령어 확장 모드의 일례
일부 구현에서, 사용자는 간단한 사용자 입력(예를 들어 단일 문자 "i")을 IME에 제공하고, IME는 사용자에 의해 선택된 후보 스크립트(즉, 사용자 디바이스 상에 다운로드 및 인스톨된 스크립트)들의 리스트를 생성한다. 일례를 들자면, 언어 예로서 중국어를 사용하여, 사용자 입력 "i"는 사용 가능한 명령어 확장 스크립트들의 다음과 같은 리스트를 생성한다.
Figure 112012091108118-pct00013
선두 "i"는 명령어 확장 모드(즉, i―ext 모드)를 개시하고, 후보들의 리스트로서 사용 가능한 i―ext 스크립트들(예를 들어, 아래에 상세히 설명하는 js, rq, hh)을 나타낸다. 사용자는 기능 키들이나 또는 동등한 입력을 사용하여 명령을 검색하고, [SPACE] 또는 동등한 입력을 사용하여 후보 스크립트를 선택한다. 예를 들어, 사용자가 i[PGDN]을 입력하면, 그 결과 i―ext 명령어 후보 리스트의 다음 페이지가 디스플레이된다(예를 들어,
Figure 112012091108118-pct00014
). 다른 예로서, 사용자가 i[PGUP]을 입력하면, 그 결과 i―ext 명령어 후보 리스트의 이전 페이지가 디스플레이된다.
일부 구현에서, 사용자가 IME에 보다 복잡한 사용자 입력(예를 들어, 하나 이상의 키 입력들이나 동등한 입력 다음에 단일 문자 "i")을 제공한다. 예를 들어, 사용자가 "i[SPACE]"를 입력한 결과, "js" 명령어 확장이 실행되어서 다음과 같은 입력 후보들의 일례를 제공한다:
Figure 112012091108118-pct00015
특히, [SPACE] 다음의 i는 사용 가능한 스크립트들의 리스트에 나열된 것 중 제1 스크립트인 i―ext 모드 "js"를 개시한다. 또한 이것은 사용자 입력으로서 사용자가 "ijs"를 제공함으로써 달성된다.
입력의 다른 일례는 i[↓][SPACE]를 포함한다. 이 입력의 결과는 "rq" 명령어 확장을 실행하여, 다음과 같은 입력 후보들을 제공한다:
Figure 112012091108118-pct00016
특히, [↓]는 제2 스크립트 후보(예를 들어, rq)로 커서를 이동하고, [SPACE]는 실행을 위해 스크립트 후보를 선택한다. 또한 이것은 사용자 입력으로서 사용자가 "irq"를 제공함으로써 달성될 수 있다. 숫자 1., 2., 3.은 후보들과 연계된 시퀀스 번호이다. 입력 후보 리스트로부터, 키들 [1], [2], 또는 [3]은 원하는 입력 후보를 전송하는데 사용될 수 있다. 또한 [SPACE]는 현재 선택된(highlighted) 후보를 전송하는데 사용될 수 있다. 다른 구현에서, 사용자 입력은 "irq2"로서 제공되고, 그 결과 2009年 10月 10日을 직접 전송하게 된다.
이 경우, 원래의 사용자 입력은 스크립트 rq의 결과인 후보 리스트의 후보 숫자 2가 전송되어야 한다는 것을 직접적으로 나타낸다. 이는 사용자가 특히 이미 디스플레이된 후보들을 인식한 경우, 입력 후보를 전송하는 보다 신속하고 효과적인 방식을 제공한다.
사용자는 보다 복잡한 입력을 제공할 수 있는데, 이는 원하는 스크립트와 그 스크립트에 의해 프로세싱될 원하는 후보를 식별하는 것을 포함한다. 예를 들어, 사용자 입력 "ijs3+2*sin(10)"은 i―ext 모드를 개시를 개시해서 원하는 스크립트로서 js를 식별하고, 스크립트에 의해 프로세싱되는 인수로서 3+2*sin(10)을 개시한다. 따라서, 인수는 스크립트에 의해 프로세싱되어서, 다음의 출력 일례를 생성 및 디스플레이한다:
Figure 112012091108118-pct00017
이 경우, 하나의 결과만 되돌려지고, 후보 시퀀스 번호는 제공되지 않는다. 사전-지정되고 나서, 다음 키를 입력(예를 들어, [SPACE])할 때, 디스플레이된 결과가 전송되고, 입력으로서 어플리케이션에 제공된다.
입력의 다른 일례는 "inh1587"을 포함하여, 다음과 같은 입력 후보 리스트의 일례가 된다:
Figure 112012091108118-pct00018
따라서, 숫자 인수(예를 들어, [0―9]+)를 요구하는 함수들을 맵핑하기 위해서, 선택된 스크립트는 디스플레이된 입력 후보 리스트에서 후보 선택 또는 전송 키로서 시퀀스 글자들(예를 들어 a, b, c,...)을 사용하도록 스크립트 엔진에 명령한다. 이 정보는 스크립트 기능의 메타―데이터에 의해 제공된다.
도 6a는 명령어 확장 모드에 상응하는 확장의 일례를 나타내고, 도 6b는 도 6a의 확장에 기초한 출력의 일례를 나타낸다. 도 6a의 코드(600)에서 함수 연산(function compute)은 개발자에 의해 구현된 스크립트 함수이다. 개발자는 ime.register_command를 호출하여, 명령어 확장을 등록한다. 명령어 확장은 사용자에 의해 인스톨된 후, 사용자는 산술식 [xxxx]을 평가하는 타입인 "ijs[xxxx]"를 입력하고, 그 결과는 디스플레이된다. 도 6b의 일례로, 사용자 입력은 다음을 포함한다:
Figure 112012091108118-pct00019
380.22*(sin(7.2)+cos(8))을 포함하는 산술식과, 후보 리스트(602)의 일례가 되는 스크립트를 가진다.
Figure 112012091108118-pct00020
이는 도 6a의 스크립트에 기초하여 생성된다. 일부 구현에서, 확장자는 개발자가 ime.register_trigger를 호출하는 경우에, 아래에 상세히 설명되는 바와 같이, 트리거 확장자로서 등록된다.
§ 4.2 트리거 확장 모드
상술한 바와 같이, 사용자 입력 및/또는 후보가 사전―등록을 트리거 스트링과 매칭되는 경우, 트리거 확장 모드가 개시된다. 언어의 일례로서 중국어와 영어를 사용하면, 중국어 단어 "shijian"은 영어 "time"으로 번역된다. 사용자는 "shijian"을 병음 IME으로 입력하면, 그 결과 IME 엔진에 의해 생성된 다음과 같은 후보 리스트의 일례가 된다.
Figure 112012091108118-pct00021
그러나 이 경우, "shijian"는 사전―등록된 트리거 스트링이고, IME 엔진은 IME 확장 프레임워크에 사용자 입력을 제공하고, 대응하는 스크립트를 프로세싱하여 하나 이상의 추가 후보들을 제공한다. 예를 들어, 대응하는 스크립트는 후보로서 현재 시간(예: 12:00)을 되돌려 준다. IME 확장 프레임워크에 의해 생성된 하나 이상의 후보들은 IME 엔진에 제공되고, 후보들과 결합되어 다음과 같은 후보 리스트의 일례를 제공한다:
Figure 112012091108118-pct00022
상술한 후보 리스트 상에서, 확장 후보(즉, IME 확장 프레임워크에 의해 제공된 후보)는 첫 후보 리스트 페이지의 마지막 위치에 삽입된다.
일부 구현에서, 트리거 확장 모드는 IME 엔진에 의해 생성된 후보에 기초하여 개시된다. 예를 들어, 사용자 입력 "shijian"은 일반적으로 IME 엔진에 의해 생성되는 다음과 같은 후보 리스트의 일례가 된다:
Figure 112012091108118-pct00023
그러나 IME 엔진은 후보가 사전―등록된 트리거 스트링과 매칭된다는 것을 인식한 경우, IME 엔진은 그 후보를 IME 확장 프레임워크에 제공하여, 하나 이상의 추가 후보들을 생성하도록 한다. 일례를 들자면, "
Figure 112012091108118-pct00024
"(즉, 상술한 후보 리스트의 일례 중 제1 후보)는 사전-등록된 트리거 스트링으로서 제공된다. 따라서, IME 엔진은 "
Figure 112012091108118-pct00025
"을 IME 확장 프레임워크에 제공하고, 지정된 스크립트에 기초하여 "
Figure 112012091108118-pct00026
"를 프로세싱해서, 확장 후보(예를 들어, 12:00)를 생성한다. 확장 후보는 IME 엔진에 제공되고, 최종 후보 리스트나 또는 수정된 후보 리스트를 생성하여 사용자에게 디스플레이한다. 수정된 후보 리스트의 일례는 다음을 포함한다:
Figure 112012091108118-pct00027
따라서, 트리거 확장 모드는 IME 엔진의 특정 후보에 기초하여 개시되는 경우, 확장 후보는 트리거 후보 다음에 삽입된다.
일부 구현에서, 트리거 확장 모드는 접두사 및/또는 접미사 매칭을 사용하여 사용자 입력에 의해 개시된다. 원래의 것(예를 들어, "!" 또는 "*")은 트리거 확장자를 등록하는 경우 접두사/접미사 매칭을 규정하는데 사용된다. 예를 들자면(한정되지 않음), 트리거 확장자 "bm"은 입력 트리거 스트링으로서 등록된다. "bm"으로 시작하는 모든 사용자 입력은 트리거 스트링과 매칭되는 것으로서 IME 엔진에 의해 인식된다. 사용자 입력의 일례는 "bmabcd"를 포함한다. 사용자 입력에 응답하여, IME 엔진은 제1 세트의 후보들을 포함하는 후보 리스트를 생성한다. IME 엔진에 의해 생성된 후보 리스트의 일례는 다음을 포함한다:
Figure 112012091108118-pct00028
그러나 "bm*"이 트리거 스트링으로서 등록되기 때문에, IME 확장 프레임워크도 사용자 입력을 프로세싱하여, 제2 세트의 후보를 포함하는 확장 후보 리스트를 생성한다. IME 확장 프레임워크에 의해 생성된 후보 리스트의 일례는 다음을 포함한다:
Figure 112012091108118-pct00029
따라서, 단일 후보가 제2 세트의 후보에 제공된다. IME 확장 프레임워크의 확장 후보 리스트는 IME 엔진에 제공되고, IME 엔진은 후보 리스트들과 결합하여 수정된 후보 리스트를 제공한다. 수정된 후보 리스트의 일례는 다음을 포함한다:
Figure 112012091108118-pct00030
본 개시의 구현과 본 명세서에 기술된 모든 함수 기능들은 디지털 전자 회로나, 컴퓨터 소프트웨어, 펌웨어, 또는 본 명세서에 개시된 구조나 그것과 동등한 구조를 가지는 하드웨어나, 이들 중 하나 이상의 조합으로 구현된다. 본 개시의 구현은 하나 이상의 컴퓨터 프로그램 제품들, 즉 실행을 위해 컴퓨터 판독가능 매체 상에 인코딩된 컴퓨터 프로그램 명령어들 중 하나 이상의 모듈들로서 구현되거나, 데이터 프로세싱 장치들의 작동을 제어하기 위해 구현된다. 컴퓨터 판독가능 매체는 머신 판독가능 저장 디바이스, 기계 판독가능 저장 기판, 메모리 디바이스, 기계 판독가능 전파 신호에 영향을 미치는 것들의 조합, 또는 이들 중 하나 이상의 조합이 될 수 있다. 용어 "데이터 프로세싱 장치"는 모든 장치들, 디바이스들, 및 데이터 프로세싱용 머신들(프로그래머블 프로세서, 컴퓨터, 또는 다중 프로세서나 컴퓨터들을 예로 들 수 있음)을 포괄한다. 그 장치들은 하드웨어에 추가로, 문제의 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드를 포함하고, 코드의 일례는 프로세서 펌웨어, 프로토콜 스택, 데이터 기본 관리 시스템, 운영 시스템, 또는 이들 중 하나 이상의 조합으로 이루어진다. 전파 신호는 인위적으로 생성된 신호이고, 적합한 수취 장치들에 전달하기 위해 정보를 인코딩하도록 생성된, 예를 들어 머신―생성형 전기적, 광학적, 또는 전자기적 신호이다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 어플리케이션, 스크립트, 또는 코드로 알려져 있음)은 컴파일형 또는 해석형 언어들을 포함하는 모든 형태의 프로그래밍 언어로 작성될 수 있고, 독립형 프로그램이나 컴퓨팅 환경에서 사용하기에 적합한 모듈, 구성요소, 서브 루틴, 또는 다른 유닛을 포함하는 모든 형태로 배포(deploy)될 수 있다. 컴퓨터 프로그램은 반드시 파일 시스템 내에서 파일과 상응하지 않는다. 이 프로그램은 다른 프로그램들이나 데이터(예를 들어 마크업 프로그램 문서 내에 저장된 하나 이상의 스크립트들)를 홀딩하는 파일의 일부에 저장되거나, 문제의 프로그램에 할애된 단일 파일 내에 저장되거나, 또는 다수 통합된 파일들(예를 들어, 하나 이상의 모듈들, 서브 프로그램들, 또는 코드의 일부를 저장하는 파일들) 내에 저장된다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 실행되거나, 또는 하나의 사이트에 위치되거나, 통신 네트워크를 통해 상호 연결되고 다수의 사이트들에 걸쳐 분배된 복수의 컴퓨터들 상에서 실행되도록 전개된다.
본 명세서에 기술된 프로세스들과 로직 플로우는 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그래머블 프로세서들에 의해 수행되어서, 입력 데이터 상에서 작동시키고 출력을 생성함으로써 기능들을 수행한다. 또한 프로세스들과 로직 플로우는 특수 목적의 로직 회로(예를 들어 FPGA(Field Programmable Gate Array) 또는 ASIC(Application Specific Integrated Circuit))에 의해 수행되고, 장치들도 이들에 의해 구현된다.
프로세서 프로그램의 실행에 적합한 프로세서들은 일례를 들자면, 일반 및 특수 목적의 마이크로 프로세서들, 모든 종류의 디지털 컴퓨터의 하나 이상의 프로세서들을 포함한다. 일반적으로, 프로세서는 ROM(Read Only Memory) 또는 RAM(Random Access Memory) 또는 이들 모두로부터 명령어들 및 데이터를 수취할 것이다. 컴퓨터의 필수 구성요소들은 명령어들을 수행하는 프로세서이고, 명령어들과 데이터를 저장하는 하나 이상의 메모리 디바이스들이다. 또한 일반적으로, 컴퓨터는 예를 들어 자기, 광자기 디스크(magneto―optical disc), 광학 디스크들과 같은 데이터를 저장하기 위해 하나 이상의 대량 저장 디바이스들과 작동적으로 결합되거나 이들을 포함하여, 전달 데이터로부터 데이터를 수취 및/또는 데이터를 전달한다. 그러나 컴퓨터는 이러한 디바이스들을 필요로 하지 않는다. 또한, 컴퓨터는 일례로 몇몇의 이름만 대자면 모바일폰, PDA, 휴대 오디오 플레이어, GPS 수취기와 같은 다른 디바이스에 내장될 수 있다. 컴퓨터 프로그램 명령어들 및 데이터를 저장하는데 적합한 컴퓨터 판독가능 매체는 모든 형태의 비휘발성 메모리, 미디어 및 메모리 디바이스들을 포함하고, 그 디바이스들의 일례를 들자면, EPROM, EEPROM, 플래시 메모리 디바이스들과 같은 반도체 메모리 디바이스들; 내부 하드 디스크들이나 이동식(removable) 디스크들, 광자기 디스프들, 및 CD ROM과 DVD―ROM 디스크들과 같은 자기 디스크들이 있다. 프로세서와 메모리는 특수 목적의 로직 회로에 의해 보완되거나 또는 이들과 통합된다.
사용자와의 상호 작용을 제공하기 위해, 본 개시의 구현은 사용자에게 정보를 디스플레이하기 위해 디스플레이 디바이스(예를 들어 CRT(캐소드 레이 튜브) 또는 LCD(액정 디스플레이) 모니터), 사용자가 컴퓨터에 대해 입력할 수 있는 포인팅 디바이스(예를 들어 마우스나 트랙볼) 및 키보드를 가지는 컴퓨터 상에서 구현된다. 다른 종류의 디바이스들은 사용자와의 상호 작용을 제공하는데, 사용자에게 제공된 피드백은 예를 들어 시각적 피드백, 청각적 피드백, 또는 촉각적 피드백과 같은 모든 형태의 감각적 피드백이 되고, 사용자로부터의 입력은 음향, 음성, 또는 촉각 입력을 포함하는 모든 형태로 수취된다.
본 개시의 구현은 데이터 서버와 같은 백 엔드 구성요소, 또는 어플리케이션 서버와 같은 미들웨어 구성요소, 또는 사용자가 본 개시의 구현과 상호 작용할 수 있게 하는 그래픽형 사용자 인터페이스나 웹 브라우져를 가지는 클라이언트 컴퓨터와 같은 프론트 엔드 구성요소, 또는 하나 이상의 백 엔드, 미들웨어, 또는 프론트 엔드 구성요소들의 모든 조합을 포함하는 컴퓨터 시스템 내에서 구현된다. 통신 네트워크의 일례로는 인터넷과 같은 LAN(Local Area Network)과 WAN(Wide Area Network)이 있다.
컴퓨팅 시스템은 클라이언트와 서버를 포함한다. 클라이언트와 서버는 일반적으로 상호 떨어져 있어, 통상적으로 통신 네트워크를 통해 상호 작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터들 상에서 실행하고 서로 클라이언트―서버 관계를 가지는 컴퓨터 프로그램으로 인해 발생된다.
본 명세서는 많은 세부 사항을 포함하지만, 이들은 본 개시의 범위나 청구 범위에 대한 제한으로 해석되어서는 안되며, 오히려 본 개시의 특정 구현에 대한 명확한 특징의 설명으로 이해되어야 한다. 별도 구현의 맥락에서 본 명세서에 기술된 임의 특징들은 단일 구현과의 조합으로 구현된다. 반대로, 단일 구현의 맥락에서 기술된 다양한 특징들은 다수의 구현들 또는 모든 적합한 하위 조합(subcombination)으로 구현된다. 또한, 특징들이 임의 조합으로 심지어 초기 청구된 바와 같이 동작되는 것으로 기술되어 있지만, 청구된 조합 중 하나 이상의 특징들이 일부 경우에 그 조합에서 삭제되고, 청구된 조합이 하위 조합이나 하위 조합의 변동으로 유도되기도 한다.
마찬가지로, 작동들은 특정 순서로 도면에 도시되어 있으나, 이러한 작동들이 도시된 특정 순서나 순차적 순서로 수행될 것이 요구되는 것으로, 또는 바람직한 결과들을 달성하기 위해서는 모든 도시된 작동들이 수행되는 것으로 이해되어서는 안된다. 특정 상황에서, 멀티 태스킹 및 병렬 프로세싱하는 것이 바람직할 수 있다. 또한, 상술한 구현의 다양한 시스템 구성요소들의 분리가 모든 구현에서 이러한 분리를 요구하는 것으로 이해되어서는 안되며, 그리고 이것은 기술된 프로그램 구성요소들과 시스템들이 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 또는 복수 소프트웨어 제품들과 패키지화될 수 있는 것으로 이해되어야 한다.
본 발명에 개시된 명세서의 다수 구현들이 기술되었다. 그럼에도 불구하고,다양한 수정이 본 발명에 개시된 사상 및 범주로부터 벗어나는 일 없이 이루어질 것이다. 따라서, 다른 구현은 다음과 청구 범위의 범주 내에 있다.
100 시스템
102 프로세싱 디바이스
104 제1 데이터 스토어
106 제2 데이터 스토어
108 입력 디바이스
110 출력 디바이스
112 네트워크 인터페이스
114 버스 시스템

Claims (55)

  1. 입력 방법 에디터(input method editor; IME)의 사용자 인터페이스에서 사용자 입력을 수취하는 단계;
    상기 사용자 입력에 기초하여, 사용자 입력을 스크립트 엔진으로 프로세싱할지 여부를 결정하는 단계;
    상기 사용자 입력이 상기 사용자 입력은 상기 스크립트 엔진으로 프로세싱될 것이라고 표시하는 경우:
    상기 사용자 입력을 스크립트 엔진(script engine)에 제공하는 단계;
    스크립트 리포지토리(script repository) 내에 전자식으로 저장된 복수의 스크립트들 중에서 스크립트를 선택하는 단계;
    상기 스크립트 엔진을 사용하여 상기 스크립트를 통해 상기 사용자 입력을 프로세싱해서 하나 이상의 후보들(candidates)을 생성하게 하는 단계; 및
    상기 하나 이상의 후보들을 IME 엔진에 제공하는 단계를 포함하며,
    상기 사용자 입력이 상기 사용자 입력은 상기 스크립트 엔진으로 프로세싱되지 않을 것이라고 표시하는 경우:
    상기 사용자 입력을 상기 IME 엔진에 제공하는 단계; 및
    하나 이상의 후보들을 생성하기 위해 상기 사용자 입력을 상기 IME 엔진으로 프로세싱하는 단계를 포함하는 컴퓨터 구현 방법.
  2. 청구항 1에 있어서,
    샌드박스 프로세스(sandbox process)를 인스턴트화(instantiate)하는 단계를 추가로 포함하고, 상기 스크립트 엔진은 상기 샌드박스 프로세스 내에서 실행되는 컴퓨터 구현 방법.
  3. 청구항 1 또는 청구항 2에 있어서,
    상기 IME 엔진은 프로세스간 통신을 사용하여 상기 스크립트 엔진과 통신하는 컴퓨터 구현 방법.
  4. 청구항 3에 있어서,
    상기 샌드박스 프로세스 내에서 IPC 서버를 실행시키는 단계를 추가로 포함하고, 상기 IPC 서버는 상기 IME 엔진과 상기 스크립트 엔진 사이의 통신을 가능하게 하는 IPC 서버인 컴퓨터 구현 방법.
  5. 청구항 2에 있어서,
    상기 샌드박스 프로세스는 스크립트 엔진의 기능을 제한하는 컴퓨터 구현 방법.
  6. 청구항 1에 있어서,
    상기 사용자 입력은 상기 스크립트와 상기 스크립트에 의해 프로세싱되는 입력을 식별하는 입력 시퀀스를 포함하는 컴퓨터 구현 방법.
  7. 청구항 1에 있어서,
    상기 사용자 입력을 하나 이상의 트리거 스트링들과 비교하는 단계;
    상기 사용자 입력이 상기 하나 이상의 트리거 스트링들 중 하나와 매칭되는지를 결정하는 단계; 및
    상기 하나 이상의 트리거 스트링들 중 하나에 기초하여 상기 스크립트를 선택하는 단계를 추가로 포함하는 컴퓨터 구현 방법.
  8. 청구항 1에 있어서,
    확장 모드(extension mode)에서 상기 IME의 입력 표시 작동을 수취하는 단계;
    상기 입력 수취에 응답하여 상기 확장 모드에서 상기 IME를 작동하는 단계; 및
    상기 확장 모드에서 작동할 때 상기 모든 사용자 입력을 상기 스크립트 엔진에 제공하는 단계를 추가로 포함하는 컴퓨터 구현 방법.
  9. 청구항 1에 있어서,
    상기 스크립트를 통해 상기 사용자 입력을 프로세싱하는 방법은
    웹―기반 서비스와의 네트워크 연결을 구축하는 단계;
    상기 사용자 입력의 적어도 일부를 상기 웹―기반 서비스에 제공하는 단계;
    상기 웹―기반 서비스로부터 응답을 수취하는 단계를 포함하고,
    상기 응답은 상기 사용자 입력의 적어도 일부에 기초하여 생성되고, 상기 하나 이상의 후보들은 상기 응답을 구비하는 컴퓨터 구현 방법.
  10. 청구항 9에 있어서,
    상기 웹―기반 서비스는 맵 서비스, 서치 서비스, 번역 서비스 중 적어도 하나를 포함하는 컴퓨터 구현 방법.
  11. 청구항 1에 있어서,
    제1 세트의 후보들을 구비한 제1 후보 리스트를 생성하는 단계;
    상기 스크립트 엔진을 사용하여 생성된 하나 이상의 후보들을 가지는 제2 세트의 후보들을 구비한 제2 후보 리스트를 생성하는 단계;
    상기 제1 세트의 후보들 중 적어도 일부와 상기 제2 세트의 후보들의 적어도 일부를 조합하여 제3 후보 리스트를 제공하는 단계; 및
    상기 제3 후보 리스트를 사용자 디바이스 상에 디스플레이하는 단계를 추가로 포함하는 컴퓨터 구현 방법.
  12. 청구항 1에 있어서,
    상기 IME 엔진은 상기 하나 이상의 후보들을 프로세싱하여 상기 사용자 인터페이스 상에 디스플레이하는 컴퓨터 구현 방법.
  13. 청구항 1에 있어서,
    상기 하나 이상의 후보들 중 하나의 선택을 나타내는 제2 사용자 입력을 수취하는 단계; 및
    상기 하나 이상의 후보들 중 하나를 사용자 디바이스 상에서 실행된 어플리케이션에 입력하는 단계를 추가로 포함하는 컴퓨터 구현 방법.
  14. 청구항 13에 있어서,
    상기 어플리케이션은 워드 프로세싱 어플리케이션, 텍스트 편집 어플리케이션, 스프레드시트 어플리케이션, 이메일 어플리케이션, 프리젠테이션 어플리케이션 및 웹 브라우저 중 하나를 포함하는 컴퓨터 구현 방법.
  15. 청구항 1에 있어서,
    상기 스크립트 리포지토리 내에 전자식으로 저장된 각 스크립트는 승인된 복수의 루틴들 중에서 선택된 하나 이상의 루틴들을 구비하는 컴퓨터 구현 방법.
  16. 청구항 1에 있어서,
    상기 스크립트의 스크립트 언어를 식별하는 단계를 추가로 포함하고,
    상기 스크립트 엔진은 상기 스크립트를 통해 사용자 입력을 프로세싱하기 위해 상기 스크립트 언어에 상응하는 런타임을 인스턴스화하는 컴퓨터 구현 방법.
  17. 청구항 1에 있어서,
    상기 사용자 입력은 제1 언어로 제공되는 컴퓨터 구현 방법.
  18. 청구항 17에 있어서,
    상기 하나 이상의 후보들은 제1 언어로 제공되는 컴퓨터 구현 방법.
  19. 청구항 17에 있어서,
    상기 하나 이상의 후보들은 제2 언어로 제공되는 컴퓨터 구현 방법.
  20. 청구항 17에 있어서,
    상기 하나 이상의 후보들은 상기 제1 언어와 제2 언어의 조합으로 제공되는 컴퓨터 구현 방법.
  21. 청구항 17에 있어서,
    상기 하나 이상의 후보들은 하나 이상의 심볼들을 포함하는 컴퓨터 구현 방법.
  22. 청구항 1에 있어서,
    입력을 수취하는 단계;
    상기 입력에 응답하여 중앙 레지스트리(central registry) 내에 전자식으로 저장되고, 상기 스크립트를 포함하는 사용 가능한 스크립트들의 리스트를 생성하는 단계;
    상기 스크립트의 선택을 나타내는 제2 입력을 수취하는 단계;
    상기 제2 입력에 응답하여 상기 중앙 레지스트리로부터 상기 스크립트를 검색하는 단계; 및
    상기 스크립트 리포지토리에 상기 스크립트를 저장하는 단계를 추가로 포함하는 컴퓨터 구현 방법.
  23. IME의 사용자 인터페이스에서 사용자 입력을 수취하는 단계;
    상기 사용자 입력에 기초하여, 사용자 입력을 스크립트 엔진으로 프로세싱할지 여부를 결정하는 단계;
    상기 사용자 입력이 상기 사용자 입력은 상기 스크립트 엔진으로 프로세싱될 것이라고 표시하는 경우:
    상기 사용자 입력을 스크립트 엔진에 제공하는 단계;
    스크립트 리포지토리 내에 전자식으로 저장된 복수의 스크립트들 중에서 스크립트를 선택하는 단계;
    상기 스크립트에 제공된 명령어(instruction)들에 기초하여 웹―기반 서비스와 네트워크 연결을 구축하는 단계;
    상기 웹―기반 서비스에 상기 사용자 입력의 적어도 일부를 제공하는 단계;
    상기 웹―기반 서비스로부터 응답을 수취하는 단계; 및
    상기 응답을 IME 엔진에 제공하여, 사용자에게 디스플레이하는 단계를 포함하며,
    상기 사용자 입력이 상기 사용자 입력은 상기 스크립트 엔진으로 프로세싱되지 않을 것이라고 표시하는 경우:
    상기 사용자 입력을 상기 IME 엔진에 제공하는 단계; 및
    하나 이상의 후보들을 생성하기 위해 상기 사용자 입력을 상기 IME 엔진으로 프로세싱하는 단계를 포함하는 컴퓨터 구현 방법.
  24. 청구항 23에 있어서,
    상기 웹―기반 서비스는 맵 서비스, 서치 서비스, 번역 서비스 중 적어도 하나를 포함하는 컴퓨터 구현 방법.
  25. 청구항 24에 있어서,
    상기 사용자 입력의 적어도 일부는 상기 맵 서비스에 제공되고,
    상기 응답은 상기 맵 서비스에 의해 생성되고, 사용자 선택가능 하이퍼링크를 포함하는 컴퓨터 구현 방법.
  26. 청구항 24에 있어서,
    상기 사용자 입력의 적어도 일부는 검색어(search term)로 검색 서비스에 제공되고,
    상기 응답은 상기 서치 서비스에 의해 생성되고, 상기 검색어에 기초하여 서치 서비스에 의해 생성된 하나 이상의 서치 결과들을 포함하는 컴퓨터 구현 방법.
  27. 청구항 24에 있어서,
    상기 사용자 입력의 적어도 일부는 상기 번역 서비스에 제공되고, 제1 언어로 제공되고,
    상기 응답은 상기 번역 서비스에 의해 생성되고, 제2 언어로 제공되는 컴퓨터 구현 방법.
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 디스플레이;
    하나 이상의 스크립트들을 전자식으로 저장하기 위한 스크립트 리포지토리를 구비한 컴퓨터 판독가능 저장 매체; 및
    IME를 실행하고, 상기 IME에서 사용자 입력을 수취하고, 상기 사용자 입력에 기초하여 상기 사용자 입력을 스크립트 엔진으로 프로세싱할지 여부를 결정하는 하나 이상의 프로세서들을 포함하며, 상기 프로세서들은
    상기 사용자 입력이 상기 사용자 입력은 상기 스크립트 엔진으로 프로세싱될 것이라고 표시하는 경우:
    상기 사용자 입력을 스크립트 엔진에 제공하고,
    상기 스크립트 리포지토리로부터 상기 스크립트를 선택하고,
    상기 스크립트 엔진을 사용하여 상기 스크립트를 통해 상기 사용자 입력을 프로세싱해서 하나 이상의 후보들을 생성하게 하고, 그리고
    디스플레이 상에 디스플레이되도록 상기 하나 이상의 후보들을 제공하며,
    상기 사용자 입력이 상기 사용자 입력은 상기 스크립트 엔진으로 프로세싱되지 않을 것이라고 표시하는 경우:
    상기 사용자 입력을 상기 IME 엔진에 제공하고,
    하나 이상의 후보들을 생성하기 위해 상기 사용자 입력을 상기 IME 엔진으로 프로세싱하고, 그리고 상기 디스플레이 상에 디스플레이되도록 상기 하나 이상의 후보들을 제공하는 시스템.
  35. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은 샌드박스 프로세스를 인스턴스화하고,
    상기 스크립트 엔진은 상기 샌드박스 프로세스 내에서 실행되는 시스템.
  36. 청구항 34 또는 청구항 35에 있어서,
    상기 IME 엔진은 프로세스간 통신을 사용하여 상기 스크립트 엔진과 통신하는 시스템.
  37. 청구항 36에 있어서,
    상기 하나 이상의 프로세서들은 샌드박스 프로세스 내에서 IPC 서버를 실행하고,
    상기 IPC 서버는 상기 IME 엔진과 상기 스크립트 엔진 사이의 통신을 가능하게 하는 시스템.
  38. 청구항 35에 있어서,
    상기 샌드박스 프로세스는 상기 스크립트 엔진의 기능을 제한하는 시스템.
  39. 청구항 34에 있어서,
    상기 사용자 입력은 상기 스크립트와 상기 스크립트에 의해 프로세싱되는 입력을 식별하는 입력 시퀀스를 구비한 시스템.
  40. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은 상기 사용자 입력을 상기 하나 이상의 트리거 스트링들과 비교하고, 상기 사용자 입력이 상기 하나 이상의 트리거 스트링들 중 하나와 매칭되는지를 결정하고, 상기 하나 이상의 트리거 스트링들 중 하나에 기초하여 상기 스크립트를 선택하는 시스템.
  41. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은 확장 모드에서 상기 IME의 입력 표시 작동을 수취하고, 상기 입력 수취에 응답하여 상기 확장 모드에서 상기 IME를 작동하고, 상기 확장 모드에서 작동할 때 상기 모든 사용자 입력을 상기 스크립트 엔진에 제공하는 시스템.
  42. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은
    웹―기반 서비스와의 네트워크 연결을 구축하고;
    상기 사용자 입력의 적어도 일부를 상기 웹―기반 서비스에 제공하고; 및
    상기 웹―기반 서비스로부터의 응답을 수취하는 것에 의해,
    상기 스크립트를 통해 상기 사용자 입력을 프로세싱하고;
    상기 응답은 상기 사용자 입력의 적어도 일부에 기초하여 생성된 것이고, 상기 하나 이상의 후보들은 상기 응답을 구비한 시스템.
  43. 청구항 42에 있어서,
    상기 웹―기반 서비스는 맵 서비스, 서치 서비스, 번역 서비스 중 적어도 하나를 포함하는 시스템.
  44. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은
    제1 세트의 후보들을 구비한 제1 후보 리스트를 생성하고,
    상기 스크립트 엔진을 사용하여 생성된 하나 이상의 후보들을 가지는 제2 세트의 후보들을 구비한 제2 후보 리스트를 생성하고,
    상기 제1 세트의 후보들 중 적어도 일부와 상기 제2 세트의 후보들의 적어도 일부를 조합하여 제3 후보 리스트를 제공하고,
    상기 제3 후보 리스트를 사용자 디바이스 상에 디스플레이하는 시스템.
  45. 청구항 34에 있어서,
    상기 IME 엔진은 상기 하나 이상의 후보들을 프로세싱하여 사용자 인터페이스 상에 디스플레이하는 시스템.
  46. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은 상기 하나 이상의 후보들 중 하나의 선택을 나타내는 제2 사용자 입력을 수취하고, 상기 하나 이상의 후보들 중 하나를 사용자 디바이스 상에서 실행된 어플리케이션에 입력하는 시스템.
  47. 청구항 46에 있어서,
    상기 어플리케이션은 워드 프로세싱 어플리케이션, 텍스트 편집 어플리케이션, 스프레드시트 어플리케이션, 이메일 어플리케이션, 프리젠테이션 어플리케이션 및 웹 브라우저 중 하나를 포함하는 시스템.
  48. 청구항 34에 있어서,
    상기 스크립트 리포지토리 내에 전자식으로 저장된 각 스크립트는 승인된 복수의 루틴들 중에서 선택된 하나 이상의 루틴들을 구비하는 시스템.
  49. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은 상기 스크립트의 스크립트 언어를 식별하고, 상기 스크립트 엔진은 상기 스크립트를 통해 사용자 입력을 프로세싱하기 위해 상기 스크립트 언어에 상응하는 런타임을 인스턴스화하는 시스템.
  50. 청구항 34에 있어서,
    상기 사용자 입력은 제1 언어로 제공되는 시스템.
  51. 청구항 50에 있어서,
    상기 하나 이상의 후보들은 제1 언어로 제공되는 시스템.
  52. 청구항 50에 있어서,
    상기 하나 이상의 후보들은 제2 언어로 제공되는 시스템.
  53. 청구항 50에 있어서,
    상기 하나 이상의 후보들은 상기 제1 언어와 제2 언어의 조합으로 제공되는 시스템.
  54. 청구항 50에 있어서,
    상기 하나 이상의 후보들은 하나 이상의 심볼들을 포함하는 시스템.
  55. 청구항 34에 있어서,
    상기 하나 이상의 프로세서들은 입력을 수취하고, 상기 입력에 응답하여 중앙 레지스트리 내에 전자식으로 저장되고, 상기 스크립트를 포함하는 사용 가능한 스크립트들의 리스트를 생성하고, 상기 스크립트의 선택을 나타내는 제2 입력을 수취하고, 상기 제2 입력에 응답하여 상기 중앙 레지스트리로부터 상기 스크립트를 검색하고, 상기 스크립트 리포지토리에 상기 스크립트를 저장하는 시스템.
KR1020127029136A 2010-04-12 2010-04-12 입력 방법 에디터에 대한 확장 프레임워크 KR101681281B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2010/071691 WO2011127640A1 (en) 2010-04-12 2010-04-12 Extension framework for input method editor

Publications (2)

Publication Number Publication Date
KR20130072209A KR20130072209A (ko) 2013-07-01
KR101681281B1 true KR101681281B1 (ko) 2016-12-12

Family

ID=44798249

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127029136A KR101681281B1 (ko) 2010-04-12 2010-04-12 입력 방법 에디터에 대한 확장 프레임워크

Country Status (7)

Country Link
US (1) US9086735B2 (ko)
EP (1) EP2558923A4 (ko)
JP (1) JP5921527B2 (ko)
KR (1) KR101681281B1 (ko)
CN (1) CN103080873B (ko)
TW (1) TWI526880B (ko)
WO (1) WO2011127640A1 (ko)

Families Citing this family (176)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8677377B2 (en) 2005-09-08 2014-03-18 Apple Inc. Method and apparatus for building an intelligent automated assistant
US9318108B2 (en) 2010-01-18 2016-04-19 Apple Inc. Intelligent automated assistant
US8977255B2 (en) 2007-04-03 2015-03-10 Apple Inc. Method and system for operating a multi-function portable electronic device using voice-activation
US10002189B2 (en) 2007-12-20 2018-06-19 Apple Inc. Method and apparatus for searching using an active ontology
US9330720B2 (en) 2008-01-03 2016-05-03 Apple Inc. Methods and apparatus for altering audio output signals
US8996376B2 (en) 2008-04-05 2015-03-31 Apple Inc. Intelligent text-to-speech conversion
US20100030549A1 (en) 2008-07-31 2010-02-04 Lee Michael M Mobile device having human language translation capability with positional feedback
US8676904B2 (en) 2008-10-02 2014-03-18 Apple Inc. Electronic devices with voice command and contextual data processing capabilities
US10241752B2 (en) 2011-09-30 2019-03-26 Apple Inc. Interface for a virtual digital assistant
US10241644B2 (en) 2011-06-03 2019-03-26 Apple Inc. Actionable reminder entries
US20120309363A1 (en) 2011-06-03 2012-12-06 Apple Inc. Triggering notifications associated with tasks items that represent tasks to perform
US9431006B2 (en) 2009-07-02 2016-08-30 Apple Inc. Methods and apparatuses for automatic speech recognition
US10276170B2 (en) 2010-01-18 2019-04-30 Apple Inc. Intelligent automated assistant
US8682667B2 (en) 2010-02-25 2014-03-25 Apple Inc. User profiling for selecting user specific voice input processing information
US9104306B2 (en) * 2010-10-29 2015-08-11 Avago Technologies General Ip (Singapore) Pte. Ltd. Translation of directional input to gesture
US8689181B2 (en) 2010-11-23 2014-04-01 Axeda Corporation Scripting web services
US9262612B2 (en) 2011-03-21 2016-02-16 Apple Inc. Device access using voice authentication
US8996749B2 (en) 2011-05-26 2015-03-31 Candi Controls, Inc. Achieving a uniform device abstraction layer
US10057736B2 (en) 2011-06-03 2018-08-21 Apple Inc. Active transport based notifications
US8825748B2 (en) * 2011-07-06 2014-09-02 Sharp Laboratories Of America, Inc. Sandboxed daemon process invocation through HTTP
CN103164122B (zh) 2011-12-08 2015-10-28 中兴通讯股份有限公司 一种调用通讯录内容的方法及装置
US9348479B2 (en) 2011-12-08 2016-05-24 Microsoft Technology Licensing, Llc Sentiment aware user interface customization
US9378290B2 (en) 2011-12-20 2016-06-28 Microsoft Technology Licensing, Llc Scenario-adaptive input method editor
US10134385B2 (en) 2012-03-02 2018-11-20 Apple Inc. Systems and methods for name pronunciation
US10417037B2 (en) 2012-05-15 2019-09-17 Apple Inc. Systems and methods for integrating third party services with a digital assistant
US9721563B2 (en) 2012-06-08 2017-08-01 Apple Inc. Name recognition system
EP2864856A4 (en) * 2012-06-25 2015-10-14 Microsoft Technology Licensing Llc SEIZURE METHOD EDITOR APPLICATION PLATFORM
US8959109B2 (en) 2012-08-06 2015-02-17 Microsoft Corporation Business intelligent in-document suggestions
US9898445B2 (en) * 2012-08-16 2018-02-20 Qualcomm Incorporated Resource prefetching via sandboxed execution
EP2891078A4 (en) 2012-08-30 2016-03-23 Microsoft Technology Licensing Llc CHOICE OF CANDIDATE BASED ON CHARACTERISTICS
CN108052489A (zh) * 2012-08-31 2018-05-18 微软技术许可有限责任公司 用于输入法编辑器的个人语言模型
US9547647B2 (en) 2012-09-19 2017-01-17 Apple Inc. Voice-based media searching
EP3809407A1 (en) 2013-02-07 2021-04-21 Apple Inc. Voice trigger for a digital assistant
US10652394B2 (en) 2013-03-14 2020-05-12 Apple Inc. System and method for processing voicemail
US10748529B1 (en) 2013-03-15 2020-08-18 Apple Inc. Voice activated device for use with a voice-based digital assistant
JP6112968B2 (ja) * 2013-05-23 2017-04-12 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation コマンド生成方法、装置及びプログラム
WO2014197334A2 (en) 2013-06-07 2014-12-11 Apple Inc. System and method for user-specified pronunciation of words for speech synthesis and recognition
WO2014197335A1 (en) 2013-06-08 2014-12-11 Apple Inc. Interpreting and acting upon commands that involve sharing information with remote devices
KR101922663B1 (ko) 2013-06-09 2018-11-28 애플 인크. 디지털 어시스턴트의 둘 이상의 인스턴스들에 걸친 대화 지속성을 가능하게 하기 위한 디바이스, 방법 및 그래픽 사용자 인터페이스
US10176167B2 (en) 2013-06-09 2019-01-08 Apple Inc. System and method for inferring user intent from speech inputs
JP6398257B2 (ja) * 2013-06-27 2018-10-03 株式会社リコー 通信管理システム、通信端末、通信システム、およびプログラム
WO2015018055A1 (en) 2013-08-09 2015-02-12 Microsoft Corporation Input method editor providing language assistance
CN104424180B (zh) * 2013-09-09 2017-11-07 佳能株式会社 文本输入方法及设备
US9384191B2 (en) 2013-09-25 2016-07-05 International Business Machines Corporation Written language learning using an enhanced input method editor (IME)
US10296160B2 (en) 2013-12-06 2019-05-21 Apple Inc. Method for extracting salient dialog usage from live data
US9430463B2 (en) 2014-05-30 2016-08-30 Apple Inc. Exemplar-based natural language processing
US10170123B2 (en) 2014-05-30 2019-01-01 Apple Inc. Intelligent assistant for home automation
US9633004B2 (en) 2014-05-30 2017-04-25 Apple Inc. Better resolution when referencing to concepts
US9966065B2 (en) * 2014-05-30 2018-05-08 Apple Inc. Multi-command single utterance input method
US9715875B2 (en) 2014-05-30 2017-07-25 Apple Inc. Reducing the need for manual start/end-pointing and trigger phrases
US9338493B2 (en) 2014-06-30 2016-05-10 Apple Inc. Intelligent automated assistant for TV user interactions
US9818400B2 (en) 2014-09-11 2017-11-14 Apple Inc. Method and apparatus for discovering trending terms in speech requests
US10074360B2 (en) 2014-09-30 2018-09-11 Apple Inc. Providing an indication of the suitability of speech recognition
US10127911B2 (en) 2014-09-30 2018-11-13 Apple Inc. Speaker identification and unsupervised speaker adaptation techniques
US9668121B2 (en) 2014-09-30 2017-05-30 Apple Inc. Social reminders
US10225245B2 (en) * 2014-11-18 2019-03-05 Auth0, Inc. Identity infrastructure as a service
US9710316B1 (en) 2014-12-18 2017-07-18 Amazon Technologies, Inc. Flexible scripting platform for troubleshooting
US9785489B1 (en) * 2014-12-18 2017-10-10 Amazon Technologies, Inc. Secure script execution using sandboxed environments
US10152299B2 (en) 2015-03-06 2018-12-11 Apple Inc. Reducing response latency of intelligent automated assistants
US9886953B2 (en) 2015-03-08 2018-02-06 Apple Inc. Virtual assistant activation
US9721566B2 (en) 2015-03-08 2017-08-01 Apple Inc. Competing devices responding to voice triggers
US10567477B2 (en) 2015-03-08 2020-02-18 Apple Inc. Virtual assistant continuity
CN104820695A (zh) * 2015-04-29 2015-08-05 百度在线网络技术(北京)有限公司 一种资源获取方法及装置
US10460227B2 (en) 2015-05-15 2019-10-29 Apple Inc. Virtual assistant in a communication session
US10200824B2 (en) 2015-05-27 2019-02-05 Apple Inc. Systems and methods for proactively identifying and surfacing relevant content on a touch-sensitive device
US10083688B2 (en) 2015-05-27 2018-09-25 Apple Inc. Device voice control for selecting a displayed affordance
US9578173B2 (en) 2015-06-05 2017-02-21 Apple Inc. Virtual assistant aided communication with 3rd party service in a communication session
US11025565B2 (en) 2015-06-07 2021-06-01 Apple Inc. Personalized prediction of responses for instant messaging
US20160378747A1 (en) 2015-06-29 2016-12-29 Apple Inc. Virtual assistant for media playback
US10740384B2 (en) 2015-09-08 2020-08-11 Apple Inc. Intelligent automated assistant for media search and playback
US10747498B2 (en) 2015-09-08 2020-08-18 Apple Inc. Zero latency digital assistant
US10671428B2 (en) 2015-09-08 2020-06-02 Apple Inc. Distributed personal assistant
US10331312B2 (en) 2015-09-08 2019-06-25 Apple Inc. Intelligent automated assistant in a media environment
US10366158B2 (en) 2015-09-29 2019-07-30 Apple Inc. Efficient word encoding for recurrent neural network language models
US11010550B2 (en) 2015-09-29 2021-05-18 Apple Inc. Unified language modeling framework for word prediction, auto-completion and auto-correction
US10691473B2 (en) 2015-11-06 2020-06-23 Apple Inc. Intelligent automated assistant in a messaging environment
US10956666B2 (en) 2015-11-09 2021-03-23 Apple Inc. Unconventional virtual assistant interactions
US10049668B2 (en) 2015-12-02 2018-08-14 Apple Inc. Applying neural network language models to weighted finite state transducers for automatic speech recognition
US10223066B2 (en) 2015-12-23 2019-03-05 Apple Inc. Proactive assistance based on dialog communication between devices
CN106933561A (zh) * 2015-12-31 2017-07-07 北京搜狗科技发展有限公司 语音输入方法和终端设备
US10446143B2 (en) 2016-03-14 2019-10-15 Apple Inc. Identification of voice inputs providing credentials
US9934775B2 (en) 2016-05-26 2018-04-03 Apple Inc. Unit-selection text-to-speech synthesis based on predicted concatenation parameters
US9972304B2 (en) 2016-06-03 2018-05-15 Apple Inc. Privacy preserving distributed evaluation framework for embedded personalized systems
US11227589B2 (en) 2016-06-06 2022-01-18 Apple Inc. Intelligent list reading
US10249300B2 (en) 2016-06-06 2019-04-02 Apple Inc. Intelligent list reading
US10049663B2 (en) 2016-06-08 2018-08-14 Apple, Inc. Intelligent automated assistant for media exploration
DK179309B1 (en) 2016-06-09 2018-04-23 Apple Inc Intelligent automated assistant in a home environment
US10192552B2 (en) 2016-06-10 2019-01-29 Apple Inc. Digital assistant providing whispered speech
US10067938B2 (en) 2016-06-10 2018-09-04 Apple Inc. Multilingual word prediction
US10509862B2 (en) 2016-06-10 2019-12-17 Apple Inc. Dynamic phrase expansion of language input
US10586535B2 (en) 2016-06-10 2020-03-10 Apple Inc. Intelligent digital assistant in a multi-tasking environment
US10490187B2 (en) 2016-06-10 2019-11-26 Apple Inc. Digital assistant providing automated status report
DK179343B1 (en) 2016-06-11 2018-05-14 Apple Inc Intelligent task discovery
DK179415B1 (en) 2016-06-11 2018-06-14 Apple Inc Intelligent device arbitration and control
DK179049B1 (en) 2016-06-11 2017-09-18 Apple Inc Data driven natural language event detection and classification
DK201670540A1 (en) 2016-06-11 2018-01-08 Apple Inc Application integration with a digital assistant
US10474753B2 (en) 2016-09-07 2019-11-12 Apple Inc. Language identification using recurrent neural networks
US10043516B2 (en) 2016-09-23 2018-08-07 Apple Inc. Intelligent automated assistant
US10275595B2 (en) * 2016-09-29 2019-04-30 Trap Data Security Ltd. System and method for characterizing malware
US11281993B2 (en) 2016-12-05 2022-03-22 Apple Inc. Model and ensemble compression for metric learning
CN106445189B (zh) * 2016-12-16 2020-03-17 北京小米移动软件有限公司 候选词显示方法及装置
US10593346B2 (en) 2016-12-22 2020-03-17 Apple Inc. Rank-reduced token representation for automatic speech recognition
US11204787B2 (en) 2017-01-09 2021-12-21 Apple Inc. Application integration with a digital assistant
US20200150780A1 (en) * 2017-04-25 2020-05-14 Microsoft Technology Licensing, Llc Input method editor
US10417266B2 (en) 2017-05-09 2019-09-17 Apple Inc. Context-aware ranking of intelligent response suggestions
DK201770383A1 (en) 2017-05-09 2018-12-14 Apple Inc. USER INTERFACE FOR CORRECTING RECOGNITION ERRORS
DK201770439A1 (en) 2017-05-11 2018-12-13 Apple Inc. Offline personal assistant
DK180048B1 (en) 2017-05-11 2020-02-04 Apple Inc. MAINTAINING THE DATA PROTECTION OF PERSONAL INFORMATION
US10726832B2 (en) 2017-05-11 2020-07-28 Apple Inc. Maintaining privacy of personal information
US10395654B2 (en) 2017-05-11 2019-08-27 Apple Inc. Text normalization based on a data-driven learning network
DK179496B1 (en) 2017-05-12 2019-01-15 Apple Inc. USER-SPECIFIC Acoustic Models
DK179745B1 (en) 2017-05-12 2019-05-01 Apple Inc. SYNCHRONIZATION AND TASK DELEGATION OF A DIGITAL ASSISTANT
DK201770429A1 (en) 2017-05-12 2018-12-14 Apple Inc. LOW-LATENCY INTELLIGENT AUTOMATED ASSISTANT
US11301477B2 (en) 2017-05-12 2022-04-12 Apple Inc. Feedback analysis of a digital assistant
DK201770432A1 (en) 2017-05-15 2018-12-21 Apple Inc. Hierarchical belief states for digital assistants
DK201770431A1 (en) 2017-05-15 2018-12-20 Apple Inc. Optimizing dialogue policy decisions for digital assistants using implicit feedback
US10311144B2 (en) 2017-05-16 2019-06-04 Apple Inc. Emoji word sense disambiguation
US10403278B2 (en) 2017-05-16 2019-09-03 Apple Inc. Methods and systems for phonetic matching in digital assistant services
US10303715B2 (en) 2017-05-16 2019-05-28 Apple Inc. Intelligent automated assistant for media exploration
US20180336892A1 (en) 2017-05-16 2018-11-22 Apple Inc. Detecting a trigger of a digital assistant
DK179549B1 (en) 2017-05-16 2019-02-12 Apple Inc. FAR-FIELD EXTENSION FOR DIGITAL ASSISTANT SERVICES
US10657328B2 (en) 2017-06-02 2020-05-19 Apple Inc. Multi-task recurrent neural network architecture for efficient morphology handling in neural language modeling
US10445429B2 (en) 2017-09-21 2019-10-15 Apple Inc. Natural language understanding using vocabularies with compressed serialized tries
US10755051B2 (en) 2017-09-29 2020-08-25 Apple Inc. Rule-based natural language processing
US10540187B2 (en) * 2017-10-13 2020-01-21 International Business Machines Corporation User-initiated dynamic data application programming interface creation
US10878019B2 (en) * 2017-10-20 2020-12-29 Dropbox, Inc. Hosted storage for third-party services
US10979235B2 (en) 2017-10-20 2021-04-13 Dropbox, Inc. Content management system supporting third-party code
US11113411B2 (en) 2017-10-20 2021-09-07 Dropbox, Inc. Authentication security model for a content management system
US10636424B2 (en) 2017-11-30 2020-04-28 Apple Inc. Multi-turn canned dialog
US10394584B2 (en) * 2017-12-18 2019-08-27 Atlassian Pty Ltd Native execution bridge for sandboxed scripting languages
US10733982B2 (en) 2018-01-08 2020-08-04 Apple Inc. Multi-directional dialog
US10733375B2 (en) 2018-01-31 2020-08-04 Apple Inc. Knowledge-based framework for improving natural language understanding
US10789959B2 (en) 2018-03-02 2020-09-29 Apple Inc. Training speaker recognition models for digital assistants
US10592604B2 (en) 2018-03-12 2020-03-17 Apple Inc. Inverse text normalization for automatic speech recognition
US10818288B2 (en) 2018-03-26 2020-10-27 Apple Inc. Natural assistant interaction
US10909331B2 (en) 2018-03-30 2021-02-02 Apple Inc. Implicit identification of translation payload with neural machine translation
US11145294B2 (en) 2018-05-07 2021-10-12 Apple Inc. Intelligent automated assistant for delivering content from user experiences
US10928918B2 (en) 2018-05-07 2021-02-23 Apple Inc. Raise to speak
US10984780B2 (en) 2018-05-21 2021-04-20 Apple Inc. Global semantic word embeddings using bi-directional recurrent neural networks
DK179822B1 (da) 2018-06-01 2019-07-12 Apple Inc. Voice interaction at a primary device to access call functionality of a companion device
US11386266B2 (en) 2018-06-01 2022-07-12 Apple Inc. Text correction
DK180639B1 (en) 2018-06-01 2021-11-04 Apple Inc DISABILITY OF ATTENTION-ATTENTIVE VIRTUAL ASSISTANT
US10892996B2 (en) 2018-06-01 2021-01-12 Apple Inc. Variable latency device coordination
DK201870355A1 (en) 2018-06-01 2019-12-16 Apple Inc. VIRTUAL ASSISTANT OPERATION IN MULTI-DEVICE ENVIRONMENTS
US10496705B1 (en) 2018-06-03 2019-12-03 Apple Inc. Accelerated task performance
US11010561B2 (en) 2018-09-27 2021-05-18 Apple Inc. Sentiment prediction from textual data
US11170166B2 (en) 2018-09-28 2021-11-09 Apple Inc. Neural typographical error modeling via generative adversarial networks
US10839159B2 (en) 2018-09-28 2020-11-17 Apple Inc. Named entity normalization in a spoken dialog system
US11462215B2 (en) 2018-09-28 2022-10-04 Apple Inc. Multi-modal inputs for voice commands
US11475898B2 (en) 2018-10-26 2022-10-18 Apple Inc. Low-latency multi-speaker speech recognition
US11638059B2 (en) 2019-01-04 2023-04-25 Apple Inc. Content playback on multiple devices
US11348573B2 (en) 2019-03-18 2022-05-31 Apple Inc. Multimodality in digital assistant systems
US11475884B2 (en) 2019-05-06 2022-10-18 Apple Inc. Reducing digital assistant latency when a language is incorrectly determined
DK201970509A1 (en) 2019-05-06 2021-01-15 Apple Inc Spoken notifications
US11307752B2 (en) 2019-05-06 2022-04-19 Apple Inc. User configurable task triggers
US11423908B2 (en) 2019-05-06 2022-08-23 Apple Inc. Interpreting spoken requests
US11140099B2 (en) 2019-05-21 2021-10-05 Apple Inc. Providing message response suggestions
US11496600B2 (en) 2019-05-31 2022-11-08 Apple Inc. Remote execution of machine-learned models
DK180129B1 (en) 2019-05-31 2020-06-02 Apple Inc. USER ACTIVITY SHORTCUT SUGGESTIONS
DK201970511A1 (en) 2019-05-31 2021-02-15 Apple Inc Voice identification in digital assistant systems
US11289073B2 (en) 2019-05-31 2022-03-29 Apple Inc. Device text to speech
US11468890B2 (en) 2019-06-01 2022-10-11 Apple Inc. Methods and user interfaces for voice-based control of electronic devices
US11360641B2 (en) 2019-06-01 2022-06-14 Apple Inc. Increasing the relevance of new available information
WO2021056255A1 (en) 2019-09-25 2021-04-01 Apple Inc. Text detection using global geometry estimators
US11681804B2 (en) 2020-03-09 2023-06-20 Commvault Systems, Inc. System and method for automatic generation of malware detection traps
CN111937366B (zh) * 2020-04-09 2023-08-01 北京微动数联科技有限公司 Web请求处理方法和装置
US11061543B1 (en) 2020-05-11 2021-07-13 Apple Inc. Providing relevant data items based on context
US11038934B1 (en) 2020-05-11 2021-06-15 Apple Inc. Digital assistant hardware abstraction
US11755276B2 (en) 2020-05-12 2023-09-12 Apple Inc. Reducing description length based on confidence
US11490204B2 (en) 2020-07-20 2022-11-01 Apple Inc. Multi-device audio adjustment coordination
US11438683B2 (en) 2020-07-21 2022-09-06 Apple Inc. User identification using headphones
CN111858675A (zh) * 2020-07-24 2020-10-30 北京玉符科技服务有限公司 自定义属性编辑器
US11637937B2 (en) * 2020-11-18 2023-04-25 Canon Kabushiki Kaisha Information processing apparatus, information processing method, and non-transitory storage medium
CN112800473B (zh) * 2021-03-17 2022-01-04 好人生(上海)健康科技有限公司 一种基于大数据安全屋的数据处理方法
US11620110B1 (en) * 2022-06-07 2023-04-04 Snowflake Inc. Registration of multiple user defined functions
US11930045B1 (en) 2023-04-28 2024-03-12 Snowflake Inc. Secure network access from sandboxed applications

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8245270B2 (en) 2005-09-01 2012-08-14 Microsoft Corporation Resource based dynamic security authorization

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0260658A (ja) 1988-08-29 1990-03-01 Terumo Corp 中空糸膜型物質移動装置
JP3589682B2 (ja) 1993-03-16 2004-11-17 富士通株式会社 文書作成装置
JPH07129565A (ja) 1993-10-29 1995-05-19 Sharp Corp 情報処理装置
US6003050A (en) * 1997-04-02 1999-12-14 Microsoft Corporation Method for integrating a virtual machine with input method editors
US7174288B2 (en) * 2002-05-08 2007-02-06 Microsoft Corporation Multi-modal entry of ideogrammatic languages
US7725922B2 (en) * 2006-03-21 2010-05-25 Novell, Inc. System and method for using sandboxes in a managed shell
CN105589571A (zh) 2007-04-09 2016-05-18 谷歌股份有限公司 客户端输入方法以及输入法编辑器服务器
CN101286154B (zh) * 2007-04-09 2016-08-10 谷歌股份有限公司 输入法编辑器用户档案
CN101286094A (zh) 2007-04-10 2008-10-15 谷歌股份有限公司 多模式输入法编辑器
CN105204617B (zh) 2007-04-11 2018-12-14 谷歌有限责任公司 用于输入法编辑器集成的方法和系统
JP2009223782A (ja) 2008-03-18 2009-10-01 Nec Corp 文字入力装置、携帯端末装置、文字入力方法及びそのプログラム
KR20100056938A (ko) * 2008-11-20 2010-05-28 엔에이치엔(주) 웹 페이지를 생성하기 위해 사용되는 컴포넌트 기반의 자바웹 애플리케이션 개발 프레임워크
CN101488154B (zh) * 2009-03-04 2011-10-05 西安双捷科技有限责任公司 用于网页的文字输入实现方法
KR101743122B1 (ko) 2009-11-27 2017-06-15 구글 인코포레이티드 클라이언트-서버 입력 방법 편집기 구조

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8245270B2 (en) 2005-09-01 2012-08-14 Microsoft Corporation Resource based dynamic security authorization

Also Published As

Publication number Publication date
JP2013524372A (ja) 2013-06-17
JP5921527B2 (ja) 2016-05-24
CN103080873A (zh) 2013-05-01
TW201205352A (en) 2012-02-01
US9086735B2 (en) 2015-07-21
KR20130072209A (ko) 2013-07-01
TWI526880B (zh) 2016-03-21
CN103080873B (zh) 2016-10-05
WO2011127640A1 (en) 2011-10-20
US20120041752A1 (en) 2012-02-16
EP2558923A1 (en) 2013-02-20
EP2558923A4 (en) 2014-11-19

Similar Documents

Publication Publication Date Title
KR101681281B1 (ko) 입력 방법 에디터에 대한 확장 프레임워크
US7509251B2 (en) Mock translating software applications at runtime
TWI510965B (zh) 輸入方法編輯器整合
US20150269140A1 (en) Dynamic software localization
US7389223B2 (en) Method and apparatus for testing a software program using mock translation input method editor
US8904012B2 (en) Client-server input method editor architecture
Little et al. Translating keyword commands into executable code
US20070244691A1 (en) Translation of user interface text strings
WO2008122243A1 (fr) Procédé et système permettant d'appeler rapidement une commande de programme et système destiné à un procédé d'entrée
KR20090127936A (ko) 클라이언트 입력 방식
JP2010524137A (ja) 第2言語モードを有する入力メソッドエディタ
CN105183724A (zh) 一种翻译方法及电子设备
WO2022146933A1 (en) Producing idiomatic software documentation for many programming languages from a common specification
KR102280535B1 (ko) 장문 번역 방법 및 시스템
KR102158544B1 (ko) 모바일 기기의 입력 인터페이스 내에서 맞춤법 검사를 지원하는 방법 및 시스템
US20170075660A1 (en) System and method of writing computer programs
Little et al. Sloppy programming
Rajput et al. Mobile Apps Development: Towards Incorporating Regional and National languages in Flutter App
Kumar et al. Panmozhi Vaayil-A Multilingual Indic Keyboard Interface for Business and Personal Use
CN105183725A (zh) 一种翻译网页上文字的方法及电子设备
Tateosian et al. Beginning Python
Shivakumar et al. A Free Tamil Keyboard Interface for Business and Personal Use
Ihrig et al. The Command Line Interface
Serrano The Computer Scientist Nightmare: My Favorite Bug
Burdette The JavaScript Pocket Guide

Legal Events

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

Payment date: 20191112

Year of fee payment: 4