KR20190042490A - 음성 제어 시스템 - Google Patents
음성 제어 시스템 Download PDFInfo
- Publication number
- KR20190042490A KR20190042490A KR1020187031220A KR20187031220A KR20190042490A KR 20190042490 A KR20190042490 A KR 20190042490A KR 1020187031220 A KR1020187031220 A KR 1020187031220A KR 20187031220 A KR20187031220 A KR 20187031220A KR 20190042490 A KR20190042490 A KR 20190042490A
- Authority
- KR
- South Korea
- Prior art keywords
- string
- program code
- input
- natural language
- component
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 178
- 230000006870 function Effects 0.000 claims abstract description 96
- 230000014509 gene expression Effects 0.000 claims description 38
- 238000011524 similarity measure Methods 0.000 claims description 15
- 230000008569 process Effects 0.000 claims description 11
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 230000001419 dependent effect Effects 0.000 claims description 4
- 230000004044 response Effects 0.000 claims description 4
- 238000005286 illumination Methods 0.000 description 10
- 239000011800 void material Substances 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 9
- 238000005259 measurement Methods 0.000 description 8
- 241000282414 Homo sapiens Species 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 230000007613 environmental effect Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 208000024891 symptom Diseases 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 241000282412 Homo Species 0.000 description 2
- 206010037660 Pyrexia Diseases 0.000 description 2
- 230000036760 body temperature Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 206010011224 Cough Diseases 0.000 description 1
- 206010019233 Headaches Diseases 0.000 description 1
- 208000002193 Pain Diseases 0.000 description 1
- 208000036071 Rhinorrhea Diseases 0.000 description 1
- 206010039101 Rhinorrhoea Diseases 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 201000010099 disease Diseases 0.000 description 1
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 231100000869 headache Toxicity 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000003862 health status Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000015654 memory Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 235000013311 vegetables Nutrition 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
- G10L15/00—Speech recognition
- G10L15/22—Procedures used during a speech recognition process, e.g. man-machine dialogue
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
- G10L25/00—Speech or voice analysis techniques not restricted to a single one of groups G10L15/00 - G10L21/00
- G10L25/48—Speech or voice analysis techniques not restricted to a single one of groups G10L15/00 - G10L21/00 specially adapted for particular use
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Acoustics & Sound (AREA)
- Human Computer Interaction (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Signal Processing (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
- Machine Translation (AREA)
- Devices For Executing Special Programs (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
자연어를 수단으로 하는 시스템(100)의 제어를 위한 절차는 다수의 문자열 프로그램 코드 컴포넌트(10, 10', 10")를 제공하는 단계를 시스템(100)에 포함한다. 이때 하나의 문자열 프로그램 코드 컴포넌트(10)는 각각 자연어로 된 표현(13)을 포함하는 정의문자열(12)을 포함하고, 정의문자열(12)에 분명히 배정된 프로그램 코드 세그먼트(14)를 포함한다. 이때 이 프로그램 세그먼트는 자연어로 된 표현(13)에 배정된 기능을 구현한다. 다수의 문자열 프로그램 코드 컴포넌트들에서 적어도 하나의 문자열 프로그램 코드 컴포넌트는 계속해서 매개변수를 위한 메소드(16)을 포함하는데, 이 메소드를 통해 문자열 프로그램 코드 컴포넌트 매개변수 입력을 지원하도록 설정되어 있고, 이때 이 매개변수를 수단으로 하여 이 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능이 특수화될 수 있다.
Description
본 발명은 자연어를 사용하는 가운데 시스템을 제어하거나 프로그래밍 하는 절차 및 그에 맞춰 설정된 시스템을 포함한다.
인간 주위에서 작업하고 인간과 긴밀히 소통하는 기술 시스템의 문맥에서는 여러 가지 문제들이 발견되는데, 단순한 알고리즘을 바탕으로 하는 일반적 해법은 그 문제들의 복잡성을 해소할 수 없다. 그 한 예로 휴머노이드 로봇을 들 수 있다. 거기서 발생한 기술적 문제들과 그 문제들을 해소할 수 있는 해법들의 가능성은 너무나도 광범위하여 매우 큰 전문가 그룹이 함께 참여하지 않는 한 적용하기 힘들다.
기술 시스템 및 기술적 응용의 음성 제어는 그 자체로는 이미 잘 알려져 있다. 가령 모바일 기기의 어플리케이션이라는 문맥이나 혹은 로봇 제어에서 그러하다.
자연어로 프로그래밍하는 절차 역시 수 년 전부터 연구와 개발의 대상인데, 특히 인간과 기계의 대화와 관련된 것들이다. 이는 프로그래머적인 기술에 대한 특별한 교육을 받지 않은 사용자들에게도 자연어로써 기술 시스템을 제어할 수 있는 가능성을 주려는 시도이다.
문제가 발생하는 이유는 자연어가 다중의 뜻을 가지고 있기 때문이며, 항상 명백하거나 직접적으로 주어진 것이 아닌, 문맥정보의 바탕 위에서만 그 이해가 가능하기 때문이다. 또한 인간들은 절차적으로 사고하는 반면, 현행 소프트웨어들은 보다 객체를 중심으로 방향을 잡기 때문에, 보통 사용자에게는 파악하기 어려운 면이 있다.
본 발명의 과제는 앞서 언급한 문제들을 고려하여 자연어를 수단으로 하는 기술 시스템의 제어나 프로그래밍을 개선하고 단순화하는 것이다.
상기 과제는 하나의 절차, 시스템, 그와 병렬 관계에 있는 청구들의 특징을 가진 독립 청구항을 통해서 해결된다. 유리한 디자인 구축과 계승발전의 가능성들은 종속 청구항에 제시되어 있다.
본 발명은 결정적으로는 특별한 자료구조에 바탕을 두는데, 본 발명의 문맥 안에서 문자열 프로그래밍 코드 컴포넌트라고 불리는 자료구조이다. 이 자료구조는 첫째 자연어로 된 표현을 포함하는 정의문자열을 포함한다.
둘째 문자열 프로그래밍 코드 컴포넌트는 정의문자열에 분명히 배정된 프로그램 코드 세그먼트를 포함하는데, 이것은 자연어로 된 표현으로 배정된 기능을 구현하는 세그먼트이다.
정의문자열과 프로그램 코드 세그먼트는 서로 떼려야 뗄 수 없이 밀접하게 연결되어 있으며 하나의 기능 단위를 이룬다. 프로그램 코드 세그먼트는 말하자면 정의문자열의 의미를, 즉 자연어로 된 표현의 내용을 구현한다.
본 발명의 문맥 안에서 "자연어로 된 표현"이라는 개념에 관해서는 이 표현이 자연어로 된 한 단어 혹은 여러 개의 단어들을 포함하는 것이라고 이해해야 할 것이다. 이때 이 표현은 오로지 자연어의 기본형식 상에서 하나의 혹은 여러 개의 단어들만을 포함할 수 있다. 하지만, 이 표현은 우선적으로는 자연어로 된 문법적으로 정확한 완전한 문장을 포함한다. 그 중간 형식들도 마찬가지로 가능하다.
그러한 자료구조, 즉 본 발명의 문자열 프로그램 코드 컴포넌트는 하나의 폐쇄된, 고도로 캡슐화되고 기능적인 단위를 제공한다. 문자열 프로그램 코드 컴포넌트의 내부 구현은 외부로는 보이지 않고 숨어있을 수 있다. 아래 상세하게 기술하는 바와 같이, 문자열 프로그램 코드 컴포넌트는 간단한 방식으로, 예를 들면 플러그 앤 플레이를 사용하여 시스템에 통합되거나 자연어를 통하여 작동될 수 있다. 이러한 방식으로 시스템은 제 3자를 통해 임의로 확장되거나 보완될 수 있다. 문자열 프로그램 코드 컴포넌트를 특수화해야 하는 필요성은 최저치로 제한된다. 프로그램 세그먼트를 프로그래밍하는 데는 예를 들면, Java나 C++ 등과 같이 보편적인 프로그래밍 언어가 사용될 수 있다.
그리하여 자연어를 가지고 시스템 제어를 하기 위한 절차의 우선적 실시예는 특히 위에서 서술한 시스템 내의 문자열 프로그램 코드 컴포넌트 다수를 제공하는 단계를 포함한다.
발명에서 우선시되는 실시예에 따르면, 적어도 위에서 서술한 문자열 프로그램 코드 컴포넌트의 다수에서 적어도 하나가 매개변수 입력을 지원하는 데까지도 설정되어 있는데, 이때 이 매개변수의 입력을 이용하면 이 문자열 프로그램 코드 컴포넌트의 프로그램의 코드 세그먼트를 통해 제공된 기능이 특수화될 수 있다.
다시 말해서 문자열 프로그램 코드 컴포넌트의 프로그램 세그먼트를 구현하는 기능은 고정되거나 불변하는 것이어서는 안 되고, 매개변수 입력을 통해 특수화될 수 있어야 한다. 가령 프로그램 세그먼트를 통해 데이터뱅크로부터 날짜를 알아내기 구현된 기본기능은 매개변수를 가지고 어떤 도표 혹은 그 도표 상의 어떤 난들이 선택되어 읽어져야 하는지에 관한 데까지도 특수화될 수 있다.
더 정확히 말하자면, 이 적어도 하나의 문자열 프로그램 코드 컴포넌트는 매개변수 입력을 위한 고유한 메소드를 제공할 수 있다. 이 문자열 프로그램 코드 컴포넌트가 시스템의 제어장치에 의해 만들어지면, 매개변수 입력을 위한 메소드가 작동되어 문자열 프로그램 코드 컴포넌트는 - 말하자면 - 필요한 매개변수를 파악하는 일을 스스로 맡게 된다.
다른 실시예에 따르면, 다수의 문자열 프로그램 코드 컴포넌트들에서 하나의 문자열 프로그램 코드 컴포넌트가 매개변수 입력을 지원하도록 설치되어 있을 수 있는데, 이는 이 문자열 프로그램 코드 컴포넌트의 정의문자열의 한 지분이 문자열 프로그램 코드 컴포넌트를 만들어내는 시스템의 제어장치를 위해 뚜렷이 특수화되어야 하는 매개변수로서 표시되어 있음을 통해 가능하다. 이를 위해 소프트웨어 기술에서 기본적으로 잘 알려진 기술들이 사용될 수 있는데, "마케팅" 혹은 "주석"이라는 개념과 연관이 있는 기술들이다. 이 경우 매개변수 파악은 제어장치를 통해, 즉 문자열 프로그램 코드 컴포넌트의 정의문자열 상의 하나의 특수화된 표시를 바탕으로 이루어진다. 이 문서에서 사용된 "마케팅"이라는 개념의 실현은 소프트웨어에서 기본적으로 잘 알려진 주석, XML, JSON 등의 기술들로만 제한되는 것은 아니다. 이를 위해서는 똑같이 "마케팅"의 목적을 달성하는 새로운 기술들이 사용될 수 있다. 이 기술에는 가령 어떤 프로그래밍 언어의 소스 코드에서의 예약된 키워드를 사용하거나, 적당한 컴파일러 내지 해석기를 통한 기술이 속한다.
하나의 실시예에 따르면, 어떤 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능은 매개변수를 통해 특수화될 수 있는데, 이 매개변수에는 자유롭게 정의된 매개변수 타입이 추가적으로 배정될 수 있다. 이러한 매개변수 타입은 기존 프로그래밍 언어로부터 잘 알려진 일차적인 타입들, 즉String, Integer, Float, Date, Boolea 등의 타입들과는 차이가 날 수 있다. 이러한 문맥에서, 매개변수 타입들은 특별한 (측량)단위나 그와 비슷한 것이 될 수 있다.
자유롭게 정의가 가능한 범주들, 즉 예를 들어 "채소"와 같은 것들도 매개변수 타입으로 정해질 수 있다. 또한, 하나의 혹은 다수의 "스탠더드 매개변수"로 이루어진, 혹은 하나 혹은 다수의 자유롭게 정의된 매개변수로 이루어진 하나의 매개변수 타입을 정의하거나 배정시키는 것도 가능하다. 가령 온도를 나타내는 어떤 매개변수를 위해서는 부동소수점 및 구체적인 단위(℃)를 포함하는 매개변수 타입이 정의될 수 있다.
시스템의 측면에서 - 혹은 우선적인 문자열 프로그램 컴포넌트 자체의 측면에서 매개변수 값을 파악하는 것이 시도된다는 사실은 또 하나의 다른 장점도 가지고 있는데, 바로 잘못된 입력, 즉 예를 들어 매개변수의 타입이나 값과 관련된 오류의 경우 입력 시에 즉시 검사가 가능하다는 점이다. 이때 특수화된, 자유롭게 정의된 매개변수 타입들을 정하는 것이 도움이 되는데, 가령 매개변수가 하나의 숫자를 제시하면 그에 해당하는 측량단위, 즉 추가적인 매개변수 타입으로 배정될 수 있고, 그와 동시에 본질적인 측량단위를 (예: "m" 혹은 "km") 제시할 수 있는 경우에 그러하다. 이를 통해 잘못된 매개변수 입력으로 발생한 오류가 - 흔히 나중에서야, 가령 사용기간 중에야 나타나기 쉬운데 반해 - 여기서는 좀 더 빨리 발견되어 걸러질 수 있다. 문자열 프로그램 코드 컴포넌트의 특수화된 메소드를 수단으로 한 매개변수 입력, 파악, 검증은 특별한 장점을 가진다. 메소드는 문자열 프로그램 코드 컴포넌트의 특수함에 맞게 적용될 수 있다. 이와 관련하여 시스템은 적용될 필요가 없다. 각 프로그래머는 적용된 문자열 프로그램 코드 컴포넌트의 메소드를 매개변수 입력에 첨가하고 해당 문자열 프로그램 코드 컴포넌트의 프로그램 코드의 요구에 맞춰 특수하게 적용시킬 수 있다.
자유롭게 정의 가능한 매개변수 타입을 정하는 것은 또 한 가지의 장점을 가진다. 즉 그것을 통해 다양한 타입들이 배정된 다양한 매개변수들이 임의의 순서로 입력될 수 있다는 것이다. 그후 오로지 매개변수 타입을 통한 구체적인 배정이 매개변수 입력 내지 시스템의 측면에서 이루어질 수 있다.
입력 시 매개변수 타입의 검증을 위해서 다음에 자세히 서술하는 패턴 매칭 절차를 이용할 수 있는데, 이 절차는 일반적으로 입력문자열을 문자열 프로그램 코드 컴포넌트의 정의문자열과 비교하는 경우에 사용된다. 우선적 실시예에 따라 다수의 문자열 프로그램 코드 컴포넌트들에서 적어도 하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능은 반환 코드를 공급할 수 있다. 반환 코드들은 단순히 논리적이거나 혹은 숫자적 값이나 문자열 혹은 그와 비슷한 것들일 수 있지만 복잡한 구조들이나 복수의 기능들일 수도 있다.
그러한 반환코드는 블록기능으로써 자연어로 블록으로 표시되거나 주석이 달릴 수 있고, 시스템의 측면에서는 소정의 고유 저장소에 저장될 수 있다. 이 영역에 저장된 코드는 어떤 의미에서 보면 역사 또는 기억을 나타낸다. 블록 설정으로 인해 문자열 프로그램 코드 컴포넌트의 측면에서는 단순한 방식으로, 즉 자연어로 분명하게 저장된 반환 코드는 언제든지 다시 재사용될 수 있다. 그리하여 문맥을 생성하고 저장하며 단순하고 분명한 방식으로 이용할 수 있는 가능성이 존재한다.
하나의 반환코드에는, 그리고 마찬가지로 매개변수에는 자유롭게 정의될 수 있는 반환코드타입이 배정될 수 있는데, 즉 가령 배정된 측량단위와 관련된 반환코드의 성격을 결정 짓는 반환코드 타입이 배정될 수 있다.
아래에서 제어구조와 관련하여 더 자세히 서술하게 되는 바, 두 번째 문자열 프로그램 코드 컴포넌트는 첫번째 문자열 프로그램 코드 컴포넌트의 반환 코드를 사용할 수 있고, 특히 두 번째 문자열 프로그램 코드 컴포넌트의 프로그램 세그먼트를 통해 제공된 기능의 특수화를 위한 매개변수로 이용할 수 있다. 특히 조건부 분기명령문의 문맥에서의 접근방식이 우선적으로 이용될 수 있는데, 이 명령들은 이전의 문자열 프로그램 코드 컴포넌트의 변환 코드를 재사용할 수 있는 명령들이다.
이때 첫번째 우선적 실시예에 따라 시스템은 다음과 같이 설정되어 있다. 즉, 일반적으로 자연어 표현을 포함하는 입력문자열을 접수할 때, 입력문자열이 소정의 유사성 측정기준에 따라 문자열 프로그램 코드 컴포넌트의 정의문자열과의 소정의 유사성을 보이는 경우 프르그램 코드 세그먼트를 통해 구현된 기능을 수행하도록 설치되어있는 것이다. 단순하게 말하자면 문자열 프로그램 코드 컴포넌트의 기능은 시스템이 자연어로 된 입력을 받아들임으로써 작동된다는 말이고, 이때 이 입력은 문자열 프로그램 코드 컴포넌트의 정의문자열에 본질적으로 적합하다는 말이다.
입력문자열과 문자열 프로그램 코드 컴포넌트의 정의문자열을 비교하기 위한 유사성 측정기준으로는 현행 기술상으로 이미 잘 알려진 유사성 측정기준이 사용될 수 있다. 입력문자열과 정의문자열을 비교하는 절차 역시 마찬가지이다. 이를 위해서는 수많은 절차들이 현행 기술상 잘 알려져 있는데, 예를 들면 기존의 패턴 매칭 절차가 있다. 예를 들어 0과 1 사이의 숫자적 값을 수단으로 하는 소정의 유사성은 사용된 유사성 측정기준에 따라 지정될 수 있고, 어떤 방식으로 입력문자열이 시스템으로부터 얻어질 수 있는지에 따라 여러 가지 가능성으로 변용될 수도 있다. 여기서 구분해야 할 것은 예를 들어 언어로 입력하는 입력과 문자열로의 변환 혹은 문자열의 직접적인 입력, 예를 들면 키보드를 통한 입력 등이다. 특수화된 유사성 측정기준이나 비교절차는 본 발명의 대상이 아니다. 가장 간단한 경우, 입력문자열에 대해서는 이 입력문자열이 자연어 표현의 소정의 지분을 정확히 혹은 대략적으로 포함하는가의 여부에 관해서까지 분석될 수 있다. "정확히"라는 말은 단어의 일치성을 뜻한다. "대략적"이라는 말은 문법적인 예외가 (예를 들어 단수/복수, 격, 의미 등) 허락되고, 예를 들어 쉼표 등의 구두점은 무시될 수 있다는 뜻이다. 동의어나 동의개념도 유사한 것으로 간주될 수 있다.
한 실시예에 따르면 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트는 시스템과 연결된 기기의 제어를 위한 기능을 구현한다. 우선적 응용 사례는 가정용 기기의 제어이다. 또 다른 우선적 응용 사례는 로봇 등의 제어이다. 계속해서 정보검색 역시, 즉 예를 들어 공공 온라인 도서관 등에서 위에서 기술한 절차의 사용으로 더 간편해질 수 있을 것이라고 상상해볼 수 있다.
또 다른 실시예에 따르면, 매개변수 입력을 위한 메소드는 문자열 프로그램 코드 컴포넌트와 사용자 간의 대화를 구현한다. 그 외에 대화는 문자열 프로그램 코드 컴포넌트의 프로그램 세그먼트를 통해서도 구현될 수 있다. 즉 다시 말해서 매개변수 입력의 메소드 내지는 프로그램 세그먼트로 구현된 기능이 자연어에서 사용자가 질문이나 입력 요구로서 이해하는 과제를 만들어낸다는 것이다. 사용자는 이 질문에 대해서 그에 합당하는 입력으로 답변하는데, 이때 이 입력은 메소드의 측면에서 혹은 기능의 측면에서 또 다른 입력문자열로 접수되거나 가공될 수 있다. 이 질문 대 답변이라는 흐름은 여러 번에 걸쳐 반복될 수 있다. 이때 문자열 프로그램 코드 컴포넌트는 아래 기술하게 될 방식으로 사용자의 이전 입력을 대화의 제어를 위해 끌어들일 수 있다. 이 실시예는 예를 들어 전문가시스템을 제공하기 위해 적합할 수 있다.
첫번째 변용 가능성에 따르면, 대화는 프로그램 세그먼트의 측면에서 구현된 기능을 특수화하기 위해 매개변수 입력에 도움이 될 수 있다. 이때 그러한 매개변수 입력은 주어진 매개변수들이 기대되는 매개변수 타입이나 매개변수 코드 혹은 그와 같은 것들과 관련하여 매개변수 입력을 위한 기능이나 메소드의 측면에서 검증되도록 설치되어 있다. 이를 통하여 오류 입력이 인지되고 방지될 수 있다.
또 하나의 다른 변용 가능성에 따르면, 문답 형식의 대화는 사용자와 시스템 간의 자유로운 대화를 지원할 수 있다. 자유로운 대화란 주어진 문맥에서 기능의 측면에서 사용자를 향한 질문이나 입력 요구와 사용자의 측면에서 그 질문에 답한 답변 간의 교환이라는 뜻이며, 이때 답변은 포맷이나 의미에서 제한되지 않는 답변이다. 사용자의 답변은 시스템 상의 입력문자열의 입력을 통해 이루어지는데, 이 시스템은 이 입력문자열을 문자열 프로그램 코드 컴포넌트의 기능에 전달해준다. 이 입력문자열 또한 일반적으로 자연어의 표현을 포함한다.
또 다른 실시예에 따르면, 문자열 프로그램 코드 컴포넌트의 프로그램 세그먼트는 입력문자열을 시스템으로 송달하기 위한 기능을 구현한다. 다시 말해서 문자열 프로그램 코드 컴포넌트의 기능이 그 기능 자체로 시스템을 위한 입력, 즉 또 다른 시스템의 작동을 위해 이미 제공된 문자열 프로그램 코드 컴포넌트를 작동시킬 수 있는 입력을 만들어낸다.
이 지점에서 문자열 프로그램 코드 컴포넌트를 본 발명에 맞게 이용하는 것의 또 하나의 결정적인 정점이 드러난다. 이 문자열 프로그램 코드 컴포넌트들 중 각각은 캡슐화된 방식으로 특수화된 기능을 제공할 수 있는데, 이 기능은 적합한 문자열 프로그램 코드 컴포넌트들의 정의문자열들을 통해 자연어로 인지되고 작동될 수 있다. 언어 제어를 가능케하는 기존의 시스템들은 일반적으로 폐쇄적 시스템으로 설정되어 있기 때문에 그 복잡성과 확장성과 관련하여 심하게 제한된다. 그와 반대로 본 발명은 간단한 방식으로 문자열 프로그램 코드 컴포넌트를 시스템에 첨부함으로써 시스템을 확장할 수 있게 한다. 복잡한 기술적 내용들, 즉 가령 학문적 프레젠테이션이나 로봇의 제어 같은 것들은 - 관심을 가진 제 3자들이 각자 해결하고자 하는 문제의 각 단면들을 시스템에 첨부될 수 있는 특수화된 문자열 프로그램 코드 컴포넌트를 통해 제공함으로써 - 분(업)화된 방식으로 개선될 수 있다. 그러면 이 문자열 프로그램 코드 컴포넌트들은 상술한 방식으로 이미 주어진 문자열 프로그램 코드 컴포넌트를 사용하여 그 자체로 다른 문자열 프로그램 코드 컴포넌트들을 작동시키기 위한 고유한 기능을 제공한다. 그를 통해 해당 시스템은 개방되고 간단한 방식으로 임의의 방향으로 확장 가능해진다.
그를 위해서는 결정적으로 문자열 프로그램 코드 컴포넌트의 컨셉에 책임이 있다. 기존의 언어 제어 시스템들은 일반적으로 이미 주어진 표준 기능들을 작동시키는 것만을 허락한다. 예를 들면 인터넷 검색을 시작한다든지 메시지를 전송한다든지, 일정을 달력에 기입한다든지와 같은 일들이다. 그와 반대로 본 발명에서는 프로그램 코드를 수단으로 하여, 그리고 자연어로 된 정의문자열에 적용하여 임의의 기능을 제공하고 시스템에 통합시킬 수 있다. 즉 현행 기술상에서 언어제어가 단지 각 시스템의 인간공학을 높이는 반면, 여기서는 프로그램 코드 세그먼트를 수단으로 하여 기능이 각각 특수화되어 제공되고, 이 기능은 정의문자열에 들어있는 자연어로 된 표현의 의미를 프로그래밍 기술로써 실현한다. 그로써 여기서 제안된 문자열 프로그램 코드 컴포넌트의 자료구조는 자연어 표현의 캡슐화되고 기능적인 단위를 수단으로, 그리고 이 표현에 분명하고도 밀접하게 배정된 프로그램 코드 세그먼트를 수단으로 하여 자연어로 된 표현의 의미를 기능적으로 실천할 수 있게 한다고 볼 수 있다.
하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트가 동시에 다양한 상기 기능들을 구현할 수 있음은 당연하다. 특히 프르그램 코드 세그먼트는 대화의 기능이나 입력문자열을 시스템에 전달하는 기능 둘 다를 구현한다. 이는 대화의 흐름 속에서 사용자가 접수된 입력을 바탕으로 또 하나의 발전적인 기능을 가진 또 다른 문자열 프로그램 코드 컴포넌트를 작동시키는 것이 의미가 있다는 것을 발견할 때마다, 의미가 있다.
어떤 의미로는, 시스템은 다양한 문자열 프로그램 코드 컴포넌트들 간의 대화를 자연어를 수단으로 하여 간접적으로 지원한다고 볼 수 있다. 첫번째 단면에 따르면, 문자열 프로그램 코드 컴포넌트는 상술한 바와 같이 입력문자열까지도 자연어로 된 표현 상으로 시스템에 전달하도록 설정되어 있고, 그로써 간접적으로 하나의 또 다른 문자열 프로그램 코드 컴포넌트를 "작동시키"는데, 이때 이 컴포넌트의 정의문자열은 이 입력문자열과 충분히 일치한다. 시스템 측에서 지원된 자연어로 된 다양한 문자열 프로그램 코드 컴포넌트들 간 대화의 또 하나의 단면은 아래에서 더 분명해진다.
구체적으로 기술하자면, 자연어를 수단으로 하는 시스템의 제어 절차는 다음과 같은 단계들을 포함할 수 있다. 즉, 시스템이 입력문자열을 접수한다. 입력문자열은 일반적으로 자연어로 된 표현을 포함한다.
다음 단계에서 시스템은 입력문자열을 시스템에 이미 제공된 문자열 프로그램 코드 컴포넌트의 정의문자열과 비교 - 소정의 유사성 측정기준에 따라 비교하는데, 예를 들면 기존의 패턴 매칭 절차를 수단으로 비교한다.
입력문자열이 소정의 유사성 측정기준에 따라 정의문자열과의 유사성을 보이면, 시스템은 프로그램 세그먼트를 통해 구현된 기능들을 실행한다.
우선적인 실시예에 따르면, 적어도 시스템의 측면에서 받아들인 입력문자열의 적어도 한 지분이 저장될 수 있다. 이것은 우선 문자열 프로그램 코드 컴포넌트의 기능이 실행되도록 이끈 입력문자열에 해당된다. 다른 한 편으로는 혹은 추가적으로는 사용자 측면에서 - 대화의 문맥 안에서 - 적어도 문자열 프로그램 코드 컴포넌트로 입력된 입력문자열의 지분들이 저장될 수 있다.
이때 하나의 실시예에 따르면, 접수된 입력문자열의 한 지분이 문자열 프로그램 코드 컴포넌트 자체 내부에 저장될 수 있다. 게다가 문자열 프로그램 코드 컴포넌트는 적당한 문맥저장-자료구조를 포함할 수 있다. 그러면 문자열 프로그램 코드 컴포넌트 안에 저장된 정보들은 뒷따르는, 그리고 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 구현된 기능의 실행을 지원하기 위해 사용될 수 있다.
이런 방식으로 저장된 입력문자열의 지분들은 뒤따르는 문자열 프로그램 코드 컴포넌트의 기능의 실행을 지원하기 위해 사용될 수 있다. 이런 방식으로 예를 들면 사용자의 대화는 문자열 프로그램 코드 컴포넌트로 제어될 수 있는데, 이것은 문자열 프로그램 코드 컴포넌트가 대화 중에 획득되고 저장된 사용자의 정보들 아래로 대화의 진행을 종속시킴으로써 가능하다.
그 외에도, 접수된 입력문자열의 지분들은 중앙에, 즉 시스템 내부에 저장될 수 있다. 이러한 변용 가능성에 따르면, 이 방식으로 저장된 정보들은 - 일반적으로 각각 자연어로 된 표현을 포함하는 입력문자열로 이루어져 있는 정보들은 - 뒤따라 실행된 또 하나의 문자열 프로그램 코드 컴포넌트에 의해서도 일종의 문맥 및 배경지식으로 이용될 수 있다. 지분들은 중앙에서, 즉 시스템에 저장된 입력문자열은 말하자면 시스템의 단기 혹은 장기기억이라고 볼 수 있어서 문자열 프로그램 코드 컴포넌트들이 각기 적당한 방식으로 불러내 사용할 수 있다. 여기서 시스템을 통해 간접적으로 지원된, 그리고 자연어를 수단으로 한 다양한 문자열 프로그램 코드 컴포넌트들 간 소통의 두 번째 단면이 분명히 드러난다. 즉 문자열 프로그램 코드 컴포넌트는 그것에 배정된 기능을 수행하는 시점에 자연어로 된 정보들을 불러 사용할 수 있는데, 즉 시스템 내에 이전에 저장되었던 문자열의 형식으로 가능한데, 이때 이 문자열의 형식은 또 다른 하나의 문자열 프로그램 코드 컴포넌트의 기능이 이전에 수행되는 동안 저장되어 있던 것이다.
이미 언급한 바와 같이, 어느 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 구현된 기능이 반환 코드를 공급하는 것은 가능하며, 예를 들면 시스템 내에 저장되어 있다가, 뒤따라 실행되는 문자열 프로그램 코드 컴포넌트들이 그것을 불러 사용할 수 있게 된다. 그러한 반환코드는 자연어로 된 표현을 포함하거나, 자연어로 된 표현을 수단으로 주석으로 표시될 수 있다. 숫자적이거나 논리적인 단어들도 반환코드 역할을 할 수 있다. 그 반환 코드들이 자연어 주석으로 표시되어 있다면, 이러한 방식으로 자연어를 수단으로 하여 그것들을 불러 사용할 수 있다. 예를 들면 나중에 작동된 문자열 프로그램 코드 컴포넌트의 매개 변수로 사용될 수 있는 것이다.
또 다른 실시예에 따르면, 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 구현된 기능이 설정되어 있을 수 있는데, 즉 접수되고 저장된 입력문자열로부터 문맥정보를 추론해 내고, 이 문맥정보를 시스템에 저장할 목적으로 설정되어 있는 것이다. 문맥정보를 추론하는 것은 예를 들어 문자열 프로그램 코드 컴포넌트 내에 이전에 저장되었던 자료 그리고/혹은 추론의 규칙을 이용하여 이루어질 수 있다. 그로써 문맥정보는 나중에 계속되는 또 다른 실행된 문자열 프로그램 코드 컴포넌트들에게 추가적인 정보기초로 제공된다. 문맥정보는 우선적으로 자연어로 된 표현을 포함한다. 어떤 의미에서 보면 그러한 문자열 프로그램 코드 컴포넌트는 입력문자열로부터 추론하도록 설정되어 있다고 할 것이다.
문자열 프로그램 코드 컴포넌트는 - 첫번째 실시예에 따르면 - 기존의 방식으로 적당한 프로그래밍 언어를 통해 만들어질 수 있다. 기본 기능들을 제공하기 위해서 대개는 이 프로그래밍 형식이 선택된다. 거기에는 조건부 분기명령문이나 루프 등의 단순한 제어구조들이 속한다.
즉, 다수의 문자열 프로그램 코드 컴포넌트들에서 적어도 하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트는 프로그램의 진행을 제어하는 제어구조를 구현할 수 있다는 말이다. 예를 들면 브랜치, 루프 혹은 조건부 분기명령문 등이다. 근본적으로는 그러한 제어구조 역시 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 수단으로 구현된다. 아래 제시하는 바와 같이, 제어구조가 분류 상 혹은, 그러나 특수화된 방식으로 문자열 프로그램 코드 컴포넌트를 수단으로 하여 구현될 수 있음을 통해서, 시스템 제어를 위한 절차 및 앞으로 더 서술하게 될 자연어로 된 프로그래밍 절차는 근본적으로 더 높은 수준의 프로그래밍 언어의 완전한 기능을 제공할 수 있다.
문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트는 예를 들면 조건부 분기명령문을 구현할 수 있는데, 가령 if문을 구현할 수 있다. 조건부 분기문이 정의하는 조건은 - 첫번째 변용 가능성에 따르면 - 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 구현된 기능을 수단으로 해서 질문으로 설정될 수 있다. 이러한 방식으로 매우 특수한 조건들이 간단한 메소드로 구현되거나 질문으로 설정될 수 있다.
이것은 특히 비교적 일반적인 형식을 통하여, 파악되지 못하거나 매우 어렵게밖에 파악될 수 없는, 즉 예를 들어 "만일 a < b라면, 그러면 ......"과 같은 조건들에 해당한다.
예를 들어 "만일 외부가 밝다면, 그러면......"이라는 종류의 조건은 문자열 프로그램 코드 컴포넌트를 수단으로 질문화될 수 있는데, 이때 이 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트는 외부에 장착된 조도센서에 조회하는 기능을 구현한다. 이 조건을 바탕으로 하는 제어구조를 제공하기 위해서는, 프로그래밍 문자열에 배정된 프로그램을 위한 프로그램 코드를 만들 때, 코드 생성기는 단지 하나의 if문을 만들어야 하고, 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 작동시키는 메소드executeCodesegment()를 if문의 조건으로 기록해야 한다.
두 번째 변용 가능성에 따르면, 적어도 하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트가 조건부 명령을 구현하는 경우, 조건부 명령을 정의하는 조건은 적어도 하나의 연산자와 적어도 하나의 피연산자로 정의될 수 있다. 달리 말해서 이 경우 조건은 일반적 형식 "피연산자1 연산자 피연산자2", 즉 "a < b"를 갖는다. 이 경우에서도 제어구조, 즉 예를 들어 if문이 문자열 프로그램 코드 컴포넌트를 통해 제공되기 때문에, 피연산자들과 연산자는 매개변수로 간주될 수 있는데, 이때 이 매개변수는 프로그래밍 도중에 자연어 상으로 - 아래 서술하게 될 일반적인 방식으로 파악될 수 있다. 이런 일은 특히 이미 서술한 바 있듯이 매개변수 파악을 위한 - 문자열 프로그램 코드 컴포넌트들을 통해 제공된 - 특수한 메소드를 수단으로 하여 일어날 수 있다. 이 메소드는 가령 임의의 숫자적 피연산자를 파악할 수 있고, 임의의 상용 연사자를 선택하도록 제안할 수 있다. 아래 서술하는 바와 같이, 이전의 문자열 프로그램 코드 컴포넌트의 반환코드들 역시 피연산자로 선택될 수 있다.
문자열 프로그램 코드 컴포넌트를 수단으로 하여 if문만 구현될 수 있는 것이 아니라, 임의의 다른 조건부 제어구조들이 - 예를 들면 루프 (예: "while", "for each"등등)와 같이 - 가능하다는 것은 자명하다. if문과는 달리 루프 제어구조의 문맥 안에서 루프블록의 실행 후에 루프의 조건은 새로이 시험된다. 만일 이 시험에 통과되면 계속해서 그 다음 루프가 수행된다. 루프 블록 내에서 작동된 문자열 프로그램 코드 컴포넌트의 기능들이 - 루프의 조건이라는 문맥에서 시험되는 - 하나의 혹은 다수의 값들을 변화시켰을 때, 루프의 조건이 하나의 혹은 다수의 루프 수행 후에 더 이상 충족되지 않는 것은 가능하다. 적어도 하나의 그러한 값의 변화는 문자열 프로그램 코드 컴포넌트, 즉 루프를 구현하는 문자열 프로그램 코드 컴포넌트의 기능에 의해서도, 즉 예를 들면 루프 카운터의 증가를 통해서도 일어날 수 있다. 루프의 일반적 형식은 예를 들어 다음과 같이 구현될 수 있다:
Loop loop_1 = new Loop();
while ( loop_1.excecuteCodesegment() )
{
// 여기서는 코드 생성기를 통해서
// 다른 문장 컴포넌트의 소스 코드가 기록된다.
}
"루프"라는 클래스는 이때 루프를 실현하기 위한 문자열 프로그램 코드 컴포넌트의 구체적인 구현이고, 루프의 다양한 가능성들 - 예를 들면 "do while"루프, "repeat" 루프, "for aech"루프와 같은 가능성들을 실현한다.
아래 자세히 기술하게 되는 바와 같이, 문자열 프로그램 코드 컴포넌트를 수단으로 자연어 상에서 프로그래밍하는 것은, 아날로그 방식에서 결과제어적인 흐름을 가능하게 한다. 즉 그것은 이른바 "EventListener" (이벤트 리스너)들도 문자열 프로그램 코드 컴포넌트를 수단으로 하여 제시될 수 있다는 말이다. 다양한 경과들의 병렬적인 가공작업도 마찬가지이다.
아래에서 제시하는 바와 같이, 본 발명은 그 외에도 오로지 자연어를 수단으로 하는 프로그래밍, 즉 이미 존재하는 문자열 프로그램 코드 컴포넌트만을 바탕으로 하여 다른 새로운 문자열 프로그램 코드 컴포넌트를 만들어낼 수 있는 가능성도 제공한다. 이러한 방식으로, 말하자면 자연어를 수단으로 하는 새로운 프로그래밍이 가능해지는데, 프로그래밍 경험은 거의 필요없게 되고, 그로써 응용에 있어서 새로운 스펙트럼을 열게 된다. 그로써 문자열 프로그램 코드 컴포넌트의 근본적인 컨셉을 종합하면 추가적으로 기존 시스템들의 확장이 간편해지기도 한다.
하나의 실시예에 따르면 자연어 상의 프로그래밍 절차는 다음과 같은 단계들을 포함한다:
문자열 프로그램 코드 컴포넌트의 다수가 위에서 서술한 식으로 제공된다, 즉 다수의 문자열 프로그램 코드 컴포넌트들 중 하나의 문자열 프로그램 코드 컴포넌트는 각기 자연어로 된 표현을 포함하는 정의문자열을 포함하고, 정의문자열에 분명히 배정된 프로그램 코드 세그먼트를 포함하는데, 이때 이 프로그램 코드 세그먼트는 자연어로 된 표현에 배정되는 기능을 구현한다.
그 다음 단계에서는 자연어로 된 프로그래밍 문자열이 하나의 시스템에 입력되는데, 이 시스템은 다수의 문자열 프로그램 코드 컴포넌트들을 저장하고 가공하도록 설치되어 있다.
이때 "자연어로 된 프로그래밍 문자열"이라는 개념은 본 발명의 문맥 안에서 상술한 바 있는 "자연어로 된 표현"이라는 개념과 마찬가지로 기본적으로 하나의 혹은 다수의 자연어 단어들을 포함하는 표현을 말한다. 이때 단어들은 다시금 그들의 기본형식으로 존재할 수 있고, 표현은 하나의, 적어도 부분적으로 문법에 맞는 구체적인 문장 혹은 그러한 문장들의 다수를 포함할 수 있다. 이 표현은 "프로그래밍 문자열"이라고 불리는데, 이 표현이 - 아래 서술하는 바와 같이 - 프로그래밍을 위해, 즉 하나의 산술 논리 장치를 통해 실행 가능한 프로그램을 만들어내는 데 이용되기 때문이고, 그리고 그런 한에서 이 표현이 "프로그래밍 언어"의 "프로그램 코드"로 간주될 수 있기 때문이다. 그리고 이때 이 프로그래밍 언어란 본 발명의 문맥 안에서는 자연어를 말한다.
프로그래밍 문자열이 적어도 문자열 프로그램 코드 컴포넌트의 정의문자열의 부분문자열 하나를 - 실질적으로 - 포함하면, 프로그래밍 문자열의 입력 중에 혹은 그 후에 하나의 혹은 여러 개의 문자열 프로그램 코드 컴포넌트가 다수의 문자열 프로그램 코드 컴포넌트로부터 선택된다. 다시 말해서, 프로그래밍 문자열과 문자열 프로그램 코드 컴포넌트의 정의문자열 간의 일치성이 - 문자열의 바탕에서 - 검색되고, 검색 결과 그 일치성들이 찾아진 경우에는, 해당 문자열 프로그램 코드 컴포넌트들이 선택된다. 다시 한 번 달리 말하자면 문자열 프로그램 코드 컴포넌트들이 프로그래밍 문자열을 수단으로 "작동된다"고 볼 수 있다.
각각 자연어가 다루어지므로, 문자열 프로그램 코드 컴포넌트의 한 부분 문자열과 프로그래밍 문자열의 한 부분이 똑같이 일치할 필요가 없음은 자명하다. 그러한 일치는 단지 소정의 유사성 측정기준에 따른 소정의 제한선만을 넘으면 된다는 것으로 정해질 수 있다. 프로그래밍 문자열과 문자열 프로그램 코드 컴포넌트의 정의문자열을 비교하기 위한 유사성 측정기준으로는 - 아래 발명에 따른 시스템 제어 절차의 첫번째 가능성과 관련하여 서술하게 되는 바와 같이 - 현재 기술상으로 잘 알려진 것을 이용할 수 있다. 프로그래밍 문자열과 정의문자열의 비교 절차 역시 마찬가지이다. 이를 위해서는 현재 기술상 수많은 절차들이 알려져 있는데, 예를 들면 기존 패턴 매칭 절차 같은 것들이다. 예를 들어 유사성 측정기준에 의거하여 0과 1 사이의 숫자적 값을 수단으로 하여 정해질 수 있는 소정의 제한선은 여러 가지 가능성으로 변용될 수 있다. 특정한 유사성 측정기준들이나 비교절차들은 본 발명이 다루는 대상이 아니다. 가장 간단한 경우, 프로그래밍 문자열에 관해서는 그것이 정의문자열의 자연어 상 표현의 소정의 지분을 정확히 혹은 대략 포함하는지의 여부가 분석될 수 있다. 정확하다는 말은 예를 들어 단어의 일치 같은 개념이다. 대략이라는 말은 예를 들면 문법 상의 예외가 (예: 단수/복수, 격, 의미 등등) 허락될 수 있다는 뜻일 수 있다. 동의어나 비슷한 개념들도 유사한 것으로 간주될 수 있다.
그 다음 단계에서는 마지막으로 프로그래밍 문자열에 배정된 프로그램이 만들어지는데, 적어도 하나의 선택된 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트의 바탕 위에서 그러하다.
자연어로 된 프로그래밍을 위해 적당한 시스템은 위에서 서술한 문자열 프로그램 코드 컴포넌트의 다수를 포함한다. 그 외에도 시스템은 자연어로 된 프로그래밍 문자열을 입력하기 위한 입력장치와 입력장치와 연결된 제어장치를 포함한다.
입력 장치는 프로그래밍 문자열을 편집할 수 있게 설정된 에디터를 포함할 수 있는데, 특히 선택된 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능을 특수화하기 위한 입력이나 매개변수 선택과 관련하여 에디터를 포함할 수 있다. 이에 관해서는 아래에서 더 자세히 서술될 것이다.
제어장치는 문자열 프로그램 코드 컴포넌트를 저장하고 입력된 프로그래밍 문자열을 가공하도록 설정되어 있다. 계속해서 제어장치는 - 입력된 프로그래밍 문자열이 문자열 프로그램 코드 컴포넌트의 정의문자열 중 적어도 하나의 부분문자열을 앞에서 서술한 방식으로 포함하는 경우에 - 적어도 하나의 문자열 프로그램 코드 컴포넌트를 선택하도록 설정되어 있다.
또한 스시템은 - 적어도 소정의 프로그래밍 언어를 위한 - 코드생성기와 컴파일러를 포함하는데, 이것들은 선택된 적어도 하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트의 바탕 위에서 프로그래밍 문자열에 배정된 프로그램을 만들어 내도록 설정되어 있다.
이로써 본 발명의 이러한 단면은 기존의 기술과는 근본적으로 차별된다. 기존 기술로는 인공지능의 절차를 바탕으로 자연어로 된 입력을 "이해하려는", 즉 언어학적으로 분석하고 그를 통해 입력된 것의 의미를 파악하려는 노력이 전부이다. 그리고 나서 다음 단계에서 이 의미를 문자열로 옮기는 것이다. 그와는 반대로 본 발명에서 제시된 처리방식은 근본적으로 "이해"에 의존하는 것이 아니라, 엄격하게 결정론적으로 - 입력의 의미론적 오해라는 그 어떤 위험도 없이 - 수행한다. 입력된 프로그래밍 문자열은 언어학적으로나 의미학적으로 분석되는 것이 아니라, 문자열 비교 작업을 바탕으로 단지 저장되었던 문자열 프로그램 코드 컴포넌트의 정의문자열과 비교될 뿐이다. 이는 한 편으로는 계산소모를 거의 필요로 하지 않고, 또 다른 한 편으로는 매우 간단한 메소드로 구현이 가능하다.
본 발명은 또 다른 장점들을 제시한다. 제안된 내용은 높은 수준의 모듈성을 가지고 있다. 문자열 프로그램 코드 컴포넌트들은 서로서로 관련 없이 별개로 분리된다. 다양한 개발자들이 서로에게 종속되지 않은 채 다양한 장소에서 다양한 시간대에 새로운 문자열 프로그램 코드 컴포넌트를 개발하여 시스템에 첨가할 수 있다. 아래에 자세히 제시하는 바와 같이, 각기 기본적이고 협소하게 제한된 기본기능을 구현하는 매우 간단한 문자열 프로그램 코드 컴포넌트들로부터 간단한 방식으로 자연어로 된 프로그래밍을 수단으로 하여 새로운 복잡한 문자열 프로그램 코드 컴포넌트들이 생성되어 시스템에 첨가될 수 있다.
여기 제시된 절차에 따른 문자열 프로그램 코드 컴포넌트의 문자열 코드 세그먼트들은 기계언어 상에서 고급 프로그래밍 언어로 실현된 기초적인 메소드들에 적합하다. 시스템이 문자열 프로그램 코드 컴포넌트를 더 많이 포함하고, 이 문자열 프로그램 코드 컴포넌트들이 점점 더 다양해질수록, 앞에서 제시한 시스템의 틀 안에서 자연어로 된 프로그래밍의 가능성들은 점점 더 커지고, 더욱더 변화 가능해진다.
본 발명 중 이 단면의 주요 목표방향은 프로그램에 관한 전문 지식이 없는 사용자가 프로그램들을 - 자연어를 수단으로 하여 개발자의 측면에서 제공된 문자열 프로그램 코드 컴포넌트의 바탕 위에서 - 스스로 만들어내게 하는 것이다. 이런 방식으로 다양한 응용 분야에서 소프트웨어 시스템의 복잡성이 현저하게 줄어들 수 있고, 그와 관련된 개발 시간과 개발비용도 단축될 수 있다. 기존에 존재하는 시스템의 새 요구와 작은 변화들이 요구되는 경우에, 이제는 더 이상 근본적으로 이미 오랫동안 실습되고 적용되었던 기본설계 상의 변화를 필요로 하는 것이 아니고, 단지 하나의 혹은 다수의 문자열 프로그램 코드 컴포넌트를 보완하는 것, 그리고 - 간단한 방식으로 자연어 상에서 만들어진 프로그램을 수단으로 하여 - 거기에 바탕으로 둔 보완들을 만들어내는 것만이 필요할 것이다. 계속해서 실제적으로, 이제 프로그래밍은 자연어로 가능하게 되고, 프로그램은 말하자면 스스로 알아서 이해하게 되므로, - 대개는 시간이 많이 소요되는 - 주석을 만들어내는 프로그램 코드는 더 이상 필요없게 된다.
서두에서 언급했듯이, 우선적인 실시예에 따르면 선택된 문자열 프로그램 코드 컴포넌트들 중 적어도 하나는 매개변수 코드를 지원하도록 설치되어 있다. 그 매개변수 코드를 수단으로 하여 선택된 문자열 프로그램 코드 컴포넌트들의 포로그램 코드 세그먼트를 통해 구현된 기능은 프로그래밍 중에 자연어 상으로 역동적으로 특수화될 수 있는 것이다. 이것은 우선적으로 고유한 메소드를 수단을 통해 매개변수 입력을 위해 이루어진다.
이 실시예에 따르면, 결국 절차는 선택된 문자열 프로그램 코드 컴포넌트들의 프로그램 코드 세그먼트를 통해 구현된 기능의 특수화를 위해서 적어도 하나의 매개변수의 입력의 단계를 포함한다. 이 단계는 프로그래밍 문자열의 입력 중이나 혹은 그 후에, 그리고 프로그래밍 문자열에 배정된 프로그램을 만드는 단계 전에 일어난다.
매개변수 입력은 이미 상술한 바와 같이 다양한 방식으로 특수하게 일어난다.
앞에서 기술한 절차는 기존의 응용분야의 프로그래밍을 위해, 즉 이른바 무선통신기기를 위한 앱 등을 프로그래밍 하기 위해서 이용될 수 있다. 그 외에 프로그래밍 문자열에 배정된 프로그램을 만드는 단계에서는 소정 플랫폼 상에서 수행 가능한 프로그램 코드가 생성된다. 이미 언급한 바와 같이, 시스템은 모든 임의의 프로그래밍 언어나 수행환경을 위한 코드생성기와 컴파일러를 포함한다.
다른 한 편으로는 자연어로 된 프로그래밍을 통해 - 이미 앞에서 서술한 바와 같이 - 이미 주어져 있는 문자열 프로그램 코드 컴포넌트의 바탕 위에서 새로운 문자열 프로그램 코드 컴포넌트들 역시 생성될 수 있다. 거기에 새로 생성된 문자열 프로그램 코드 컴포넌트들을 위한 정의문자열이 지정되고, 여러 개의 문자열 프로그램 코드 컴포넌트들은 자연어 상으로 된 알맞은 프로그래밍 문자열의 입력을 수단으로 하여 위에서 상술한 방식으로 선택될 수 있다. 그 후 새로 생성된 문자열 프로그램 코드 컴포넌트를 위한 새 프로그램 코드 세그먼트가 프로그래밍 문자열에 배정된 프로그램의 생성 단계에서 자동적으로 생겨난 프로그램 코드를 바탕으로 하여 만들어진다.
자연어 상으로 작업하도록 설치된 시스템의 우선적 실시예는 위에서 서술한 바와 같이 시스템에 통합되어 있는 문자열 프로그램 코드 컴포넌트들의 다수를 포함한다. 이때 문자열 프로그램 코드 컴포넌트들은 이미 언급한 바와 같이 자연어로 된 표현을 포함하는 정의문자열을 포함하고, 정의문자열에 분명히 배정된, 그리고 자연어로 된 표현에 배정된 기능을 구현하는 프로그램 코드 세그먼트를 포함한다. 문자열 프로그램 코드 컴포넌트의 다수로부터 적어도 하나의 문자열 프로그램 코드 컴포넌트는 매개변수 입력을 위한 메소드를 포함하는데, 이 메소드를 통해 이 문자열 프로그램 코드 컴포넌트는 매개변수를 입력을 지원하도록 설정되어 있으며, 이 매개변수를 수단으로 하여, 이 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능이 특수화될 수 있다.
시스템은 - 한 실시예에 따르면 - 입력문자열을 받아들일 때 프로그램 코드 세그먼트를 통해 구현된 기능을 수행하도록 설정되어 있는데, 이 문자열은 소정의 유사성 측정기준에 따라 정의문자열과의 비교에서 소정의 유사성을 나타내는 문자열이다.
이미 위에서 언급한 바와 같이 시스템은 임의의 수로 문자열 프로그램 코드 컴포넌트들을 통합할 수 있다. 이것들은 각각 캡슐화된 기능적인 단위들을 형성하고, 그래서 독립적인 개발자들에 의해 제공될 수 있으며, 이 방식으로 전체 시스템의 기능을 확대할 수 있다. 역시 위에서 서술한 바 있듯이, 하나의 문자열 프로그램 코드 컴포넌트의 기능이 - 적당한 입력문자열이 생성되고 입력문자열로서 시스템에 전달됨으로써 - 또 다른문자열 프로그램 코드 컴포넌트를 작동시키는 것은 가능하다. 다시 말해, 문자열 프로그램 코드 컴포넌트가 작동되는 것은 다른 문자열 프로그램 코드 컴포넌트를 통해 직접적으로 이루어지는 것이 아니라, 언제나 시스템 상에서 간접적으로 이루어진다. 그로써 하나의 문자열 프로그램 코드 컴포넌트의 구현에서 주의해야 할 개별 문자열 프로그램 코드 컴포넌트들 간에 그 어떤 종속관계도 존재하지 않는다. 이때 모든 각각의 문자열 프로그램 코드 컴포넌트는 특수한 부분 문제들에 대한 특수한 해법을 제공한다. 이러한 방식으로 다양한 문자열 프로그램 코드 컴포넌트들의 기능들의 적당한 결합을 통해 복잡한 내용들이 포괄적으로 다루어질 수 있다. 지금까지 존재하지 않았던 기능들은 언제든지 새로운 문자열 프로그램 코드 컴포넌트들의 통합으로 보완될 수 있고, 그것은 이미 주어져 있는 문자열 프로그램 코드 컴포넌트나 시스템이 변화할 필요가 없는 가운데 가능하다.
한 실시예에 따르면, 시스템은 자연어로 된 표현을 포함하는 입력문자열을 받아들이도록 설치된 제어장치를 포함한다. 계속해서 제어장치는 입력문자열과 시스템 안에 제공된 문자열 프로그램 코드 컴포넌트의 정의문자열을 비교하도록 설정되어 있고, 적당한 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 구현된 기능을 - 입력문자열이 정의문자열과의 비교에서 소정의 유사성 측정기준에 따른 소정의 유사성을 나타내는 경우에 - 수행하도록 설정되어 있다.
또 하나의 다른 실시예에 따르면 시스템은 입력장치를 포함한다. 입력 장치는 자연어로 된 사용자의 입력을 받아들이고, 자연어로 된 표현을 포함하는 문자열을 도출하며, 이 문자열을 제어장치에 전달하도록 설정되어있다. 그러한 입력 장치는 예를 들면 기존의 언어인식장치 중 한 종류를 포함할 수 있는데, 이때 이 언어인식장치는 마이크로폰으로 파악된 언어를 적당한 문자열로 변환시키는 장치이다. 계속해서 키보드나 그 비슷한 것들을 수단으로 입력을 허락하는 에디터가 시스템을 위한 입력장치의 역할을 할 수 있다.
시스템은 - 한 실시예에 따르면 - 입력 장치의 또 다른 클래스를 포함할 수 있는데, 이때 이 입력장치는 센서를 통해 주위의 서라운딩 신호를 받아들여 그것들로부터 자연어로 된 표현을 포함하는 입력문자열을 도출하고, 이 입력문자열을 시스템의 제어장치로 전달하도록 설치된다. 좀더 일반적으로 말해 입력 장치는 임의의 소정 트리거신호를 받아들이고 트리거신호에 종속된, 자연어 상 표현을 포함하는 입력문자열을 도출하여, 입력문자열을 시스템에 전달하도록 설치될 수 있다. 트리거신호는 환경신호, 즉 예를 들면 환경적 변화 (예: 조도, 열, 소음과 관련하여) 를 나타내는 환경신호일 수 있다. 그 외에도 그러한 트리거신호는 입력 장치를 자극하여 입력문자열을 만들게 하기 위해 시스템으로부터 전송될 수 있는데, 이때 이 문자열은 예를 들면 입력 장치의 현재 시스템 상태를 설명한다. (예: 조명장치라면 "켜짐/꺼짐", 창문이라면 "열림/닫힘" 등등)
여기서 상술한 시스템의 또 다른 특별함이 드러난다. 인간 사용자 뿐만 아니라 기술 기기들도 사용자로서 자연어 표현을 바탕으로 한 스시템의 제어장치를 통해 서로 대화를 나눈다. 이때 시스템의 제어장치는 인간 사용자의 입력이나 기술 기기의 형태를 한 사용자의 입력 간에 차이를 두지 않고, 받아들인 - 자연어 표현을 포함한 - 입력문자열을 똑같은 방식으로 가공한다. 예를 들면 온도, 조도, 습도, 소음, 그 외 유사한 환경파라미터를 파악하고, 자연어로 서술하며 시스템의 제어장치로 전달하는 입력 기기가 제공될 수 있다.
그에 대한 반응으로 시스템은 적당한 문자열 프로그램 코드 컴포넌트를 작동시킬 수 있고, 그로써 작동된 기기 혹은/그리고 다른 기기들의 기능을 제어할 수 있다.
시스템은 계속해서 출력장치를 포함할 수도 있는데, 이 기기는 사용자와 문자열 프로그램 코드 컴포넌트 간의 대화를 지원하기 위해 출력 신호를 자연어로 사용자에게 전송하도록 설치된다. 이때 출력장치는 특히 스피커나 그와 유사한 것들을 통한 기존의 언어적 출력을 제공할 수 있다. 디스플레이나 유사한 것들을 통한 문자출력도 가능하다. 시스템이 입력 및 출력이 종합된 장치를 포함할 수 있음은 자명하다.
이미 여러 번 상술한 바와 같이, 시스템은 임의의 종류의 기술 기기를 포함할 수 있는데, 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 구현된 기능을 수단으로 하여 제어되도록 설치된 기기이다. 상술된 절차는 사실 특별히 로봇을 제어하기 위한 것이다. 가정용 기기나 오락전자기기 제어 역시 상술한 절차로 일어날 수 있다. 계속해서 위에서 묘사한 절차는 유익하게도 전문가시스템의 구현을 위해 이용될 수도 있다. 특히 문자열 프로그램 코드 컴포넌트들이 다양한 사용자의 측면에서 간단한 방식으로 시스템에 통합될 수 있음으로 인해, 각 사용자를 통해 열린 다양한 지식분야들이 간단한 방식으로 네트워크화 되어 다양하고도, 기존에는 별개로 분리된 상태에서만 존재하던 지식분야들을 간단한 방식으로 한 번에 모을 수 있게 된다.
발명은 아래와 같이 임의의 도면들과 관련해서 몇 가지 실시예를 가지고 예시적으로 설명된다. 도면들은 다음과 같다:
도 1은 발명에 따른 자료구조의 우선적 실시예를 도식적으로 보여준다.
도 2는 발명에 따른 시스템의 첫번째 우선적 실시예의 다양한 컴포넌트를 도식적으로 보여준다.
도 3은 도 2의 시스템을 이용하는 가운데 본 발명에 따른 절차의 첫번째 우선적 실시예의 단계들을 그림으로 보여준다.
도 4는 발명에 따른 절차의 두 번째 우선적 실시예의 단계들을 그림으로 보여준다.
도 5는 발명에 따른 시스템의 두 번째 우선적 실시예의 컴포넌트들을 - 자연어로 된 프로그래밍을 위해서 - 보여준다.
도 6은 도 5의 시스템을 이용하는 가운데 자연어로 된 프로그래밍을 위한 절차의 세 번째 우선적 실시예의 단계를 그림으로 보여준다.
도 1은 발명에 따른 자료구조의 우선적 실시예를 도식적으로 보여준다.
도 2는 발명에 따른 시스템의 첫번째 우선적 실시예의 다양한 컴포넌트를 도식적으로 보여준다.
도 3은 도 2의 시스템을 이용하는 가운데 본 발명에 따른 절차의 첫번째 우선적 실시예의 단계들을 그림으로 보여준다.
도 4는 발명에 따른 절차의 두 번째 우선적 실시예의 단계들을 그림으로 보여준다.
도 5는 발명에 따른 시스템의 두 번째 우선적 실시예의 컴포넌트들을 - 자연어로 된 프로그래밍을 위해서 - 보여준다.
도 6은 도 5의 시스템을 이용하는 가운데 자연어로 된 프로그래밍을 위한 절차의 세 번째 우선적 실시예의 단계를 그림으로 보여준다.
도 1은 문자열 프로그램 코드 컴포넌트 10의 형식으로 자료구조 10의 우선적 실시예를 도식적으로 보여준다. 문자열 프로그램 코드 컴포넌트는 정의문자열 12를 포함하는데, 이것은 자연어로 된 표현 13을 포함하는 문자열이다. 계속해서 문자열 프로그램 코드 컴포넌트는 자연어 표현 13에게 배정된 기능을 구현하는 프로그램 코드 세그먼트 14를 포함한다. 마지막으로 문자열 프로그램 코드 컴포넌트는 매개변수 입력을 위한 메소드 16을 포함한다.
문자열 프로그램 코드 컴포넌트10은 분리될 수 없는 그리고 캡슐화된 단위를 이루는데, 이는 자연어 표현 13을 포함한 정의문자열 12와 자연어 표현 13의 의미를 실현하는 프로그램 코드 세그먼트 14로 이루어져 있다. 내부의 구현은, 즉 예를 들면 메소드 바디와 문자열 프로그램 코드 컴포넌트는 기술적으로 하나의 컴포넌트로 실현되는데, 그것의 내부 구현은 밖으로 드러나지 않게 숨어있다. 내부 구현은 예를 들어 문자열 프로그램 코드 컴포넌트10의 프로그램 코드 세그먼트 14를 실현하는 메소드 바디로 이루어져 있다. 정의문자열 12는 말하자면 자연어로 된 입력문자열을 위한 도킹지점으로 - 아래 그림 13과 관련하여 더 자세히 서술하는 바와 같이 - 문자열 프로그램 코드 컴포넌트10의 기능을 수행하기 위해 사용된다. 그로써 문자열 프로그램 코드 컴포넌트 10은 하나의 폐쇄된, 그리고 고도로 캡슐화되고 기능적인 단위를 제시한다. 프로그램 코드 컴포넌트 10은 플러그 앤 플레이를 통해 그 자체로 알려진 방식으로 시스템 100에 (도 2와 비교할 것) 통합될 수 있다.
문자열 프로그램 코드 컴포넌트 10은 기존의 프로그래밍 언어를 수단으로 하여 제공될 수 있다. 이에 대해서는 C++ 의 예를 통해 아래 제시될 것이다.
문자열 프로그램 코드 컴포넌트 10의 구현을 위해서 C++ 안에 하나의 추상 클래스가 정의되는데, 이때 이 추상 클래스는 구체적인 문자열 프로그램 코드 컴포넌트 10을 위한 기본클래스로 사용된다:
class 문자열 프로그램 코드 컴포넌트 {
public string getSentence() = 0;
public void collectParameter() = 0;
public ResultObject executeCodesegment () = 0;
그 후 구체적인 문자열 프로그램 코드 컴포넌트들은 이 추상 클래스를 구현한다.
예를 들자면 "하나의 숫자에 다른 하나의 숫자를 더하라"라는 자연어 표현을 가진 문자열을 위해 "MyCPlusPlusAddition"라는 클래스가 실현된다. 메소드getSentence()는 자연어로 된 표현을 재공급한다.
class MyCPlusPlusAddition : 문자열 프로그램 코드 컴포넌트 {
public string getSentence(){
return "하나의 숫자에 다른 하나의 숫자를 더하라";
};
public void collectParameter( ... ) {
... some code;
};
public Object executeCodesegment (){
... some code;
};
}
상기 예에서 메소드 collectParameter(...)는 코드 세그먼트의 수행을 위해 꼭 필요한 기능매개변수들을 모으도록 설정되어있다. 이때 입력된 매개변수는 기대되는 매개변수 타입과 관련하여 잘못된 입력을 피하기 위해 그 정확성이 검토될 수 있다. 상기 예에서 메소드 collectParameter(...)의 틀 안에서는 예를 들어 정확히 두 개의 매개변수가 숫자적 값의 형식으로 입력되었음과, 말하자면 임의의 문자열이 입력된 것이 아님이 검토될 수도 있을 것이다.
메소드executeCodesegment( )는 문자열 프로그램 코드 컴포넌트 10의 본래 기능을, 즉 두 개의 숫자를 더하는 것을 구현하도록 되어있다.
위에서 오로지 예를 들어 제시한 문자열 프로그램 코드 컴포넌트의 컨셉은 단지 C++에서뿐만 아니라 임의의 통상 프로그래밍 언어, 즉PHP, Visual Basic, C#, Objective-C 등과 같은 프로그래밍 언어로도 실현될 수 있음은 자명하다.
기존 프로그래밍 언어를 수단으로 한 문자열 프로그램 코드 컴포넌트의 프로그래밍의 대안으로는 자연어를 수단으로 하는 문자열 프로그램 코드 컴포넌트가 될 수 있다. 이에 관해서는 아래에서 도 4와 관련하여 자세히 서술하게 될 것이다.
도 2는 다양한 문자열 프로그램 코드 컴포넌트 10, 10', 10'' 가 통합되어 있는 시스템 100을 예시적으로 보여준다. 사용자 40, 42는 자연어를 수단으로 하여 시스템과 대화할 수 있고, 그로써 다양한 기능의 수행을 촉발할 수 있다. 각각 문자열 프로그램 코드 컴포넌트10, 10', 10"의 프로그램 코드 세그먼트를 통해 구현되어 있는 이 기능들을 수단으로 하여 특히 시스템 100에 연결되어있는 장치 30, 32, 34, 36이 제어될 수 있다. 예를 들면 전등 30, 로봇 32, TV 34, 전문가시스템 36 등이다. 사용자는 인간 사용자 42나 해당 목적으로 설정된 기술 기기 40 둘 다 될 수 있다.
시스템의 개별적인 컴포넌트의 협력은 다음에서 도 3과 도 4와 관련하여 기술할 것이다.
도 3은 사용자 40, 42의 대화를 제어하기 위한 절차의 첫 실시예의 첫 단계들이다.
S1단계에서 적어도 하나의 문자열 프로그램 코드 컴포넌트 10이 시스템 100에 제공된다. 문자열 프로그램 코드 컴포넌트 10은 자연어 표현 13을 포함하는 정의문자열 12를 포함하고, 문자열 12에 분명히 배정된 - 자연어 표현 13에 배정된 기능을 구현하는 - 프로그램 코드 세그먼트 14를 포함한다.
시스템 100은 - 아래에서 서술하는 바와 같이 - 소정의 유사성 측정기준에 따라 정의문자열 12와의 비교에서 소정의 유사성을 보이는 입력문자열을 받아들일 때, 프로그램 코드 세그먼트 14를 통한 기능을 수행하도록 설정되어 있다.
그를 위해 시스템 100은 제어장치 20을 포함한다. 제어 장치 20은 자연어로 된 표현을 포함하는 입력문자열을 받아들이도록 설정되어 있다. 계속해서 제어장치 20은 입력문자열을 문자열 프로그램 코드 컴포넌트 10의 정의문자열 12와 소정의 유사성 측정기준에 따라 비교하고, 입력문자열이 정의문자열 12와의 비교에서 소정의 유사성 측정기준에 따른 소정의 유사성을 보이는 경우, 해당 문자열 프로그램 코드 컴포넌트 10의 프로그램 코드 세그먼트 14를 통해 구현된 기능을 수행하도록 설정되어 있다.
단계 S2에서는 제어장치 20의 측면에서 입력문자열이 받아들여지는데, 예를 들면 인간 사용자 42의 "TV 스위치를 켜"라는 자연어 표현의 형식으로 접수된다. 입력문자열의 입력은 입력 장치 50, 52를 통해 지원될 수 있는데, 이 입력장치는 가령 사용자 42가 음성으로 - 가령 마이크로폰을 이용해 - 입력한 "TV 스위치를 켜"라는 문장을 파악하고, 가량 기존의 언어인지 소프트웨어의 도움을 받아 적당한 문자열로 변환하도혹 설정되어 있다. 그 후 변환된 문자열 "TV 스위치를 켜"는 입력장치 50, 52의 측면에서 입력문자열로서 제어장치 20으로 전달된다.
단계 S3에서는 제어장치가 소정의 유사성 측정기준에 따라 입력문자열을 하나의 혹은 대수의 문자열 프로그램 코드 컴포넌트 10, 10', 10''의 정의문자열과 비교한다.
자연어로 된 표현들을 비교하는 것은 예를 들어 기존에 잘 알려진 패턴 매칭 절차를 수단으로 하여 수행될 수 있다.
도 2로 그려본 사례와 관련하여 다음을 가정하자. 즉 시스템 100에는 문자열 프로그램 코드 컴포넌트10이 통합되어 있고, "TV 스위치를 켜"라는 자연어로 된 표현을 가진 정의문자열 12를 포함한다. 이 정의문자열 12는 거기에 맞는 프로그램 코드 세그먼트 14에 배정되어있는데, 이 세그먼트는 시스템 100에 연결되어 있는 TV를 켜는 기능 34를 구현한다.
"TV 스위치를 좀 켜"라는 입력문자열을 "TV 스위치를 켜"라는 정의문자열과 비교하면, 입력문자열이 정의문자열을 완전히 포함하므로, 그 자체로 유사성이 충분히 있다고 해석될 수 있다.
자연어로 된 표현들을 포함하는 문자열의 비교를 위해서 각각 다양한 유사성 측정기준과 다양한 비교절차들을 이용할 수 있음은 자명하다. 이 분야의 전문가들에게는 이 절차들이 이미 잘 알려져있고, 이는 본 발명의 대상은 아니다. 계속해서 잘 알려진 대로 비교 대상 표현들은 비교 전에 - 가령 "좀"과 같은 (주어진 문맥 안에서 뚜렷한 내용이 없는) 간투사, 관사, 그와 유사한 것들은 생략함으로써 - 적당히 단순화될 수 있다. 계속해서 비교 대상 표현들은 - 가령 동사를 단지 원형으로만 표현함으로써 - 문법적으로 단순화될 수 있다.
위의 사례와 같이, 만일 "TV 스위치 좀 켜"라는 입력문자열이 "TV 스위치 켜"라는 정의문자열과 비교해서 소정의 유사성 측정기준에 따른 소정의 유사성을 보인다면, 단계 S4에서 제어장치는 그에 맞춰 프로그램 코드 세그먼트 14를 통해 구현된 기능을 수행하고, 그를 통해 TV 34가 켜진다.
단계 S3에서 유사성이 불충분한 문자열 프로그램 코드 컴포넌트의 정의문자열이 발견되는 경우, 제어장치 20은 사용자에게 적당한 신호를 보내게 된다. 그와 반대로 시스템이 정의문자열과의 비교에서 각기 어느 정도의 유사성을 보이는 정의문자열의 다수를 발견하면, 이 경우에도 역시 사용자에게 신호가 전달된다. 이 경우 사용자에게는 정의문자열을 이용해서 그의 의견으로 가장 입력문자열에 맞다고 생각하는 문자열 프로그램 코드 컴포넌트를 선택할 수 있는 가능성이 주어질 수 있다.
대안적으로, 자연어로 된 표현을 가진 입력문자열은 하나의 입렵장치에 의해서도 - 가령 조도센서 40에 의해서도 만들어질 수 있고, 제어장치 20으로 전송될 수 있다. 그리고도 입력장치 40은 - 예를 들어 가령 저녁이 되거나 구름 낀 날씨 때문에 실내 조도가 떨어지면 - "어둡다"라는 형식의 입력문자열을 생성하여 제어장치 20에 전송할 수 있다. 그러면 이 제어장치는 위에서 설명한 바와 같, 이 스시템 내에 통합되어 있는 문자열 프로그램 코드 컴포넌트 10, 10', 10''를 검색하여 이 문자열 프로그램 코드 컴포넌트들 중 하나가 충분한 유사성을 가진 정의문자열을 나타내는지를 검토한다. 이 경우가 맞다면, 제어장치 20은 이 정의문자열에 분명히 배정된 기능을 수행할 수 있는데, 그 결과 스시템 100에 연결된 전등 30이 켜지게 된다. 계속해서 기기 40은 이 정의문자열을 자동으로 제어장치 20에 전송하는 것이 아니라, 단지 제어장치 20으로부터 그에 맞는 조회문의가 있을 때라야만 전송하도록 설정될 수 있다.
기술 기기들의 제어에 대한 대안으로는, 문자열 프로그램 코드 컴포넌트 10의 프로그램 코드 세그먼트들14가 사용자 42와 문자열 프로그램 코드 컴포넌트 10 간의 대화를 허락하는 기능을 구현하도록 유리하게 사용될 수도 있다. 특히 전문가시스템의 문맥 안에서, 가령 의학분야에서 이것은 매우 유리하게 사용될 수 있다. 아래 소개하는 사례는 이를 매우 간략하게 예시적으로 보여줄 것이다.
전문가시스템 36은 아래 서술된 방식으로 사용자 42와 문자열 프로그램 코드 컴포넌트10, 10'을 사용하는 가운데 대화할 수 있다. 사용자 42는 예를 들어 "나, 병이 난 것 같아"라는 표현으로 제어장치 20을 통해 전문가시스템 36에 문의할 수 있다. 제어장치 20은 이 표현을 포함하는 입력문자열을 주어진 문자열 프로그램 코드 컴포넌트 10의 정의문자열과 비교하여, 예를 들면 "나는 아프다"라는 표현을 가진 문자열 프로그램 코드 컴포넌트 10의 정의문자열 12를 발견한다. 이 문자열 프로그램 코드 컴포넌트 10의 프로그램 코드 세그먼트 14는 사용자 42와 대화를 다음과 같이 나눈다:
사용자: "나, 병이 난 것 같아"
시스템: "어디가 아파, 몸에 열이 나?"
사용자: "응"
시스템: "체온이 몇 도나 되지?"
사용자: "38.5도"
시스템: "얼마나 오랫동안 열이 났던 거야?"
사용자: "오늘 정오부터"
시스템: "그 외 다른 증상도 있어?"
사용자: "아니"
시스템: "그럼 푹 쉬어. 어쩌면 내일이면 벌써 한결 나아질 거야."
시스템의 아웃풋은 적당한 아웃풋 장치 50, 54를 통해, 가령 스피커 54를 통해, 자연어 상으로 사용자를 위해 출력될 수 있다. 그 외에도 질문이나 참조문이 모니터 상으로 나타나는 것으로 출력이 이루어질 수 있다.
"나, 병이 난 것 같아"라는 입력문자열을 수단으로 작동된 문자열 프로그램 코드 컴포넌트 10은 사용자의 일반적인 건강상태를 묻는 하나의 대화를 구현한다.
이때 별 특별한 점이 드러나지 않으면 대화는 서술된 바와 같이 끝날 수 있다. 하지만 이 경우 대화는 예를 들어 다음과 같이 전개될 수 있다.
.....
시스템: "어디가 아파? 몸에 열이 나?"
사용자: "응"
시스템: "체온이 몇 도나 되지?"
사용자: "39.5도"
시스템: "얼마나 오랫동안 열이 났던 거야?"
사용자: "3일 전부터"
시스템: "그 외 다른 증상도 있어?"
사용자: "응, 두통에 사지가 쑤시고, 콧물과 기침이 나",
문자열 프로그램 코드 컴포넌트 10의 프로그램 코드 세그먼트 14는 대화가 다음과 같이 전개되도록 설정되어 있을 수 있다:
시스템: "네 증상을 볼 때 독감이 걸린 것일 수 있어" ......
동시에 현재 수행된 문자열 프로그램 코드 컴포넌트 10의 기능은 "독감"이라는 표현을 가진 입력문자열을 제어장치 20으로 전송하도록 설정되어 있을 수 있다. 그러면 이런 방식으로, 의심되는 독감의 존재여부와 관련하여 사용자 42의 건강상태를 하나의 독립적이고 정확히 이 목적을 위해 정해진 문자열 프로그램 코드 컴포넌트10'을 통해 검사하기 위해서, 이 문자열 프로그램 코드 컴포넌트10'의 기능이 작동될 수 있다. 그러면 이 기능은 적당한 대화를 수단으로 하여 사용자의 상태에 대한 다른 정보들을 더 물을 수도 있고 적당한 치료를 제안할 수도 있다.
원칙적으로 "독감"이라는 표현을 가진 정의문자열을 나타내는 문자열 프로그램 코드 컴포넌트 10' 는 이미 주어진 문자열 프로그램 코드 컴포넌트10의 질문으로부터 얻어낸 정보들을 재사용할 수 있다. 그러면 적당한, 그리고 기능에 근본적으로 정해져있는 질문들이 선택될 수 있다. 그 때문에 문자열 프로그램 코드 컴포넌트 10이 간접적으로 또 하나의 다른 문자열 프로그램 코드 컴포넌트 10'에게 조회를 했다는 사실은 사용자에게 투명한 사실로 알려진다.
이미 여러번 언급한 바와 같이, 문자열 프로그램 코드 컴포넌트는 사용자의 측면에서 자연어를 수단으로도 프로그래밍될 수 있다. 이것은 아래에서 도 4 와 관련하여 일단 매우 간단하게 소개되는 사례로써 예시적으로 제시하게 될 것이다. 자연어로 된 프로그래밍은 도 5 및 6과 관련하여 아래에서 자세히 서술한다.
첫번째 단계 T1에서 문자열 프로그램 코드 컴포넌트 10, 10', 10''의 다수가 시스템 100에 제공된다. 이 문자열 프로그램 코드 컴포넌트들은 자연어로 된 프로그래밍의 바탕 위에서 또 하나의 다른 문자열 프로그램 코드 컴포넌트를 형성한다.
도 2의 시스템 100과 관련해서는, 시스템에 이미 다양한 문자열 프로그램 코드 컴포넌트 10, 10', 10''가 통합되어 있다고 가정될 수 있다. 예를 들면 문자열 프로그램 코드 컴포넌트10은 TV 34의 스위치를 켜기 위해서. 이것들은 "TV 스위치를 켜"라는 표현을 가진 정의문자열 12를 포함하고, 그와 연결된, TV 34를 켜는 기능을 구현하는 프로그램 코드 세그먼트를 포함한다.
또 다른 하나의 문자열 프로그램 코드 컴포넌트10'은 조도와 실내 조명을 적용하도록 되어있고, "조도를 검사해"라는 정의문자열을 포함한다. 이 문자열 프로그램 코드 컴포넌트10'의 프로그램 세그먼트 14'는 조도센서 40를 불러 조회하는 기능을 구현하는데, 현재 조도의 값을 (자연어 상 표현을 포함하는) 입력문자열의 형식으로 제어장치 20으로 전송하는 역할을 담당한다. 이미 위에서 언급한 바와 같이, 시스템 100에 이미 또 다른 문자열 프로그램 코드 컴포넌트 10''이 주어져 있을 수 있는데, 이 입력문자열을 작업하고, 예를 들어 "어둡다"라는 형식의 표현을 받아들이는 경우 전등 30을 켜고, 혹은 "너무 밝다"라는 표현에 대한 반응으로 어둡게 하는 장치, 예를 들면 블라인드 (미도시)를 내리는 장치에 명령을 전달한다.
그러면 사용자 42는 T2의 단계에서 시스템에 이미 제공된 다수의문자열 프로그램 코드 컴포넌트 10, 10', 10''를 사용하는 가운데 아래와 같이 하나의 새로운 문자열 프로그램 코드 컴포넌트를 정의한다:
첫번째 부분단계 TS2.1에서 사용자 42는 이제 정의되어야 할 새로운 - 자연어로 된 표현을 포함하는 - 프로그램 코드 컴포넌트를 위한 새로운 정의문자열을 준다. 주어진 예에서 정의문자열은 예를 들어 "나 TV를 시청하고 싶어"라는 표현을 포함할 수 있을 것이다.
그 다음 부분단계 TS2.2에서 사용자는 이제 새로 정의되어야 할 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트의 정의를 위한 문자열 결과를 ("프로그래밍 문자열"을) 준다. 문자열 결과의 문자열은 각기 자연어 상 표현을 포함한다. 문자열 결과의 문자열이 소정의 유사성 측정기준에 따라 문자열 프로그램 코드 컴포넌트 10, 10', 10''의 다수 중 문자열 프로그램 코드 컴포넌트 10과의 비교에서 유사성을 나타내면, 즉 다시 말해 "프로그래밍 문자열"이 문자열 프로그램 코드 컴포넌트 10 의 정의문자열 중 적어도 하나의 부분문자열을 포함하면, 새로 정의되어야 할 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트는 문자열 프로그램 코드 컴포넌트 10, 10', 10''의 다수 중 문자열 프로그램 코드 컴포넌트 10의 프로그램 코드 세그먼트 14만큼 확장된다.
앞서 본 경우의 문자열결과는 (프로그래밍 문자열) 구체적으로 다음과 같이 나타내질 수 있다 ("조도를 검사해", "TV 스위치를 켜"). 이때 "조도를 검사해"라는 문자열은 위에서 서술한 문자열 프로그램 코드 컴포넌트 10'의 "조도를 검사해"라는 정의문자열 12의 "조도를 검사해"라는 표현을 포함한다. 그 결과, 정의되어야 할 문자열 프로그램 코드 컴포넌트의 (아직 비어있는) 프로그램 코드 세그먼트는 문자열 프로그램 코드 컴포넌트 10'의 프로그램 코드 세그먼트만큼 보완된다. 이와 비슷한 방식으로, 정의되어야 할 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트는 추가적으로 문자열 프로그램 코드 컴포넌트 10의 프로그램 코드 세그먼트만큼 보완되는데, 그 이유는 "TV 스위치를 켜"라는 문자열이 정의문자열 12의 "TV 스위치를 켜"라는 표현을 포함하기 때문이다.
마무리 단계 T3에서는 위에서 기술한 방식으로 새로 정의된 문자열 프로그램 코드 컴포넌트가 시스템 100에 통합된다.
사용자 42가 이제 "나는 TV를 시청하고 싶어"라는 표현을 시스템 100에 적용하면, 새로 정의된 문자열 프로그램 코드 컴포넌트의 기능이 작동된다. 이 기능은 조도 센서 40에게 조회함으로써 조도를 검사한다. 그에 이어 시스템 100의 측면에서 받아들인 입력문자열("어둡다", "매우 밝다")에 따라 경우에 따라서는 전등 30이 켜지거나 블라인드가 내려간다. 마지막으로 TV 34의 스위치가 켜진다.
그러한 절차를 수단으로 하면 근본적으로 복잡한 흐름들이 프로그래밍될 수 있다는 것은, 즉 자연어만을 수단으로 하여 이미 주어진 문자열 프로그램 코드 컴포넌트들을 사용하는 가운데 프로그래밍 될 수 있다는 것은 자명하다. 특히 브랜치, 조건부명령, 루프 등등이 문자열 프로그램 코드 컴포넌트의 형식으로 구현될 수 있는 것과 같이, 제어구조들 역시 - 흔히 프로세스의 첫 단계에서 - 기본구조로서 그리고 기존의 프로그래밍 언어를 사용하는 가운데 구현될 수 있다. 그러면 이 베이스 컴포넌트들은 새로운 문자열 프로그램 코드 컴포넌트의 후속 프로그래밍의 틀 안에서 자연어를 수단으로 하여 사용될 수 있다.
이를 더 자세히 설명하지 않은 채, "나는 TV를 시청하고 싶어"라는 정의문자열을 가진 새로운 문자열 프로그램 코드 컴포넌트가 아래와 같은 문자열결과를 수단으로 하여 위의 사례에 대한 대안으로 정의될 수도 있을 것이다:
"만일 내가 작업실에 있다면,
조명의 조도를 보름달 밤으로 설정해.
블라인드를 내리고,
작업실 TV 스위치를 켜.
만일 내가 거실에 있다면,
거실 TV 스위치를 켜".
이 사례의 전제조건은 시스템 안에 조건부 명령("만일 .....")을 구현하는 문자열 프로그램 코드 컴포넌트가 존재해야 하며, 그리고도 사용자 위치 ("거실에 .....", "작업실에"), 조절 가능한 조명의 제어 ("조명의 조도를 보름달 밤으로 설정해"), 블라인드 ("블라인드를 내려"), 다양한 TV의 조절 ("작업실 TV 스위치를 켜", "거실 TV 스위치를 켜")을 구현할 수 있어야 하며, 정의문자열을 통해 작동될 수 있어야 한다는 것이다.
도 5에서는 시스템 200의 컴포넌트들이 도식적으로 제시되어 있는데, 이 시스템은 자연어로 된 프로그래밍을 허락하는 시스템이다.
자연어 상으로 프로그래밍하는 것은 주어진 문맥 안에서 - 위에서 이미 개괄적으로 서술된 바와 같이 - 문자열 프로그램 코드 컴포넌트라고 불리는 자료구조에 기인한다.
시스템 200은 저장영역 270을 가진 제어장치 260, 입력장치 240, 저장영역 230 및 코드생성기 282와 컴파일러 284를 포함한다.
입력장치 240은 시스템 이용자가 시스템으로 입력할 수 있게 한다. 입력은 아래 설명하는 바와 같이, 자연어로, 예를 들면 "두 개의 숫자를 덧셈해"라는 자연어로 된 프로그래밍 문자열을 통해 이루어진다. 입력은 키보드나 혹은 그와 유사한 기기를 통해 가능하거나 혹은 음성 입력도 가능하다.
입력장치 240은 에디터 250을 포함하는데, 이 에디터는 아래 설명하는 바와 같이 사용자와 시스템 200 간의 대화를 지원한다. 에디터 250은 원칙적으로 출력장치를 포함하는데, 예를 들면 사용자의 입력이나 제어장치 260의 출력을 나타내 주는 디스플레이가 그것이다.
문자열 프로그램 코드 컴포넌트 210, 210', 210''은 도 1과 관련하여 이미 서술한 바 있다.
매개변수 입력을 위한 메소드 16 이용의 작용방식과 장점들은 아래에서 간단한 예로 인지될 수 있다.
하나의 문자열 프로그램 코드 컴포넌트가 매개변수의 설립과 수집을 위해 메소드 "collectParameter()"를 구현할 수 있다. 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트는 예를 들어 매개변수로 입력가능한 하나의 혹은 여러 장소에서의 시각을 출력해주는 기능을 구현할 수 있다:
public class WhatTime: SentenceComponent
{
public:
String getSentence();
String collectParameter(String *sentence,
String *suggestions,
String receivedWord);
/* 표시하기: nameRueckgabe =>
"도시들의 현재 시각" */
String excecuteCodesegment();
Private:
List<String> selectedCities;
}
public String WhatTime:: getSentence ()
{
return "다음의 도시들에서는 지금 몇 시지?"
}
매개변수 입력을 위한 메소드 16은 다음과 같은 형식을 가진다:
public String WhatTime::collectParameter(String *sentence,
String *suggestions,
String receivedWord);
{
if (!sentence.isEmpty())
{
sentence = "지금 몇 시지?";
return "ok";
}
if (sentens.endsWith("?"))
{
sentence.replaceLastCommaWith(" 그리고 ");
return "EndOfSentence";
}
if (receivedWord == "스위스"))
{
selectedCities.add("스위스")
sentence = sentence + "스위스에서는";
return "ok";
}
else if (receivedWord == "몰타"))
{
selectedCities.add("몰타")
sentence = sentence + "몰타에서는";
return "ok";
}
else if (receivedWord == "런던"))
{
selectedCities.add("런던")
sentence = sentence + "런던에서는";
return "ok";
}
else
{
suggestions = "(Suggestion: 파리),
(Suggestion: 런던),
(Suggestion: 스위스),
(Suggestion: 몰타)";
Return "(Error: 잘못 기입하셨습니다!)";
}
}
public String WhatTime::excecuteCodesegment() {
String timeInCities = "다음 도시들을 위한
시각 출력: ";
for(int i; sizeOf(selectedCities) < i; i++)
{
timeInCities = timeInCities + selectedCities[i] + ": " +
Date.getTime(selectedCities[i]).toString();
}
return timeInCities;
}
프로그래밍 문자열 혹은 입력문자열로서, 예를 들면 에디터 상에서 "몇 시지"를 입력하면 시스템은 매칭 알고리즘을 통해 상기 문자열 프로그램 코드 컴포넌트들 안에서 일치성을 찾게 된다 - 그리고 앞서 기입된 문자열 프로그램 코드 컴포넌트의 정의문자열과의 부분적인 일치성을 발견한다: "다음의 도시들에서는 지금 몇 시지?" 그러면 시스템은 이 문자열 프로그램 코드 컴포넌트의 메소드 "collectParameter"를 작동시킨다.
메소드collectParameter는 아래와 같은 프로그램 코드를 가지고 문장이 정확하게 시작되는지를 검사하고, 그게 아니라면 이 문장은 정정된다:
if (!sentence.isEmpty())
{
sentence = "지금 몇 시지";
return"ok";
}
에디터는 "ok"라는 반환코드로 시스템에게 기입이 정확함을 알린다. 시스템은 자신의 편에서 "sentence"라는 전달인자의 내용을 에디터에게 준다. 에디터는 에디터 상의 정정을 제시하고 사용자의 입력을 기다린다. 사용자가 "스위스"라는 단어를 기입하면 에디터는 이 입력을 시스템에 전달한다. 시스템은 "receivedWord"라는 전달인자에 단어 "스위스"를 배정하고, 메소드 "collectParameter"를 다시 작동시킨다.
매개변수 입력을 위한 메소드 16은 아래의 프로그램 코드를 가지고 문법을 수정하고 선택된 도시들의 목록에 입력을 첨가한다:
if (receivedWord == "스위스"))
{
selectedCities.add("스위스")
sentence = sentence + "스위스에서는, ";
return "ok";
}
이로써 에디터에는 "스위스에서는 지금 몇 시지"라는 진술이 제시된다.
가령 사용자가 "모타"라고 입력했다고 가정하면 메소스드 "collectParameter"는 또 한 번 작동된다. "모타"라는 단 유효한 도시 이름이 아니므로, 그 때문에 매개변수 입력을 위한 메소드 16의 아래와 같은 프로그램 코드를 통해 오류신고가 생성되고 몇 가지의 정정 제안이 시스템에 전달된다:
else
{
suggestions = "(Suggestion: 파리),
(Suggestion: 런던),
(Suggestion: 스위스),
(Suggestion: 몰타)";
Return "(Error: 잘못 기입하셨습니다!)";
}
시스템은 오류 신고를 보내고 에디터에게 제안들을 전달한다. 에디터는 오류 신고와 제안들을 발행한다:
그러면 사용자는 "몰타"로 정정 기입하고 에디터는 정정된 입력을 시스템에 전달한다. 제어기는 "receivedWord"에 "몰타"라는 단어를 배정하고 메소드 "collectParameter"를 다시 작동시킨다. 아래와 같은 프로그램 코드를 통해 또 하나의 입력이 선택된 도시들 목록에 첨가되며 문장은 문법적으로 정정된다:
else if (receivedWord == "몰타"))
{
selectedCities.add("몰타")
sentence = sentence + "몰타에는";
return "ok";
}
이제 문장은 이렇게 나타난다: "스위스에서는 지금 몇 시야, 몰타에는". 사용자는 물음표로 문장의 종결을 나타낸다. 에디터는 이 입력을 시스템에 보낸다. 메소드 "collectParameter"는 또 다시 작동된다. 아래와 같은 프로그램 코드를 통해 문장은 다시 문법적으로 정정되고 반환코드 "EndOfSentence"를 가지고 매개변수가 종결되었다는 신호가 시스템에 전달된다.
if (sentens.endsWith("?"))
{
sentens.replaceLastCommaWith(? und ");
return "EndOfSentence";
}
시스템은 전달인자의 내용 "sentence"를 에디터에게 보낸다. 에디터는 문장을 표시하고 사용자의 기입을 기다린다.
매개변수 입력을 위한 메소드 16의 이용을 대채할 수 있는 대안으로는 매개변수의 입력이 다른 방식으로 - 제어장치 260의 도움으로 - 이루어질 수 있다. 이를 위해서는 하나의 문자열 프로그램 코드 컴포넌트의 메소드가 "partOfSentence"라는 표시로 표시될 수 있다. 메소드는 입력 매개변수를 가지고 있지만, 반환코드는 가지고 있지 않다.
/* 표시하기: partOfSentence = "문자열" */
void setOutput( String output );
이런 방식으로 문자열 프로그램 코드 컴포넌트210은 제어장치 260에게 정의문자열의 한 부분을 매개변수로 해석하라고, 그리고 매개변수의 파악을 맡으라고 알린다. 그러면 파악된 매개변수가 코드생성기 282에 의해 메소드에 배정되어야 한다 (다음에 예시적으로 기입된 프로그램 코드 사례들에서 "문자열 프로그램 코드 컴포넌트"를 대신하여 동의어로 이해될 수 있는 "SentenceComponent"라는 개념 역시 나타난다.)
public class PrintText: public SentenceComponent {
public:
String getSentence();
void executeCodesegment();
/* 표시하기: partOfSentence = "문자열" */
void setOutput ( String output );
private:
String outputString;
}
public void PrintText:: setOutput( String output ){
outputString = output;
}
public PrintText:: getSentence (){
return "화면에 문자열을 출력해."
}
public String PrintText::executeCodesegment() {
println( outputString );
}
위에서 제시된 새로운 문자열 프로그램 코드 컴포넌트210 "화면에 문자열을 출력해"가 시스템 200에 통합되면, 분석을 거친 후 하나의 등록도표에 입력된다. 제어장치 260은 등록 도중에 파악된 표시를 통해 문장부분 "문자열"의 값이 메소드 "setOutput( String output)"의 절달인자로 배정되어야 함을 인지한다.
일반적으로 새로운 문자열 프로그램 코드 컴포넌트 210이 시스템 200에 통합되면, 이는 메타데이터 분석장치로부터 (미도시) 분석되어 향후 사용을 위해 적당한 메타데이터를 미리 확보해둘 수 있다.
메타데이터에는 클래스이름, 기본클래스, 메소드, 변수들이 속한다. 예를 들어 C++에서 문자열 프로그램 코드 컴포넌트가 공급되면, 이때 함께 공급된 클래스선언의 파서와 메소드들에 의해 추상적 클래스 "SentenceComponent"를 구현하는 클래스가 검색된다. 그로써 C++ 메타데이터 분석 장치는 문자열 프로그램 코드 컴포넌트의 클래스를 인지한다. 이때 "getSentence"라는 메소드가 작동되고 클래스 이름을 포함한 정의문자열이 메타데이터 도표에 입력된다. 이렇게 하여 문자열 프로그램 코드 컴포넌트는 시스템에 통합되고 자연어로 된 프로그래밍을 위해 사용될 수 있다.
임의의 통상 프로그래밍 언어를 위한 메타데이터 분석장치들은 문자열 프로그램 코드 컴포넌트의 공개적인 요인을 통해 모든 정보들에 다다를 수 있게 하는 기술을 가지고 있다. C++를 위해서는 문자열 프로그램 코드 컴포넌트의 선언데이터가 메타데이터들을 추출하기 위해 파싱된다. 현대의 기존 프로그래밍 언어들은 자체적으로 이 기술을 갖추고 있다. 예를 들어 Java에서는 "Reflecton"을 통해 클래스의 모든 메타데이터들이 갖추어진다.
현재 시각을 출력하기 위한 문자열 프로그램 코드 컴포넌트 210는 예를 들어 다음과 같은 형식을 가질 수 있다:
public class LocalTime: SentenceComponent {
public:
String getSentence();
Time executeCodesegment();
}
public String LocalTime:: getSentence (){
return "지금 몇 시야?"
}
public String LocalTime::executeCodesegment() {
return Date.getTime();
}
그에 따라 프로그래밍 언어 C++의 메소드의 메타데이터 executeCodesegment() 는 다음과 같은 모습일 수 있다:
프로그래밍 언어 = c++
헤더 파일 = WhatTime.h
클래스이름 = WhatTime
메소드 이름 = executeCodesegment
반환코드 타입 = Time
전달인자 = 없음
메타데이터 분석장치는 반환코드 "Time"을 위해서도 메타데이터를 갖추고 있다:
프로그래밍 언어 = c++
헤더 파일 = time.h
클래스이름 = Time
이로써 메타데이터 분석장치와 제어장치는 문자열 프로그램 코드 컴포넌트의 메타데이터 정보를 소유한다.
메소드executeCodesegment( )는 일반적으로 문자열 프로그램 코드 컴포넌트 210의 본래의 기능을 구현하도록 되어있는데, 예를 들면 매개변수로 파악된 문자열을 출력하거나 2개의 숫자를 더하는 등의 기능이다.
자연어로 된 프로그래밍을 위한 절차는 다음에서 - 도 4에서보다 좀 더 상세하게 - 도 6의 간단한 예를 들어 설명할 것이다.
첫 단계S601에서 문자열 프로그램 코드 컴포넌트 210, 210', 210''의 다수는 앞에서 이미 기술한 방식으로 시스템 200에 제공되고 등록된다 - 예를 들면 현재 시각을 제공하거나 문자열 화면 상 출력을 위한 문자열 프로그램 코드 컴포넌트들.
두 번째 단계 S602에서는 시스템 200의 응용자가 자연어로 된 프로그래밍 문자열을 입력장치 240을 통해 시스템 200에 기입한다.
프로그래밍 문자열은 예를 들어 "지금 몇 시..."로 시작할 수 있다.
제어 장치 260은 입력을 인지하고, 곧이어 프로그래밍 문자열의 이미 입력된 지분을 시스템에 주어진 문자열 프로그램 코드 컴포넌트 210, 210', 210''의 정의문자열과 비교한다. 주어진 예에서라면, 제어장치 260은 "지금 몇 시지?"라는 정의문자열을 가지고 문자열 프로그램 코드 컴포넌트 210이 있음을 인지할 것이고, 응용자에게 이 문자열 프로그램 코드 컴포넌트를 사용하라고 제안하게 될 것이다. 예를 들어 이 제안은 에디터 250을 통해 출력될 수 있을 것이다. 여기 주어진 예에서 응용자는 이 제안을 받아들인다.
이로써 "지금 몇 시지?"라는 정의문자열을 가지고 문자열 프로그램 코드 컴포넌트가 선택되는데, 그 이유는 프로그래밍 문자열 "지금 몇 시..."가 적어도 정의문자열의 한 부분문자열을 포함하기 때문이다.
그러면 프로그래밍 문자열은 그에 알맞게 "지금 몇 시지?"로 보완된다. 자연어로 된 프로그래밍은 예를 들어 응용자가 "출력 ..."을 입력함으로써 계속될 수 있다.
제어장치 260은 또 한 번 이 프로그래밍 문자열과 부분적으로 일치하는 문자열을 인지하는데, 즉 "문자열을 화면에 출력해"를 인지하며, 그에 해당하는 문자열 프로그램 코드 컴포넌트를 사용할 것을 제안한다. 응용자가 이 경우에 이 제안을 수렴하면 제어장치 260은 - 위에서 일반적으로 서술하였듯이 - 매개변수 "문자열"의 파악을 맡아, 이 지점에서 응용자가 아포스트로피로 묶은 문자열이나 혹은 데이터타입의 변수인 "String"을 입력하기를 기대한다.
사용자는 "현재 시각" ("지금 몇 시지?"라는 문자열 프로그램 코드 컴포넌트의 반환코드)을 입력한다. 그러면 프로그래밍 문자열은 다음과 같이 보완된다:
"지금 몇 시지? 현재 시각을 화면에 출력해"
이 지점에서 상술한 절차의 두 가지 유리한 단면이 드러난다. 문자열 프로그램 코드 컴포넌트는 값들을 (현재 시각을 나타내는 시간 표기) 반환할 수 있다. 이러한 반환코드는 시스템 200의 측면에서 예를 들어 저장소 270과 같은 곳에 저장될 수 있다. 우선적 방식으로 그러한 반환코드들은 자연어로 주석이 달리게 되는데, 위의 경우라면 "현재 시각"이라는 주석이 달릴 것이다. 이러한 방식으로 뒤따르는 문자열 프로그램 코드 컴포넌트들은 근본적일 뿐만 아니라 간단한 방식으로 자연어를 통해, 자연어 표현 "현재 시각"을 통한 매개변수 "문자열"의 특수화로 그러한 반환코드를 불러 재사용할 수 있다.
상기 예에서 프로그래밍 문자열의 입력의 단계 및 문자열 프로그램 코드 컴포넌트의 선택의 입력이 여러 번 교체될 수 있다는 사실이 드러난다. 계속해서 매개변수로의 조회 그리고 - 입력이 프로그래밍 문자열의 입력 중에 그리고/혹은 입력 뒤에 필요할 수 있다.
응용자가 프로그래밍 문자열의 입력이 종결되었다고 신호를 보내는 경우, 단계 S604에서 프로그래밍 문자열에 배정된 프로그램이 선택된 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트의 바탕 위에서 생성된다.
이를 위해 코드생성기 282가 두 개의 문자열 프로그램 코드 컴포넌트를 위해 예를 들명 다음과 같은 프로그램 코드를 생성한다:
#include "WhatTime.h"
#include "PrintText.h"
WhatTime whatTime_1= new WhatTime ()
String result_1 = whatTime_1.excecuteCodesegment();
PrintText printText_1 = new PrintText()
printText_1.setOutput( result_1 );
printText_1.excecuteCodesegment();
이때 변수 result_1은 문자열 프로그램 코드 컴포넌트 "지금 몇 시지?"의 변환코드 "현재 시각"에 부합한다. 해당 C++ 컴파일러 284는 상기 프로그램 코드를 변환하고 이 코드를 하나의 수행 가능한 파일로 옮겨 시스템 200 내 소정의 (도면에는 표기되지 않은) 저장고에 저장한다. 수행 가능한 파일이 수행되면 화면 상에 현재 시각이 나타난다.
산술적인 계산들은 자연어로 된 프로그래밍 문자열을 수단으로 하여, 예를 들면 "20에 5을 더하고 덧셈 결과의 루트 값을 구해"의 형식으로, 혹은 - 수학에서 흔히 그러하듯이 - 수학 기호로 기입될 수도 있다. 예를 들면 다음과 같다:
모든 수학 기호의 도형적 표현 외에도 이전에 획득한 결과들을 공식 변수로서 다음 계산을 위해 이용하는 것은 가능하다. 그 결과값들 역시 뒤따르는 문자열 프로그램 코드 컴포넌트에서 매개변수로 사용될 수 있다.
개별 문자열 프로그램 코드 컴포넌트들의 프로그램 코드 세그먼트가 설정되어 있는 프로그래밍 언어는 물론 자연어를 수단으로 하여 상기 방식으로 만들어진 프로그램을 위하여 코드 생성기가 만들어낸 프로그램 코드는 차이가 날 수 있다. 이 두 프로그래밍 언어가 서로 다르면 코드 생성기는 목표 프로그램 언어의 프로그램 코드에 메커니즘을 첨부하는데, 이 메커니즘을 통해 외래 프로그래밍 언어의 프로그램 코드 세그먼트를 - 가령 Proxy를 통해 - 작동시킬 수 있다.
위에서 언급한 바와 같이 시스템은 코드 생성기들과 다양한 목표 프로그램 언어들 (C++, C#, Java, 등등) 을 위한 컴파일러와 수행 플랫폼 (Windows, Linux, Android, etc.)을 포함하는데 응용자에 의해 선택적으로 이용될 수 있다.
다음에는 이 글에 제안된 절차의 또 다른 단면이 예시적으로 서술된다.
제어구조들, 특히 조건부 명령들은 기존 프로그래밍 언어의 핵심적인 구성성분이다. 아래에서 예시적으로 제시되는 바와 같이 여기서 제안된 자연어로 된 프로그래밍을 위한 절차를 수단으로 하여 그러한 제어구조들이 완전한 기능으로 제공될 수 있다.
조건부 명령들은 역시 문자열 프로그램 코드 컴포넌트로 구현된다. 이를 위해 메소드executeCodesegment() - 예를 들어 if문의 경우에 표시하기 기능으로써 controlFlow = "if"라고 표시될 수 있다. 이로써 코드생성기 282는 메소드executeCodesegment()를 if 문의 조건으로 입력하라는 명령을 받는다:
if ( classX.executeCodesegment() ){
// 여기서는 코드 생성기를 통해서
// 다른 문자열 프로그램 코드 컴포넌트의 소스 코드가
//기록된다.
}
'a < b' 형식의 일반적인 조건들은 간단한 방식으로 적당한 문자열 프로그램 코드 컴포넌트가 매개변수의 조회를 위한 메소드를 나타내는 것을 통해 구현되는데, 이때 이 매개변수는 그러한 조건의 연산자와 피연산자에게 프로그래밍 중에 자연어로 조회하도록 설정되어 있다. 이때 연산자와 피연산자의 수나 종류는 여러 가지 가능성으로 변용될 수 있고 역시 프로그래밍 도중에 조회될 수 있다. 이러한 방식으로 임의의 조건문들이 형성될 수 있다.
그 외에도 문자열 프로그램 코드 컴포넌트들은 일반적인 도식을 따르지 않고 자연어와 더 가까운 조건들을 검사하도록 허락하는데, 예를 들어 "만일 외부가 밝다면, 그러면......"이라는 형식이다. 이는 예를 들어 문자열 프로그램 코드 컴포넌트의 측면에서 다음과 같이 실현될 수 있다:
public class MyFirstIF: SentenceComponent {
public:
String getSentence();
/* 표시하기: controlFlow = "IF" */
boolean executeCodesegment();
}
public String MyFirstIF:: getSentence (){
return "만일 외부가 밝다면, 그러면 ..."
}
public boolean MyFirstIF:: executeCodesegment(){
OutdoorBrightnessSensor sensor = new OutdoorBrightnessSensor();
boolean brightness = sensor.isBright();
if ( brightness == true ){
return true;
}
else {
return false;
}
}
클래스 "OutdoorBrightnessSensor"는 외부조도센서에 해당한다. 메소드 "isBright()"는 조도를 측정하고, 조도가 소정의 강도와 차이가 나지 않으면 "true"라는 대답을 거꾸로 전송한다.
코드생성기는 이를 위해 C++에서 다음과 같은 프로그램 코드를 생성한다:
#include "MyFirstIF.h"
MyFirstIF myFirstIF _1 = new MyFirstIF ();
if (myFirstIF _1.executeCodesegment() ){
// 여기서는 코드 생성기를 통해서
// 다른 문자열 프로그램 코드 컴포넌트의 소스 코드가
//기록된다.
}
메소드executeCodesegment()가 불 진릿값 "true"를 거꾸로 전송하면 블록 내의 명령들이 수행된다. 이 명령들은 "그러면"이라는 개념에 따라 입력된 프로그래밍 문자열의 결과로 수행되는 문자열 프로그램 코드 컴포넌트들로부터 온다.
또 하나의 다른 단면에 따르면 문자열 프로그램 코드 컴포넌트의 부분량은 기술적으로 하나의 모듈로 요약될 수 있다. 시스템에 모듈을 등록하는 경우에 이 모듈에 들어있는 모든 문자열 프로그램 코드 컴포넌트들은 메타데이터 도표 1 안에서 하나의 그룹으로 요약된다.
문자열 | 그룹 | 클래스 |
응용 예를 보여줘 | 응용1 | MyApplication |
입력명령을 삽입해 | 응용1 | MyTextField |
버튼을 삽입해 | 응용1 | MyButtom |
그룹 내 모든 문자열 프로그램 코드 컴포넌트들은 다른 나머지 문자열 프로그램 코드 컴포넌트들의 인터페이스를 알고 있다. 그룹의 문자열 프로그램 코드 컴포넌트들 간에는 함축적인 관계가 가정될 수 있다. 문자열 프로그램 코드 컴포넌트 "입력 명령을 삽입해"는 문자열 프로그램 코드 컴포넌트 "응용 예를 보여줘"에 함축적으로 관계를 맺고 있다. 그 결과 설정된 응용 예의 입력명령이 - 입력되어야 하는 매개변수가 이를 먼저 명백하게 규정하지 않는 가운데 - 생성될 수 있다. 계속해서 제어장치 260은 그룹화를 수단으로 하여 같은 그룹 내에서 첫번째 문자열 프로그램 코드 컴포넌트의 반환코드를 뒤따르는 문자열 프로그램 코드 컴포넌트에 함축적으로 배정할 수 있다.
자연어로 된 프로그래밍을 수단으로 여기 제안된 형식에서 역시 파악될 수 있는 또 다른 단면은 다양한 과제들의 병행적 작업이다.
복잡한 시스템들의 제어를 위해서는, 예를 들어 휴머노이드 로봇의 제어를 위해서는 여러 개의 프로그램 흐름이 동시에 이루어져야 할 때가 많다. 이 경우에는 한 가지 과제의 공동처리를 위한 여러 개의 공정을 말한다. 프로그램 흐름의 병렬화는 현재 프로그래밍 언어 상으로 간단히 실현될 수 있다. Java에서는 예를 들어 프로세스의 프로그래밍을 위해 추상 클래스 "Thread"가 병렬적으로 수행되는 프로그램 코드의 구현을 위한 단 하나의 run()이라는 메소드를 가지고 사용될 수 있다.
Public MyThread_1 implements Thread{
public void run()
{
}
}
프로세스를 생성시키기 위해서는 추상 클래스 Thread와 그 메소드 run()를 구현하는 새 클래스가 만들어져야 한다. 그 후 클래스의 인스턴스가 만들어져야 하고 뒤를 이어 클래스 "Thread"의 메소드 start()가 작동되어야 한다.
예를 들면 정의문자열 "블라인드를 내려"를 가진 문자열 프로그램 코드 컴포넌트를 위해서는 클래스이름 "JalousieDown"이라는 전제 조건 하에 다음의 프로그램 코드가 생성된다.
Public MyThread_1 implements Thread{
public void run()
{
JalousieDown jalousieDown_1 = new JalousieDown();
jalousieDown_1.executeCodesegment();
}
}
다음의 - 정의문자열을 통해 기입된 - 문자열 프로그램 코드 컴포넌트를 통해 간단한 병행적 과제가 실현될 수 있다.
다음의 것을 병행해서 실시해:
실내조명의 조도를 보름달 밤으로 맞춰.
블라인드를 내려
정의문자열 "다음의 것을 병행해서 실시해"의 입력을 통해 Java코드 생성기는 는 각각의 문자열 프로그램 코드 컴포넌트를 위해 각기 하나의 프로세스를 만들고, 메소드 run()의 내부에 해당 문자열 프로그램 코드 컴포넌트를 첨가한다.
Public MyThread_1 implements Thread{
public void run()
{
LightDeamer lightDeamer_1 = new LightDeamer();
lightDeamer_1.setLight( "보름달 밤" );
lightDeamer_1.executeCodesegment();
}
}
Public MyThread_2 implements Thread{
public void run()
{
JalousieDown jalousieDown_1 = new JalousieDown();
jalousieDown_1.executeCodesegment();
}
}
MyThread_1.start();
MyThread_2.start();
그로써 두 개의 문자열 프로그램 코드 컴포넌트들은, 즉 각기 프로그램 코드 세그먼트를 통해 구현된 기능들은 메소드 start()의 수행과 동시에 진행된다.
여러번 암시한 바와 같이, 상술한 절차를 수단으로 하여 이미 존재하는 문자열 프로그램 코드 컴포넌트들로부터 새로운 문자열 프로그램 코드 컴포넌트들을 만들어낼 수 있는 가능성도 있다.
새로운 문자열 프로그램 코드 컴포넌트를 만들기 위해서, 새로운 정의문자열을 위한 하나의 혹은 여러 개의 문자열 프로그램 코드 컴포넌트들이 기입되어야 한다. 이를 위해 코드 생성기 282는 새로운 문자열 프로그램 코드 컴포넌트를 위해서 새로운 정의문자열의 반환을 위한 메소드 "getSentence"를, 그리고 새로운 문자열 프로그램 코드 컴포넌트 생성을 위해 끌어들여야 하는 개별적 문자열 프로그램 코드 컴포넌트들을 제공하는 종합적인 기능들을 제시하는 기능의 구현을 위한 메소드 "executeCodesegment()"를 만든다.
매우 간단하고 모범적인 사례에 따르면 "화면에 시각 출력"이라는 문자열의 새 정의문자열을 위해서 - 두 개의 이미 설명한 바 있는 문자열 프로그램 코드 컴포넌트 "지금 몇 시지?"와 "화면에 문자열을 출력해"를 바탕으로 하여 - 하나의 문자열 프로그램 코드 컴포넌트가 만들어질 수 있다.
그에 알맞은 프로그래밍 문자열은 예를 들어 이렇게 기입될 수 있다:
"정의문자열 D와 프로그래밍 문자열 P에 새로운 문자열 프로그램 코드 컴포넌트를 만들어",
이때 D와 P는 각각 타입의 매개변수로서 문자열에 적합하다.
특수화 D = "화면에 시각을 출력하기", P = "지금 몇 시지? 화면 상에 문자열을 출력해"가 목적에 부합한 효과를 낼 수 있을 것이다:
새로운 문자열 프로그램 코드 컴포넌트는 "화면에 시각을 출력하기"라는 문자열을 만들어낸다. 프로그램 코드 세그먼트는 - 자연어로 프그래밍하기 위해 위에서 서술한 바와 같이 프로그래밍 문자열 "지금 몇 시지? 화면에 문자열을 출력해"가 입력될 때 - 코드 생성기가 만들어낸 프로그램 코드에 적합하다.
Claims (41)
- 자연언어를 수단으로 하는 시스템(100) 제어를 위한 절차로서, 다음을 단계를 포함하고:
- 시스템(100)에서 문자열 프로그램 코드 컴포넌트들(10, 10', 10'') 다수의 제공, 이때 하나의 문자열 프로그램 코드 컴포넌트(10)마다 각각 다음의 것들을 포함하며:
- 정의문자열(12), 즉 자연어 표현(13)을 포함하는 정의문자열, 및
- 정의문자열(12)에 분명히 배정된 프로그램 코드 세그먼트(14), 이때 이 프로그램 코드 세그먼트는 자연어 표현(13)에 배정된 기능을 구현하고,
그와 동시에 상기 단계들은 다음과 같은 특징을 가지는 절차:
즉 문자열 프로그램 코드 컴포넌트 다수에서 적어도 하나의 문자열 프로그램 코드 컴포넌트는 매개변수 입력을 위한 메소드(16)를 포함하는데, 이 메소드로써 이 문자열 프로그램 코드 컴포넌트는 매개변수 코드 세그먼트를 지원하도록 설정되어있고, 이 매개변수를 수단으로 하여 이 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통한 기능이 특수화될 수 있음. - 제1항에 있어서,
상기 절차에서는 문자열 프로그램 코드 컴포넌트 다수에서 적어도 하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 컴포넌트를 통해 제공된 기능이 - 시스템을 통해 수행되면 - 하나의 반환코드를 공급하는데, 이때 반환 코드에는 우선적으로 자연어로 된 주석이 달리는, 절차. - 제2항에 있어서,
상기 절차에서는 문자열 프로그램 코드 컴포넌트 다수에서 적어도 또 다른 하나의 문자열 프로그램 코드 컴포넌트가 - 이 또 다른 문자열 프로그램 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능이 시스템을 통해 수행되면 - 반환코드를 다시 불러내 사용할 수 있는데, 특히 이 또 다른 문자열 프로그램 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능의 특수화를 위한 매개변수로서 사용할 수 있고, 이때 반환코드를 불러 재사용하는 것은 반환코드의 자연어 상으로 된 주석을 바탕으로 이루어지는 것을 특징으로 하는, 절차. - 제1항 내지 제3항 중 어느 한 항에 있어서,
상기 절차에서 시스템(100)은 정의문자열(12)과의 비교에서 소정의 유사성 측정기준에 의한 소정의 유사성을 보이는 입력문자열을 받아들일 때 프로그램 코드 세그먼트(14)를 통해 구현된 기능을 수행하도록 설정되어 있는 것을 특징으로 하는, 절차. - 제4항에 있어서,
상기 절차에서 프로그램 코드 세그먼트(14)는 시스템(100)에 연결된 기기 (30, 32, 34, 36 기기)의 제어를 위한 기능을 구현하는 것을 특징으로 하는, 절차. - 제4항 또는 제5항에 있어서,
상기 절차에서 프로그램 코드 세그먼트(14) 혹은 매개변수 입력을 위한 메소드는 문자열 프로그램 코드 컴포넌트(10)와 사용자(42) 간의 대화를 구현하는 것을 특징으로 하는, 절차. - 제6항에 있어서,
상기 절차에서는 대화가 프로그램 코드 세그먼트(14)의 측면에서 구현된 기능의 특수화를 위한 매개변수 입력에 사용되는 것을 특징으로 하는, 절차. - 제6항 또는 제7항에 있어서,
상기 절차에서 사용자(42)와 문자열 프로그램 코드 컴포넌트(10) 간의 대화가 지원되는 것을 특징으로 하는, 절차. - 제1항 내지 제8항 중 어느 한 항에 있어서,
상기 절차에서 프로그램 코드 세그먼트(14)는 입력문자열을 시스템(100)에 전달하기 위한 기능을 구현하는 것을 특징으로 하는, 절차. - 제1항 내지 제9항 중 어느 한 항에 있어서,
상기 절차는 다음의 단계를 포함하는, 절차:
- 시스템(100)을 통한 입력문자열의 접수(S2);
- 시스템(100)을 통한 소정의 유사성 측정기준을 수단으로 한 입력문자열과 정의문자열 (12) 간의 비교; 및
- 입력문자열이 소정의 유사성 측정기준에 의해 정의문자열(12)과의 소정의 유사성을 보이는 경우, 프로그램 코드 세그먼트(14)를 통해 구현된 기능의 - 시스템(100)을 통한 수행. - 제10항에 있어서,
상기 절차는 다음의 단계를 포함하는, 절차:
- 접수된 입력문자열의 저장; 및
- 문자열 프로그램 코드 컴포넌트(10 또는 10')의 프로그램 코드 세그먼트를 통해 구현된 기능의 뒤따르는 수행을 지원하기 위한 저장된 입력문자열의 선택. - 제11항에 있어서,
상기 절차에서는 접수된 입력문자열이 문자열 프로그램 코드 컴포넌트 내에 저장되고, 문자열 프로그램 코드 컴포넌트(10 또는 10')의 프로그램 코드 세그먼트(14)를 통해 구현된 기능의 수행을 위해 문자열 프로그램 코드 컴포넌트를 통해 선택되는, 절차. - 제10항 내지 제12항 중 어느 한 항에 있어서,
상기 절차는 다음을 포함하는, 절차:
- 접수된 입력문자열의 저장;
- 프로그램 코드 세그먼트를 통해 구현된 기능상을 수단으로 하여 입력문자열로부터 문맥정보 추론; 및
- 문맥정보를 시스템에 저장. - 제1항 내지 제3항 중 어느 한 항에 있어서,
상기 절차는 자연어 상으로 프로그래밍하기 위한 절차를 포함하며,
상기 절차는 다음의 단계를 포함하는, 절차:
- 자연어로 된 프로그램 문자열의 입력(S602);
- 다수의 문자열 프로그램 코드 컴포넌트들로부터 - 정의문자열이 문자열 프로그램 코드 컴포넌트들의 정의문자열의 적어도 하나의 부분문자열을 포함하는 경우 - 문자열 프로그램 코드 컴포넌트(210)의 선택(S603); 및
- 선택된 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트의 바탕 위에서 프로그래밍 문자열에 배정된 프로그램의 생성(S604). - 제14항에 있어서,
상기 절차에서는 - 프로그래밍 문자열이 여러 개의 문자열 프로그램 코드 컴포넌트들 중 각각의 정의문자열의 적어도 하나의 부분문자열을 포함하는 경우 - 여러 개의 문자열 프로그램 코드 컴포넌트들이 다수의 문자열 프로그램 코드 컴포넌트들로부터 선택되며, 또한
상기 절차에서는 여러 개의 문자열 프로그램 코드 컴포넌트들의 프로그램 코드 세그먼트의 바탕 위에서 프로그래밍 문자열에 배정된 프로그램이 만들어지는 것을 특징으로 하는, 절차. - 제14항 또는 제15항에 있어서,
상기 절차는 선택된 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능의 역동적인 특수화를 위한 적어도 하나의 매개변수의 입력의 단계를 포함하는 것을 특징으로 하는, 절차. - 제1항 내지 제16항 중 어느 한 항에 있어서,
상기 절차에서는 다수의 문자열 프로그램 코드 컴포넌트들에서 적어도 하나의 문자열 프로그램 코드 컴포넌트가 - 이 문자열 프로그램 코드 컴포넌트의 정의문자열의 지분이 특수화되어야 할 매개변수로 표시되어 있음을 통해 - 매개변수 입력을 지원하도록 설정되어 있는 것을 특징으로 하는, 절차. - 제1항 내지 제17항 중 어느 한 항에 있어서,
상기 절차에서는 매개변수에 - 이 매개변수를 수단으로 하여 문자열 프로그램 코드 컴포넌트의 프로그램 세그먼트를 통해 제공된 기능이 특수화될 수 있는데 - 정의가능한 매개변수 타입이 배정되는 것을 특징으로 하는, 절차. - 제1항 내지 제18항 중 어느 한 항에 있어서,
상기 절차에서는 다수의 문자열 프로그램 코드 컴포넌트들에서 적어도 하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트가 프로그램의 흐름을 제어하는 제어구조를 구현하는 것을 특징으로 하는, 절차. - 제19항에 있어서,
상기 절차에서는 프로그램 코드 세그먼트가 조건부 명령을 구현하고, 또한 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 구현된 기능을 수단으로 하여 조건부 명령을 정의하는 조건이 조회되는 것을 특징으로 하는, 절차. - 제19항에 있어서,
상기 절차에서는 프로그램 코드 세그먼트가 조건부 명령을 구현하고, 또한 조건부 명령을 정의하는 조건이 적어도 하나의 연산자와 적어도 하나의 피연산자에 의해 정의되는 것을 특징으로 하는, 절차. - 제14항 내지 제21항 중 어느 한 항에 있어서,
상기 절차에서는 적어도 하나의 연산자와 적어도 하나의 피연산자가 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능의 특수화를 위한 매개변수로서 자연어로 된 프로그래밍 중에 입력되는 것을 특징으로 하는, 절차. - 제14항 내지 제22항 중 어느 한 항에 있어서,
상기 절차에서는 프로그래밍 문자열에 배정된 프로그램의 생성 단계에서 소정의 플랫폼에서 수행 가능한 프로그램 코드가 생성되는 것을 특징으로 하는, 절차. - 제14항 내지 제22항 중 어느 한 항에 있어서,
상기 절차는 다수의 문자열 프로그램 코드 컴포넌트들에서 여러 개의 문자열 프로그램 코드 컴포넌트들의 바탕 위에서 새로운 문자열 프로그램 코드 컴포넌트가 생성되는 단계를 포함하고,
상기 단계는
- 새롭게 생성되어야 할 문자열 프로그램 코드 컴포넌트들을 위해 새 정의문자열이 기입되는 단계;
- 여러 개의 문자열 프로그램 코드 컴포넌트들이 제1항에 따라 자연어로 된 프로그래밍 문자열의 입력을 수단으로 하여 선택되는 단계; 및
- 새롭게 생성되어야 할 문자열 프로그램 코드 컴포넌트들을 위한 새로운 프로그램 코드 세그먼트가 프로그래밍 문자열에 배정된 프로그램의 생성 단계에서 생성된 프로그램 코드의 바탕 위에서 생성되는 단계;를 포함하는 단계. - 자연어 작업을 위해 설정된 시스템(100)으로서,
상기 시스템은 다수의 문자열 프로그램 코드 컴포넌트들(10)을 포함하며,
상기 문자열 프로그램 코드 컴포넌트(10)
- 자연어로 된 표현(13)을 포함하는 정의문자열(12); 및
- 자연어로 된 표현(13)에 배정된 기능을 구현하는 - 정의열 문자열(12)에 분명히 배정된 프로그램 코드 세그먼트(14);를 포함하고,
상기 시스템은 다수의 문자열 프로그램 코드 컴포넌트들(10, 10', 10")에서 적어도 하나의 문자열 프로그램 코드 컴포넌트(10)가 매개변수 입력을 위한 하나의 메소드(16)를 포함하는데, 이 메소드를 통해 이 문자열 프로그램 코드 컴포넌트는 매개변수 입력을 지원하고, 이때 이 매개변수를 수단으로 하여 이 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능이 특수화될 수 있는 것을 특징으로 하는, 시스템. - 제25항에 있어서,
다수의 문자열 프로그램 코드 컴포넌트에서 적어도 하나의 문자열 프로그램 코드 컴포넌트(10)의 프로그램 코드 세그먼트(14)를 통해 제공된 기능이 - 이 기능이 시스템 (100, 200)을 통해 수행되는 경우 - 반환코드를 공급하도록 설정되어 있고, 이때 이 반환코드는 우선적으로 자연어로 된 주석이 달려 있는 것을 특징으로 하는, 시스템. - 제26항에 있어서,
다수의 문자열 프로그램 코드 컴포넌트들에서 적어도 하나의 문자열 프로그램 코드 컴포넌트가 - 이 다른 문자열 프로그램 코드 컴포넌트들의 프르그램 세그먼트를 통해 제공된 기능이 시스템을 통해 수행되면 - 반환코드를 불러내 재사용하도록 설정되어 있는데, 특히 이 다른 문자열 프로그램 코드 컴포넌트들의 프로그램 세그먼트를 통해 제공된 기능의 특수화를 위한 매개변수로서 사용되고, 이때 변환코드를 불러 재사용하는 것은 반환코드의 자연어로 된 주석의 바탕 위에서 이루어지는 것을 특징으로 하는, 시스템. - 제25항 내지 제27항 중 어느 한 항에 있어서,
상기 시스템은 자연어를 수단으로 하여 제어되도록 설정되어 있는데,
이때 또한 시스템(100)은 정의문자열(12)와의 비교하여 소정의 유사성 측정기준에 따른 소정의 유사성을 보이는 입력문자열을 받아들일 때, 프로그램 코드 세그먼트(14)를 통해 구현된 기능을 수행하도록 설정되어 있는 것을 특징으로 하는, 시스템. - 제28항에 있어서,
상기 시스템(100)은 제어장치(20)를 포함하며,
상기 제어장치(20)는
- 즉 자연어로 된 표현을 포함하는 입력문자열을 받아들이도록 설정되어 있고,
- 문자열 프로그램 코드 컴포넌트(10)의 정의문자열(12)를 가진 입력문자열을 소정의 유사성 측정기준에 따라 비교하도록 설정되어 있으며,
- 입력문자열이 정의문자열(12)과의 비교에서 소정의 유사성 측정기준에 따른 소정의 유사성을 보이는 경우 프로그램 코드 세그먼트를 통해 구현된 기능을 수행하도록 설정되어 있는 것을 특징으로 하는, 시스템. - 제29항에 있어서,
상기 시스템(100)은 입력기기들(50, 52)을 포함하며, 상기 입력기기는 자연어로 된 사용자 입력을 접수하고, 그로부터 자연어로 된 표현을 포함하는 입력문자열을 도출하여, 제어장치(20)로 전달하도록 설정되어 있는 것을 특징으로 하는, 시스템. - 제29항 또는 제30항에 있어서,
상기 시스템(100)은 입력기기(40)를 포함하며, 상기 입력기기(40)는 트리거신호를 받아들이도록, 특히 입력장치(40)의 센서를 수단으로 하여 파악된 주위의 신호를 받아들이고, 트리거신호에 대한 반응으로 트리거신호에 종속된, 자연어 상 표현을 포함하는 입력문자열을 도출하여, 제어장치(20)에 전달하도록 설정되어 있는 것을 특징으로 하는, 절차. - 제29항 또는 제30항에 있어서,
상기 시스템(100)은 출력장치들(50, 54)을 포함하며, 상기 출력장치는 사용자(42)와 문자열 프로그램 코드 컴포넌트(10)과의 대화를 지원하기 위해 사용자(42)를 위한 출력신호를 자연어로 출력하도록 설정되어 있는 것을 특징으로 하ㄴ는, 시스템. - 제28항 내지 제32항 중 어느 한 항에 있어서,
상기 시스템(100)은 장치(30, 32, 34, 36)를 포함하며, 상기 장치는 문자열 프로그램 코드 컴포넌트(10)의 프로그램 세그먼트(14)를 통해 구현된 기능을 수단으로 하여 제어될 수 있도록 설정되어 있는 것을 특징으로 하는, 시스템. - 제28항 내지 제33항 중 어느 한 항에 있어서,
상기 시스템(100)은 다양한 문자열 프로그램 코드 컴포넌트들(10, 10', 10") 간의 대화를 자연어를 수단으로 하여 간접적으로 지원하도록 설정되어 있는 것을 특징으로 하는, 시스템. - 제24항 내지 제34항 중 어느 한 항에 있어서,
상기 시스템(200)은 계속해서 자연어로 된 프로그램을 위해서 설정되어 있으며,
상기 시스템은
- 자연어로 된 프로그래밍 문자열 입력을 위한 입력장치(240);
- 문자열 프로그램 코드 컴포넌트를 저장하고 입력된 프로그래밍 문자열을 가공하도록 설정되어 있는 제어장치(260);
- 코드 생성기(282) 및 컴파일러(284);를 포함하며,
상기 제어장치는 - 입력된 프로그래밍 문자열이 문자열 프로그램 코드 컴포넌트의 정의문자열 중 적어도 하나의 부분문자열을 포함하는 경우 - 문자열 프로그램 코드 컴포넌트들 (210)에서 적어도 하나를 선택하도록 설정되어 있고,
상기 장치들은 프로그래밍 문자열에 배정된 프로그램을 적어도 하나의 선택된 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트의 바탕 위에서 생성하도록 설정되어 있는 것을 특징으로 하는, 시스템. - 제35항에 있어서,
상기 시스템은 제1항 내지 제24항 중 어느 한 항에 따른 절차를 수행하기 위해 설정되어 있는 것을 특징으로 하는, 시스템. - 제35항 또는 제36항에 있어서,
상기 입력장치(240)는 프로그래밍 문자열을 에디팅하도록 설정되어 있는 에디터(250)를 포함하는데, 특히 선택된 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능의 특수화를 위한 매개변수의 입력이나 선택과 관련하여 에디팅하는 것을 특징으로 하는, 시스템 - 시스템을 위한 자료구조(10)로서,
상기 자료구조는 자연어를 가지고 작업하도록 설정되어 있는데, 이때 문자열 프로그램 코드 컴포넌트(10)를 포함하며,
상기 문자열 프로그램 코드 컴포넌트(10)는
- 자연어로 된 표현(13)을 포함하는 정의문자열(12) 및
- 자연어로 된 표현(13)에 배정된 기능을 구현하는 - 정의문자열(12)에 분명히 배정된 프로그램 코드 세그먼트(14)를 포함하고,
상기 세그먼트는 매개변수입력을 위한 메소드(16)로 특징지워지며, 상기 메소드(16)를 통해 문자열 프로그램 코드 컴포넌트(10)는 매개변수를 지원하도록 설정되어 있고, 상기 매개변수를 수단으로 하여 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능이 특수화될 수 있는 것을 특징으로 하는, 자료구조. - 제38항에 있어서,
상기 자료구조는 다수의 문자열 프로그램 코드 컴포넌트들을 포함하며,
상기 다수의 문자열 프로그램 코드 컴포넌트들은
- 자연어로 된 표현(13)을 포함하는 정의문자열(12) 및
- 자연어로 된 표현(13)에 배정된 기능을 구현하는 - 정의문자열(12)에 분명히 배정된 프로그램 코드 세그먼트(14)를 포함하고,
이때 다수의 문자열 프로그램 코드 컴포넌트 중 적어도 하나의 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트(14)를 통해 제공된 기능은 - 이 기능이 시스템(100, 200)을 통해 수행되면 - 반환코드를 제공하도록 설정되어 있는데, 이 반환코드는 우선적으로 자연어로 주석이 달려 있는 것을 특징으로 하는, 자료구조. - 제39항에 있어서,
다수의 문자열 프로그램 코드 컴포넌트들에서 적어도 하나의 문자열 프로그램 코드 컴포넌트가 - 이 다른 문자열 프로그램 코드 컴포넌트들의 프로그램 코드 세그먼트를 통해 제공된 기능이 시스템을 통해 수행되면 - 반환코드를 불러 재사용하도록 설정되어 있는데, 특히 이 다른 문자열 프로그램 코드 컴포넌트들의 프로그램 코드 세그먼트를 통해 제공된 기능을 특수화하기 위한 매개변수로 사용되며, 이때 재사용은 반환코드의 자연어로 된 주석의 바탕 위에서 이루어질 수 있는 것을 특징으로 하는, 자료구조. - 제38항 내지 제40항 중 어느 한 항에 있어서,
매개변수에는 - 이 매개변수를 수단으로 하여 문자열 프로그램 코드 컴포넌트의 프로그램 코드 세그먼트를 통해 제공된 기능이 특수화될 수 있는 바 - 정의 가능한 매개변수 타입이 배정되어 있는 것을 특징으로 하는, 자료구조.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102016107892 | 2016-04-28 | ||
DE102016107892.1 | 2016-04-28 | ||
DE102016115243.9 | 2016-08-17 | ||
DE102016115243.9A DE102016115243A1 (de) | 2016-04-28 | 2016-08-17 | Programmieren in natürlicher Sprache |
PCT/EP2017/058239 WO2017186469A1 (de) | 2016-04-28 | 2017-04-06 | Sprachgesteuertes system |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190042490A true KR20190042490A (ko) | 2019-04-24 |
KR102421274B1 KR102421274B1 (ko) | 2022-07-15 |
Family
ID=60081578
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187031220A KR102421274B1 (ko) | 2016-04-28 | 2017-04-06 | 음성 제어 시스템 |
Country Status (11)
Country | Link |
---|---|
US (1) | US10915709B2 (ko) |
EP (1) | EP3365891B1 (ko) |
JP (1) | JP7023008B2 (ko) |
KR (1) | KR102421274B1 (ko) |
CN (1) | CN109155129B (ko) |
AU (1) | AU2017258454B9 (ko) |
CA (1) | CA3022884A1 (ko) |
DE (1) | DE102016115243A1 (ko) |
ES (1) | ES2887998T3 (ko) |
RU (1) | RU2741622C2 (ko) |
WO (1) | WO2017186469A1 (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109921880B (zh) * | 2019-01-25 | 2020-10-23 | 北京航空航天大学 | 基于询问的目标定位方法、装置与电子设备 |
CN112162738B (zh) * | 2020-10-26 | 2022-11-29 | 广东粤港澳大湾区硬科技创新研究院 | 数据转化方法、装置、终端设备及存储介质 |
WO2023209857A1 (ja) * | 2022-04-27 | 2023-11-02 | ファナック株式会社 | 機械動作指令プログラム検索装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060089782A (ko) * | 2005-02-04 | 2006-08-09 | 주식회사유진로보틱스 | 음성과 태스크 오브젝트 기반의 대화시스템 |
Family Cites Families (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01121934A (ja) * | 1987-11-06 | 1989-05-15 | Hitachi Ltd | 日本語メッセージの処理方式 |
JPH034331A (ja) * | 1989-06-01 | 1991-01-10 | Fujitsu Ltd | 宣言的に定義された数論的関数処理方式 |
JPH07311677A (ja) * | 1994-05-18 | 1995-11-28 | Nec Corp | 操作処理装置 |
US5774860A (en) * | 1994-06-27 | 1998-06-30 | U S West Technologies, Inc. | Adaptive knowledge base of complex information through interactive voice dialogue |
US20050005266A1 (en) * | 1997-05-01 | 2005-01-06 | Datig William E. | Method of and apparatus for realizing synthetic knowledge processes in devices for useful applications |
WO2000011571A1 (en) * | 1998-08-24 | 2000-03-02 | Bcl Computers, Inc. | Adaptive natural language interface |
US6173441B1 (en) * | 1998-10-16 | 2001-01-09 | Peter A. Klein | Method and system for compiling source code containing natural language instructions |
JP2000322245A (ja) * | 1999-05-13 | 2000-11-24 | Murata Mach Ltd | プログラミング装置および記憶媒体 |
US6374226B1 (en) | 1999-08-06 | 2002-04-16 | Sun Microsystems, Inc. | System and method for interfacing speech recognition grammars to individual components of a computer program |
US7305345B2 (en) * | 2001-02-15 | 2007-12-04 | Livewire Acquisition, Inc. | Methods, systems, and computer program products for providing automated customer service via an intelligent virtual agent that is trained using customer-agent conversations |
DE10251112A1 (de) * | 2002-11-02 | 2004-05-19 | Philips Intellectual Property & Standards Gmbh | Verfahren und System zur Spracherkennung |
US6980949B2 (en) * | 2003-03-14 | 2005-12-27 | Sonum Technologies, Inc. | Natural language processor |
WO2005015546A1 (en) * | 2003-08-12 | 2005-02-17 | Philips Intellectual Property & Standards Gmbh | Speech input interface for dialog systems |
US7930168B2 (en) | 2005-10-04 | 2011-04-19 | Robert Bosch Gmbh | Natural language processing of disfluent sentences |
US7966182B2 (en) * | 2006-06-20 | 2011-06-21 | Lunis Orcutt | Voiced programming system and method |
JP4779842B2 (ja) * | 2006-07-11 | 2011-09-28 | 株式会社島津製作所 | オートサンプラ制御プログラム作成支援システム及び作成支援プログラム |
JP2008145769A (ja) * | 2006-12-11 | 2008-06-26 | Hitachi Ltd | 対話シナリオ生成システム,その方法およびプログラム |
US8589874B2 (en) | 2007-06-11 | 2013-11-19 | Microsoft Corporation | Visual interface to represent scripted behaviors |
US10095985B2 (en) * | 2008-07-24 | 2018-10-09 | Hamid Hatami-Hanza | Assisted knowledge discovery and publication system and method |
CN101196883A (zh) | 2008-01-07 | 2008-06-11 | 刘莎 | 一种互联网信息自然语言翻译通用方法和系统 |
US8229736B2 (en) | 2008-04-16 | 2012-07-24 | International Business Machines Corporation | Transforming a natural language request for modifying a set of subscriptions for a publish/subscribe topic string |
US8218397B2 (en) * | 2008-10-24 | 2012-07-10 | Qualcomm Incorporated | Audio source proximity estimation using sensor array for noise reduction |
EP2359363A1 (en) * | 2008-12-19 | 2011-08-24 | International Business Machines Corporation | Method and system for generating vocal user interface code from a data meta-model |
FR2947923B1 (fr) * | 2009-07-10 | 2016-02-05 | Aldebaran Robotics | Systeme et procede pour generer des comportements contextuels d'un robot mobile |
US9185488B2 (en) * | 2009-11-30 | 2015-11-10 | Nokia Technologies Oy | Control parameter dependent audio signal processing |
FR2963132A1 (fr) * | 2010-07-23 | 2012-01-27 | Aldebaran Robotics | Robot humanoide dote d'une interface de dialogue naturel, methode d'utilisation et de programmation de ladite interface |
US9930225B2 (en) * | 2011-02-10 | 2018-03-27 | Villmer Llc | Omni-directional camera and related viewing software |
US9201859B2 (en) * | 2011-12-15 | 2015-12-01 | Microsoft Technology Licensing, Llc | Suggesting intent frame(s) for user request(s) |
US20140359585A1 (en) * | 2012-01-12 | 2014-12-04 | Thomson Licensing | Method and device for compiling a source program |
FR2989209B1 (fr) * | 2012-04-04 | 2015-01-23 | Aldebaran Robotics | Robot apte a integrer des dialogues naturels avec un utilisateur dans ses comportements, procedes de programmation et d'utilisation dudit robot |
US9110659B2 (en) * | 2012-11-20 | 2015-08-18 | International Business Machines Corporation | Policy to source code conversion |
RU2530267C2 (ru) * | 2012-11-28 | 2014-10-10 | Общество с ограниченной ответственностью "Спиктуит" | Способ коммуникации пользователя с информационной диалоговой системой |
DE112014000709B4 (de) * | 2013-02-07 | 2021-12-30 | Apple Inc. | Verfahren und vorrichtung zum betrieb eines sprachtriggers für einen digitalen assistenten |
CN104239002B (zh) * | 2013-06-07 | 2019-06-14 | 上海能感物联网有限公司 | 一种用汉语自然语语音控制智能电磁炉的方法 |
US9324025B2 (en) * | 2013-06-27 | 2016-04-26 | International Business Machines Corporation | Automating natural-language interactions between an expert system and a user |
CN103885783A (zh) * | 2014-04-03 | 2014-06-25 | 深圳市三脚蛙科技有限公司 | 一种应用程序的语音控制方法及装置 |
US9430461B2 (en) * | 2014-04-11 | 2016-08-30 | International Business Machines Corporation | Mobile based lexicon and forecasting |
CN103957635A (zh) * | 2014-04-28 | 2014-07-30 | 梁涛 | 开关装置及其控制实现方法 |
MY181046A (en) * | 2015-01-16 | 2020-12-16 | Pricewaterhousecoopers Llp | Healthcare data interchange system and method |
US20180122209A1 (en) * | 2015-04-01 | 2018-05-03 | Smartcare Consultants, Llc | System for determining behavioral patterns and deviations from determined behavioral patterns |
AU2016302371B2 (en) * | 2015-08-05 | 2021-06-24 | Equifax Inc. | Building and managing data-processing attributes for modeled data sources |
US20180039829A1 (en) * | 2016-08-04 | 2018-02-08 | Roger D. Summers | Continuous, self-executing verification worksheet system |
US10832684B2 (en) * | 2016-08-31 | 2020-11-10 | Microsoft Technology Licensing, Llc | Personalization of experiences with digital assistants in communal settings through voice and query processing |
US10469884B2 (en) * | 2016-12-12 | 2019-11-05 | The Directv Group, Inc. | Devices for presenting video program segments in accordance with definition documents |
US10372597B2 (en) * | 2017-05-03 | 2019-08-06 | International Business Machines Corporation | Software testing and verification |
EP3685337A4 (en) * | 2017-08-31 | 2021-08-25 | Selfie Stub LLC | SYSTEMS AND METHODS FOR CREATING A PERSONALIZED DIGITAL OR PHYSICAL OBJECT |
US10621978B2 (en) * | 2017-11-22 | 2020-04-14 | International Business Machines Corporation | Dynamically generated dialog |
-
2016
- 2016-08-17 DE DE102016115243.9A patent/DE102016115243A1/de not_active Ceased
-
2017
- 2017-04-06 US US16/096,840 patent/US10915709B2/en active Active
- 2017-04-06 EP EP17720367.6A patent/EP3365891B1/de active Active
- 2017-04-06 CA CA3022884A patent/CA3022884A1/en active Pending
- 2017-04-06 RU RU2018137557A patent/RU2741622C2/ru active
- 2017-04-06 ES ES17720367T patent/ES2887998T3/es active Active
- 2017-04-06 CN CN201780026572.9A patent/CN109155129B/zh active Active
- 2017-04-06 JP JP2019507996A patent/JP7023008B2/ja active Active
- 2017-04-06 WO PCT/EP2017/058239 patent/WO2017186469A1/de active Application Filing
- 2017-04-06 KR KR1020187031220A patent/KR102421274B1/ko active IP Right Grant
- 2017-04-06 AU AU2017258454A patent/AU2017258454B9/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060089782A (ko) * | 2005-02-04 | 2006-08-09 | 주식회사유진로보틱스 | 음성과 태스크 오브젝트 기반의 대화시스템 |
Also Published As
Publication number | Publication date |
---|---|
US20190121854A1 (en) | 2019-04-25 |
AU2017258454B9 (en) | 2022-06-16 |
EP3365891B1 (de) | 2021-06-09 |
CA3022884A1 (en) | 2017-11-02 |
KR102421274B1 (ko) | 2022-07-15 |
WO2017186469A1 (de) | 2017-11-02 |
AU2017258454B2 (en) | 2022-04-14 |
ES2887998T3 (es) | 2021-12-29 |
US10915709B2 (en) | 2021-02-09 |
RU2018137557A3 (ko) | 2020-05-28 |
DE102016115243A1 (de) | 2017-11-02 |
EP3365891A1 (de) | 2018-08-29 |
RU2741622C2 (ru) | 2021-01-29 |
AU2017258454A1 (en) | 2018-12-06 |
CN109155129A (zh) | 2019-01-04 |
JP7023008B2 (ja) | 2022-02-21 |
CN109155129B (zh) | 2023-05-12 |
RU2018137557A (ru) | 2020-05-28 |
JP2019519870A (ja) | 2019-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101957277B1 (ko) | 음성 인식을 이용한 코딩시스템 및 코딩방법 | |
Pierce | Types and programming languages | |
KR102421274B1 (ko) | 음성 제어 시스템 | |
WO2016024367A1 (ja) | 自律型知識向上装置 | |
WO2016157563A1 (ja) | 自律型問題解決機 | |
CN117795474A (zh) | 从自然语言文本合成领域专用语言的源代码 | |
WO2016163039A1 (ja) | 自律型知識抽出機 | |
US20080141230A1 (en) | Scope-Constrained Specification Of Features In A Programming Language | |
Ryabinin et al. | Human-oriented IoT-based interfaces for multimodal visual analytics systems | |
US20170010778A1 (en) | Action design apparatus and computer readable medium | |
Fuchs et al. | Intermediate representations to improve the semantic parsing of building regulations | |
JP2015232894A (ja) | 人工知能装置 | |
Ekpenyong et al. | Agent-based framework for intelligent natural language interface | |
Gao et al. | Modular rag: Transforming rag systems into lego-like reconfigurable frameworks | |
Trifan et al. | Natural language processing model compiling natural language into byte code | |
JP5828438B2 (ja) | 自律型知識体系構築機 | |
Gordon et al. | English for spoken programming | |
TWI675365B (zh) | 語法編譯系統以及語法編譯方法 | |
Vanrullen et al. | Formal representation of property grammars | |
Burden et al. | Translating Platform-Independent Code into Natural Language Texts | |
Leitel et al. | Extracting Formal Smart-Contract Specifications from Natural Language | |
Tyshka et al. | Interactive Task Learning for Social Robots: A Pilot Study | |
O'Brien et al. | End-user knowledge manipulation systems: the speech knowledge interface | |
Cordy et al. | 05161 Executive summary–transformation techniques in software engineering | |
KR20200079702A (ko) | 서비스 패키지 생성 방법 및 이를 수행하는 로봇 서비스 개발 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E90F | Notification of reason for final refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |