ES2887998T3 - Sistema controlado por voz - Google Patents
Sistema controlado por voz Download PDFInfo
- Publication number
- ES2887998T3 ES2887998T3 ES17720367T ES17720367T ES2887998T3 ES 2887998 T3 ES2887998 T3 ES 2887998T3 ES 17720367 T ES17720367 T ES 17720367T ES 17720367 T ES17720367 T ES 17720367T ES 2887998 T3 ES2887998 T3 ES 2887998T3
- Authority
- ES
- Spain
- Prior art keywords
- program code
- string
- character string
- input
- component
- Prior art date
- Legal status (The legal status 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 status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 133
- 230000014509 gene expression Effects 0.000 claims abstract description 77
- 230000008569 process Effects 0.000 claims description 67
- 230000004044 response Effects 0.000 claims description 6
- 230000004913 activation Effects 0.000 claims description 4
- 238000011524 similarity measure Methods 0.000 claims 5
- 239000011800 void material Substances 0.000 description 10
- 230000008859 change Effects 0.000 description 8
- 206010037660 Pyrexia Diseases 0.000 description 7
- 239000012634 fragment Substances 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 238000007792 addition Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000015654 memory Effects 0.000 description 4
- 208000024891 symptom Diseases 0.000 description 4
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 230000003862 health status Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000021615 conjugation Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 206010011224 Cough Diseases 0.000 description 1
- 206010019233 Headaches Diseases 0.000 description 1
- 241000282412 Homo Species 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 208000027499 body ache Diseases 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000003814 drug Substances 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000000945 filler Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 231100000869 headache Toxicity 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 206010039083 rhinitis Diseases 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 235000013311 vegetables Nutrition 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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
- 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
- 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
- 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)
- Human Computer Interaction (AREA)
- Multimedia (AREA)
- Acoustics & Sound (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
Procedimiento para programar en lenguaje natural, que comprende las etapas de: - proporcionar (S1) una pluralidad de componentes de código de programa de cadena de caracteres (10, 10', 10'') en un sistema (100), donde un componente de código de programa de cadena de caracteres (10) comprende respectivamente: - una cadena de caracteres de definición (12) que comprende una expresión (13) en lenguaje natural, y - un segmento de código de programa (14) que se asigna inequívocamente a la cadena de caracteres de definición (12) y que implementa una funcionalidad asignada a la expresión (13) en lenguaje natural, - introducir (S602) una cadena de caracteres de programación en lenguaje natural; - seleccionar (S603) al menos un componente de código de programa de cadena de caracteres (210) de la pluralidad de componentes de código de programa de cadena de caracteres si la cadena de caracteres de programación comprende al menos una subcadena de caracteres de la cadena de caracteres de definición del al menos un componente de código de programa de cadena de caracteres; - crear (S604) un programa asignado a la cadena de caracteres de programación basado en el segmento de código de programa del al menos un componente de código de cadena de caracteres seleccionado.
Description
DESCRIPCIÓN
Sistema controlado por voz
La invención se refiere a un proceso para controlar o programar un sistema usando el lenguaje natural, así como a un sistema configurado en consecuencia.
Antecedentes tecnológicos
En relación con sistemas técnicos que operan en el entorno humano y se comunican de forma interactiva con humanos, surgen complicaciones cuya complejidad no permite ninguna solución general en base a algoritmos simples. Un ejemplo sería el control de robots humanoides. Los problemas técnicos que surgen y la cantidad de soluciones posibles para manejar estos problemas son tan abarcadores que solo se podrían manejar con la participación de un gran grupo de expertos.
Se conoce un control por voz para sistemas técnicos y aplicaciones técnicas, por ejemplo en relación con aplicaciones en dispositivos móviles o en el caso de control de robots.
Además, los procedimientos de programación en lenguaje natural han sido el objetivo de investigaciones e innovaciones durante muchos años, en particular en relación con la comunicación hombre-máquina. Los usuarios que no están en particular formados en programación también deben tener la posibilidad de controlar sistemas técnicos usando el lenguaje natural.
Las complicaciones suelen resultar del hecho de que el lenguaje natural es ambiguo y la comprensión suele basarse en información contextual que no siempre está presente de manera explícita o directa. Además, la gente tiende a pensar de manera procedimental, mientras que el software actual se orienta más bien a objetos, lo que puede ser difícil de entender para un usuario normal.
El objetivo de la presente invención es tomar en consideración los problemas mencionados anteriormente y mejorar y facilitar aún más un control o una programación de sistemas técnicos usando lenguaje natural.
El artículo «Spoken dialogue technology» de Michael F. Mctear, ISSN: 0360-0300, trabaja con un sistema que permite a un usuario interactuar con aplicaciones informáticas, tales como bases de datos y sistemas expertos, usando lenguaje natural hablado.
El documento de patente US 6374226 B1 se refiere a un procedimiento para el control por voz de un programa, por ejemplo, enviar un correo electrónico usando el lenguaje natural hablado.
Resumen de la invención
Este objetivo se resuelve mediante un procedimiento y un sistema con las características de las reivindicaciones asociadas. Los diseños preferidos y otras innovaciones se definen en las reivindicaciones dependientes.
La presente invención se basa esencialmente en una estructura de datos específica que se designa como componente de código de programa de cadena en relación con la presente invención. Esta estructura de datos comprende, por una parte, una cadena de definición que comprende una expresión en lenguaje natural.
Por otra parte, el componente de código de programa de cadena comprende un segmento de código de programa que se asigna sin ambigüedades a la cadena de definición que implementa una funcionalidad asignada a la expresión en lenguaje natural.
La cadena de definición y el segmento de código de programa están inseparablemente acoplados entre sí y forman una unidad funcional. El segmento de código de programa implementa la semántica de la cadena de definición, es decir, la que es especificada por la expresión en lenguaje natural.
El término «expresión en lenguaje natural» debe entenderse en relación con la presente invención en el sentido de que la expresión comprende una o más palabras en lenguaje natural. La expresión puede comprender solo una o dos palabras en su forma básica. Sin embargo, la expresión comprende preferentemente una frase gramaticalmente correcta en lenguaje natural. También son posibles las formas intermedias.
Dicha estructura de datos, es decir, un componente de código de programa de cadena según la invención, proporciona una unidad funcional completa y sustancialmente cerrada. La implementación interna del componente de código de programa de cadena hacia el exterior puede estar oculta. Como se describe en detalle a continuación, el componente de código de programa de cadena se puede integrar fácilmente dentro un sistema, por ejemplo, usando el mecanismo de enchufar y usar, y se puede recuperar usando el lenguaje natural. De esta forma, el sistema puede ser perfeccionado y modificado opcionalmente por terceros. La necesidad de especificar el componente de código de programa de cadena se limita al mínimo. Para programar el segmento de código de programa, por ejemplo, se pueden proporcionar lenguajes de programación comunes, tales como Java o C++. Por tanto, una realización preferida de un procedimiento para controlar un sistema usando el lenguaje natural comprende en particular la etapa de proporcionar una pluralidad de componentes de código de programa de cadena previamente descritos dentro del sistema.
Según una realización preferida de la invención, al menos uno de una pluralidad de componentes de código de programa de cadena descritos anteriormente se desarrolla además para admitir una entrada de parámetros por medio de la cual se puede especificar la funcionalidad proporcionada por el segmento de código de programa de este componente de código de programa de cadena.
Dicho de otra forma, la funcionalidad que implementa un segmento de código de programa de un componente de código de programa de cadena puede no ser fija e invariable, sino que se puede especificar usando entradas de parámetros. Una funcionalidad básica implementada, por ejemplo, por el segmento de código de programa para recuperar un dato de una base de datos se puede especificar usando parámetros referentes a qué tabla y qué columnas de la tabla se deben recuperar.
Más específicamente, al menos un componente de código de programa de cadena puede proporcionar un proceso propio para la entrada de parámetros. Si este componente de código de programa de cadena es procesado por un dispositivo de control del sistema, se recupera el proceso para la entrada de parámetros y el propio componente de código de programa de cadena se encarga de la detección de los parámetros requeridos.
Según una realización alternativa, uno de los componentes de código de programa de cadena de la pluralidad de componentes de código de programa de cadena puede estar configurado para admitir una entrada de parámetros de manera que una parte de la cadena de definición de este componente de código de programa de cadena para el dispositivo de control del sistema que procesa el componente de código de programa de cadena se caracterice aparentemente como un parámetro que se va a especificar. Aquí se pueden usar tecnologías básicamente conocidas en el campo de la ingeniería de software que están relacionadas con los términos «indicador» o «anotación». En este caso, la detección del/de los parámetro(s) se lleva a cabo por el dispositivo de control basado en una clasificación específica en la cadena de definición del componente de código de programa de cadena. Debe entenderse que la comprensión del término «indicador» que se usa en este documento no solo se limita a las tecnologías básicamente conocidas en el ámbito de la ingeniería de software, tal como Annotation, XML, JSO y similares. En este caso, se pueden usar nuevas tecnologías que sirvan para el mismo propósito que «indicador». Esto también implica el uso de palabras clave reservadas en el código fuente de un lenguaje de programación y por el compilador o intérprete respectivo.
Según una implementación, se puede asignar a un parámetro un tipo de parámetro libremente definible, por medio del cual se puede especificar la funcionalidad proporcionada por el segmento de código de programa de un componente de código de programa de cadena. Dicho parámetro puede ser en particular diferente de un tipo de lenguaje primitivo conocido de programación convencional, tal como cadena, entero, flotante, fecha, booleano, etc. En este contexto, los tipos de parámetros pueden ser en particular unidades de medida o similares. Incluso las categorías de libre definición, tales como «verduras» se pueden proporcionar como un tipo de parámetro. Además, es posible definir y asignar un tipo de parámetro que consiste en una combinación de uno o más «parámetros predeterminados» y uno o más parámetros libremente definibles. Para un parámetro que indica una temperatura, por ejemplo, se puede definir un tipo de parámetro que comprende un número de punto flotante (flotante) y una unidad de medida particular (grados Celsius).
El hecho de que la identificación de parámetros se efectúe por parte del sistema, o preferentemente por parte del propio componente de código de programa de cadena, usando el proceso para parámetros descrito anteriormente, tiene la ventaja adicional de que las entradas incorrectas, referentes al tipo o al valor del parámetro, se pueden comprobar directamente durante la entrada. Disponer de tipos de parámetros específicos y libremente definibles puede ser útil, por ejemplo, cuando un parámetro representa un número pero la unidad de medida asociada que se puede asignar como un tipo de parámetro complementario es esencial (por ejemplo, «m» o «km»). Por tanto, un
error debido a la entrada de un parámetro incorrecto que de otro modo se habría producido más tarde, por ejemplo, durante el tiempo de ejecución, puede ser reconocido con antelación y capturado. Resulta en particular ventajoso la entrada, identificación y verificación de parámetros usando un proceso específico de un componente de código de programa de cadena. El proceso puede estar específicamente adaptado al código de programa del componente de código de programa de cadena; no es necesario adaptar el sistema. Cada programador puede añadir a la entrada de parámetros el proceso adaptado al respectivo componente de código de programa de cadena y adaptarlo específicamente a los requisitos de código de programa del respectivo componente de código de programa de cadena.
Proporcionar un tipo de parámetro complementario, libremente definible, tiene como ventaja adicional: Será posible introducir diferentes parámetros, con diferentes tipos de parámetros asignados, en cualquier orden. Se puede efectuar a continuación una asignación correcta por parte del proceso para la entrada de parámetros o, respectivamente, por parte del sistema, basándose solo en el tipo de parámetro.
Para verificar un tipo de parámetro durante la entrada, se pueden usar procedimientos de concordancia de patrones que se describen a continuación con más detalle, que son usados por lo general cuando se compara una cadena de entrada con una cadena de definición de un componente de código de programa de cadena.
Según una realización preferida, una funcionalidad proporcionada por el segmento de código de programa de al menos uno de los componentes de código de programa de cadena de la pluralidad de componentes de código de programa de cadena puede suministrar un valor de retorno. Los valores de retorno pueden ser simples valores lógicos o numéricos, cadenas o similares, pero también estructuras complejas o incluso funcionalidades.
Dicho valor de retorno puede ser indicado o anotado con un indicador en lenguaje natural y almacenado por el sistema en un área de almacenamiento específicamente designada. Hasta cierto punto, los valores almacenados en esta área representan una especie de historial o memoria. Gracias al indicador, se puede acceder fácilmente a los valores de retorno almacenados de forma inequívoca por parte de un componente de código de programa de cadena usando lenguaje natural. Por tanto, existe la posibilidad de crear, almacenar y usar fácilmente y sin ambigüedades el contexto.
Se puede asignar un tipo de valor de retorno libremente definible a un valor de retorno, así como a un parámetro, que caracterice el valor de retorno referente a, por ejemplo, una unidad de medida asignada.
Como se describe con más detalle a continuación en relación con las estructuras de control, un segundo componente de código de programa de cadena puede acceder al valor de retorno de un primer componente de código de programa de cadena, en particular como parámetro para especificar la funcionalidad proporcionada por el segmento de código de programa del segundo componente de código de programa de cadena. Preferentemente, esta operación se puede usar en particular en relación con enunciados condicionales que pueden acceder a valores de retorno de componentes de código de cadenas anteriores.
Según una primera realización preferida, el sistema está configurado para ejecutar la funcionalidad implementada por el segmento de código de programa al recibir una cadena de entrada que por lo general comprende una expresión en lenguaje natural si la cadena de entrada tiene una similitud especificada con la cadena de definición del componente de código de programa de cadena según un grado de similitud especificado. En términos simples, la funcionalidad del componente de código de programa de cadena se puede recuperar mediante la recepción de una entrada en lenguaje natural por el sistema, que corresponde sustancialmente a la cadena de definición del componente de código de programa de cadena.
Para el grado de similitud al comparar una cadena de entrada con la cadena de definición del componente de código de programa de cadena, se pueden usar grados de similitud conocidos de la técnica anterior. Lo mismo se aplica a un procedimiento para comparar una cadena de entrada con la cadena de definición; en este caso, se conocen varios procedimientos de la técnica anterior, por ejemplo procedimientos convencionales de coincidencia de patrones. La similitud especificada, que puede indicarse usando un valor numérico entre 0 y 1 en función del grado de similitud usado, puede variar en función del tipo de recepción de la cadena de entrada por el sistema. Hay que distinguir la entrada usando una entrada de voz y la conversión en una cadena o la entrada directa de una cadena, por ejemplo usando un teclado o similares. Los grados específicos de similitud o los procedimientos de comparación no son objeto de la presente invención. En el caso más sencillo, la cadena de entrada se puede analizar en función de si comprende, exactamente o aproximadamente, una parte especificada de la expresión en lenguaje natural de la cadena de definición. Exactamente significa identidad de palabra. Aproximadamente puede significar que las desviaciones gramaticales (por ejemplo, singular/plural, caso, conjugación, etc.) son permisibles y, por ejemplo, los
signos de puntuación tales como la coma o similares pueden ser ignorados. Las palabras o términos sinónimos pueden considerarse similares.
Según una realización, el segmento de código de programa de un componente de código de programa de cadena implementa una funcionalidad para controlar un dispositivo acoplado al sistema. Una de las aplicaciones preferidas es el control de dispositivos domésticos. Una aplicación adicional preferida es el control de un robot o similares. Además, es posible que usando el procedimiento descrito en el presente documento se facilite la búsqueda de información, por ejemplo, en bibliotecas públicas en línea.
Según una realización adicional, el proceso de entrada de parámetros implementa un diálogo entre el componente de código de programa de cadena y un usuario. De forma alternativa, el diálogo también puede ser implementado por el segmento de código de programa del componente de código de programa de cadena. Es decir, el proceso para la entrada de parámetros o, respectivamente, la funcionalidad que es implementada por el segmento de código de programa crea una salida en lenguaje natural que el usuario entiende como una pregunta o una advertencia. El usuario responde a esta pregunta usando una entrada respectiva que puede ser recibida y procesada por el proceso o, respectivamente, la funcionalidad como una cadena de entrada adicional. Esta secuencia de preguntas y respuestas puede repetirse varias veces. Al hacerlo, el componente de código de programa de cadena puede referirse a las entradas anteriores del usuario para controlar el diálogo como se describe a continuación. Por ejemplo, esta realización es adecuada para proporcionar un sistema experto.
Según una primera variante, el diálogo de una entrada de parámetros puede servir también para especificar la funcionalidad implementada por el segmento de código de programa. Dicha entrada de parámetros se puede diseñar de modo que los parámetros indicados se verifiquen con respecto a un tipo de parámetro esperado, un valor de parámetro o similares por parte de la funcionalidad o el proceso para la entrada de parámetros. Por tanto, se pueden identificar y prevenir las entradas incorrectas.
Según una segunda variante, el diálogo puede soportar una conversación libre entre el usuario y el sistema. En este contexto, una conversación libre significa un cambio entre una pregunta o advertencia por parte de la funcionalidad al usuario y una respuesta indicada por el usuario, donde la respuesta no está limitada ni en cuanto al formato ni en cuanto a la semántica. La respuesta del usuario se efectúa mediante la entrada de una cadena de entrada en el sistema, que transmite esta cadena de entrada a la funcionalidad del componente de código de programa de cadena. Típicamente, esta cadena de entrada también comprende una expresión en lenguaje natural.
Según otra realización, el segmento de código de programa del componente de código de programa de cadena implementa una funcionalidad para verificar una cadena de entrada para el sistema. Dicho de otra forma, la funcionalidad del propio componente de código de programa de cadena crea una entrada para el sistema que puede dar como resultado la recuperación de otro componente de código de programa de cadena que ya se ha proporcionado en el sistema.
En este punto, se puede ver una ventaja adicional del uso del componente de código de programa de cadena según la invención. Cada uno de estos componentes de código de programa de cadena puede proporcionar una funcionalidad específica de forma cerrada que puede ser reconocida y recuperada por la cadena de definición del respectivo componente de código de programa de cadena en lenguaje natural. Los sistemas convencionales que permiten una función de control por voz se diseñan, por lo general, como sistemas cerrados y, por tanto, muy limitados en cuanto a su complejidad y capacidad de expansión. Sin embargo, un sistema según la presente invención puede expandirse fácilmente añadiendo al sistema un componente de código de programa de cadena. Complicaciones técnicas complejas, tales como la presentación de conocimientos o el control de robots, pueden por tanto mejorarse de forma distribuida, de modo que terceras partes interesadas proporcionen aspectos individuales del problema a resolver usando componentes de código de programa de cadena específicos que pueden añadirse al sistema. Estos componentes de código de programa de cadena pueden usar a continuación la funcionalidad de los componentes de código de programa en cadena ya presentes y proporcionar su propia funcionalidad para ser recuperada por componentes adicionales de código de programa de cadena. Por tanto, un sistema respectivo es abierto y se puede expandir fácilmente en cualquier dirección.
El principal responsable de esto es el concepto de componente de código de programa de cadena. Los sistemas convencionales de control por voz permiten por lo general la recuperación de funcionalidades predeterminadas ya presentes, por ejemplo, iniciar una búsqueda en Internet, enviar un mensaje, introducir una cita en un calendario o similares. En el ámbito de la presente invención, cualquier funcionalidad que use el segmento de código de programa y se adapte a la cadena de definición en lenguaje natural, se puede proporcionar e integrar en el sistema. Mientras que el control por voz de la técnica anterior solo perfecciona la ergonomía del sistema respectivo, en el
presente documento se proporciona específicamente una funcionalidad usando el segmento de código de programa que implementa la semántica de la expresión en lenguaje natural que está contenida en la cadena de definición. La estructura de datos del componente de código de programa de cadena que se recomienda en el presente documento permite, por tanto, una implementación funcional de la semántica de las expresiones en lenguaje natural usando una unidad funcional cerrada de una expresión en lenguaje natural y un segmento de código de programa asignado de forma inequívoca e inseparable a esta expresión.
Debe entenderse que un segmento de código de programa de un componente de código de programa de cadena puede implementar simultáneamente varias de las funcionalidades descritas anteriormente. Debe entenderse en particular que un segmento de código de programa puede implementar la funcionalidad de un diálogo así como la funcionalidad de transmitir una cadena de entrada al sistema. Esto es útil cuando resulta durante el diálogo que la recuperación de un componente adicional de código de programa de cadena, con una funcionalidad adicional basada en las entradas recibidas del usuario, es útil.
Hasta cierto punto, el sistema admite una comunicación indirecta de varios componentes de código de programa de cadena usando el lenguaje natural. Según un primer aspecto, un componente de código de programa de cadena, como se describe previamente, se puede configurar para transmitir al sistema una cadena de entrada con una expresión en lenguaje natural y por tanto «recuperar» indirectamente un componente adicional de código de programa de cadena, cuya cadena de definición corresponde suficientemente a esta cadena de entrada. Un aspecto adicional de la comunicación de varios componentes de código de programa de cadena admitido por el sistema usando el lenguaje natural se pondrá de manifiesto a continuación.
Específicamente, el procedimiento para controlar un sistema usando el lenguaje natural puede comprender las siguientes etapas adicionales:
El sistema recibe una cadena de entrada. La cadena de entrada comprenderá por lo general una expresión en lenguaje natural.
En una etapa adicional, el sistema compara la cadena de entrada con la cadena de definición de un componente de código de programa de cadena ya proporcionado en el sistema según el grado de similitud especificado, por ejemplo, usando el procedimiento convencional de coincidencia de patrones.
Si la cadena de entrada tiene una similitud especificada con la cadena de definición según el grado de similitud especificado, el sistema ejecuta la funcionalidad implementada por el segmento de código de programa.
Según una realización preferida, al menos un fragmento de una cadena de entrada recibida por el sistema puede almacenarse. Por una parte, esto puede modificar la cadena de entrada que dio lugar a la ejecución de la funcionalidad del componente de código de programa de cadena. De forma alternativa o adicionalmente, se pueden almacenar también al menos fragmentos de cadenas de entrada que han sido introducidas por el usuario como parte de un diálogo con el componente de código de programa de cadena.
Según una realización, al menos un fragmento de una cadena de entrada recibida puede almacenarse en el propio componente de código de programa de cadena. El componente de código de programa de cadena puede comprender adicionalmente una estructura de datos de memoria de contexto adecuada. La información almacenada en el componente de código de programa de cadena es recuperada para admitir la posterior ejecución de la funcionalidad implementada por el segmento de código de programa del componente de código de programa de cadena por el propio componente de código de programa de cadena.
De esta forma, se pueden recuperar fragmentos de cadenas de entrada almacenados para admitir la posterior ejecución de una funcionalidad de un componente de código de programa de cadena. De esta forma, por ejemplo, un diálogo del usuario puede ser controlado con un componente de código de programa de cadena mientras que el componente de código de programa depende del historial del diálogo almacenado y de la información recibida del usuario durante el diálogo.
De forma alternativa, fragmentos de cadenas de entrada recibidas también pueden ser almacenadas centralmente en el sistema. Según esta variante, la información almacenada (que consiste en cadenas de entrada que por lo general comprenden una expresión en lenguaje natural) también puede ser usada por un componente adicional de código de programa de cadena elaborado a continuación como una forma de contexto o conocimiento previo. Los fragmentos de cadenas de entrada almacenadas centralmente en el sistema sirven como memoria a corto o largo plazo del sistema a la que cada componente de código de programa de cadena tiene acceso de manera apropiada.
En este caso, un segundo aspecto de la comunicación de varios componentes de código de programa de cadena admitido indirectamente por el sistema usando el lenguaje natural se verá a continuación. Un componente de código de programa de cadena puede recurrir a información en lenguaje natural en el momento de la ejecución de la funcionalidad que se le ha asignado, a saber, en forma de cadenas de entrada previamente almacenadas en el sistema que se han almacenado durante la ejecución de una funcionalidad de un componente adicional de código de programa de cadena.
Como se menciona anteriormente, es posible que una funcionalidad implementada por el segmento de código de programa de un componente de código de programa de cadena suministre un valor de retorno y, por ejemplo, lo almacene en el sistema de modo que los componentes de código de programa de cadena ejecutados posteriormente puedan tener acceso al mismo. Dicho valor de retorno puede comprender una expresión en lenguaje natural o ser anotado usando una expresión en lenguaje natural. Incluso los valores numéricos o lógicos pueden servir como valores de retorno; si estos valores de retorno se anotan como lenguaje natural, se puede acceder a ellos fácilmente usando el lenguaje natural, por ejemplo, como un parámetro de un componente de código de programa de cadena recuperado posteriormente.
Según una realización adicional, una funcionalidad implementada por el segmento de código de programa de un componente de código de programa de cadena puede estar configurada para inferir una información de contexto a partir de una cadena de entrada recibida y almacenada y para almacenar esta información de contexto en el sistema. Inferir la información de contexto puede llevarse a cabo, por ejemplo, usando datos y/o reglas de inferencia prealmacenadas en el componente de código de programa de cadena. Por tanto, la información de contexto está disponible para componentes adicionales de código de programa de cadena ejecutados posteriormente como base de información complementaria. La información de contexto comprenderá preferentemente una expresión en lenguaje natural. Hasta cierto punto, dicho componente de código de programa de cadena está configurado para recurrir a una conclusión a partir de una cadena de entrada.
Según una primera realización, un componente de código de programa de cadena puede crearse convencionalmente usando un lenguaje de programación compatible. Esta forma de programación se selecciona por lo general para proporcionar funcionalidades básicas. Esto incluye también estructuras de control simple, tal como enunciados condicionales, bucles, etc.
En otras palabras, el segmento de código de programa puede implementar una estructura de control que controle una secuencia de un programa en al menos uno de los componentes de código de programa de cadena de la pluralidad de componentes de código de programa de cadena, tal como una ramificación, un bucle o un enunciado condicional. Básicamente, dichas estructuras de control se implementan usando segmentos de código de programa de componentes de código de programa de cadena. Como se detalla a continuación, debido a que las estructuras de control pueden implementarse de forma genérica o específica usando componentes de código de programa de cadena, el procedimiento para controlar un sistema, así como un procedimiento descrito a continuación para programar en lenguaje natural, puede proporcionar básicamente la funcionalidad completa de un lenguaje de programación superior.
El segmento de código de programa de un componente de código de programa de cadena puede, por ejemplo, implementar un enunciado condicional, por ejemplo, un enunciado IF. La condición que define el enunciado condicional puede recuperarse según una primera variante usando la funcionalidad implementada por el segmento de código de programa del componente de código de programa de cadena. De esta forma, se pueden implementar y recuperar fácilmente condiciones muy específicas.
Esto se refiere en particular a dichas condiciones que no pueden o difícilmente pueden ser capturadas usando una forma más bien genérica, por ejemplo «si a < b, entonces».
Por ejemplo, una condición del tipo «si hay luz en el exterior, entonces...» puede recuperarse usando un componente de código de programa de cadena, cuyo segmento de código de programa implementa la funcionalidad de advertencia de un sensor de luminosidad montado en el exterior. Para proporcionar una estructura de control basada en esta condición, un generador de código solo tiene que crear un enunciado IF al crear el código de programa para el programa asignado a la cadena de programación e introducir un proceso executeCodesegment(), que recupera el segmento de código de programa del componente de código de programa de cadena, como una condición del enunciado IF.
Según una segunda variante, si el segmento de código de programa de al menos un componente de código de programa de cadena implementa un enunciado condicional, la condición que define el enunciado condicional puede
ser definida por al menos un operador y al menos un operando. Dicho de otra forma, en este caso, la condición tiene una forma genérica de «Operando1 Operando2», por tanto, por ejemplo, «a < b». Por tanto, como la estructura de control, por ejemplo, un enunciado IF, es proporcionada por un componente de código de programa de cadena en este caso, los operandos y el operador pueden ser considerados como parámetros que pueden ser capturados durante la programación en lenguaje natural de una forma que se describe generalmente a continuación. Esto puede llevarse a cabo, en particular, usando el proceso específico de captura de parámetros descrito previamente, que es proporcionado por el componente de código de programa de cadena. Este proceso puede, por ejemplo, capturar cualquier operando numérico y sugerir cualquier operador común para su selección. Como se muestra a continuación con más detalle, los valores de retorno de los componentes anteriores de código de programa de cadena pueden seleccionarse como operandos.
Debe entenderse que no solo los enunciados IF pueden implementarse usando componentes de código de programa de cadena, sino también cualquier otra estructura de control condicional, por ejemplo, bucles («while» (mientras), «for each» (para cada), etc.). En comparación con los enunciados IF, la condición de bucle se revisa con respecto a las estructuras de control de bucle después de la ejecución del bloque de bucle. Si se sigue cumpliendo, habrá una iteración de bucle adicional. Es posible que la condición de bucle no se cumpla después de una o más iteraciones de bucle, por ejemplo, cuando las funcionalidades de los componentes de código de programa de cadena recuperados en el bloque de bucle cambian uno o más valores que se verifican como parte de la condición de bucle. Un cambio de al menos dicho valor también puede llevarse a cabo por la funcionalidad del componente de código de programa de cadena que implementa el bucle, por ejemplo, incrementando un contador de bucle. Por ejemplo, la forma general de un bucle puede implementarse como sigue:
Loop loop_l = new Loop();
while (loop_1.excecuteCodesegment() ) {
// hier wird durch Codegenerator der
// Source Code anderer Satzkomponenten eingetragen.
}}
La clase «loop» (bucle) es una implementación específica de un componente de código de programa de cadena para producir un bucle y puede producir diferentes variaciones de bucles, tales como los bucles «do while», «repeat», «for each» y similares.
La programación en lenguaje natural usando componentes de código de programa de cadena, como se explica en detalle a continuación, permite una operación controlada por el resultado de manera similar. En otras palabras, los llamados "EventListeners" (rutinas de manejo de eventos) también pueden ser representados usando componentes de código de programa de cadena. Lo mismo se aplica al procesamiento en paralelo de diferentes operaciones. Como se muestra a continuación, la presente invención permite programar usando solamente el lenguaje natural, es decir, crear nuevos componentes de código de programa de cadena basados en componentes de código de programa de cadena ya presentes. De esta forma, se logra una novedosa programación usando lenguaje natural que apenas requiere experiencia en programación y que, por tanto, está abierta a un amplio rango de usuarios. En combinación con el concepto general del componente de código de programa de cadena, se facilita adicionalmente la expansión de los sistemas existentes.
Según una implementación, un procedimiento de programación en lenguaje natural comprende las siguientes etapas:
Se proporciona una pluralidad de componentes de código de programa de cadena del tipo descrito previamente, es decir, un componente de código de programa de cadena de la pluralidad de componentes de código de programa de cadena que comprende cada uno una cadena de definición que comprende una expresión en lenguaje natural, y un segmento de código de programa asignado inequívocamente a la cadena de definición que implementa una funcionalidad asignada a la expresión en lenguaje natural.
En una etapa adicional, se inserta una cadena de programación en lenguaje natural en un sistema que está configurado para almacenar y procesar la pluralidad de componentes de código de programa de cadena.
El término de «cadena de programación en lenguaje natural» designa, en el contexto de la presente invención, como el término «expresión en lenguaje natural» explicado previamente, por lo general una expresión que comprende una o más palabras en lenguaje natural. Las palabras pueden estar presentes en su forma básica o la expresión puede comprender, al menos parcialmente, una frase gramaticalmente correcta o una pluralidad de dichas frases. Esta
expresión se denomina «cadena de programación» porque esta expresión, como se describe a continuación, se usa para programar, es decir, para crear un programa ejecutable por una unidad informática, y por tanto puede considerarse como «código de programa» de un «lenguaje de programación», donde el lenguaje de programación es el lenguaje natural en el contexto de la presente invención.
Durante o después de introducir la cadena de programación, se seleccionan uno o más componentes de código de programa de cadena de la pluralidad de componentes de código de programa de cadena si la cadena de programación comprende al menos una subcadena de la cadena de definición del componente de código de programa de cadena. Dicho de otra forma, se buscan coincidencias entre la cadena de programación y las cadenas de definición de los componentes de código de programa de cadena, basados en las cadenas y, si existen, se seleccionan los respectivos componentes de código de programa de cadena. Dicho de otra forma, los componentes de código de programa de cadena se «recuperan» usando la cadena de programación.
Debe entenderse que, en lo que respecta al lenguaje natural, la coincidencia de una parte de la cadena de programación con una subcadena de un componente de código de programa de cadena no siempre tiene que ser completa. Se puede prever que dicha coincidencia solo tiene que superar un umbral predeterminado según un grado de similitud especificado. Para el grado de similitud a la hora de comparar una cadena de programación con la cadena de definición de un componente de código de programa de cadena, se pueden usar grados de similitud conocidos de la técnica anterior, como se describe previamente con respecto a la primera variante de un procedimiento según la invención, para controlar un sistema. Lo mismo se aplica a un procedimiento para comparar una cadena de programación con la cadena de definición; en este caso, se conocen varios procedimientos de la técnica anterior, por ejemplo los procedimientos convencionales de coincidencia de patrones. El umbral especificado, que puede indicarse usando un valor numérico entre 0 y 1 dependiendo del grado de similitud usado, puede variar. Los grados específicos de similitud o los procedimientos de comparación no son objeto de la presente invención. En el caso más sencillo, la cadena de programación puede ser analizada en función de si comprende exactamente o aproximadamente una parte especificada de la expresión en lenguaje natural de la cadena de definición. Exactamente significa, por ejemplo, identidad de palabra. Aproximadamente puede significar, por ejemplo, que las desviaciones gramaticales (por ejemplo, singular/plural, caso, conjugación, etc.) son permisibles y, por ejemplo, los signos de puntuación tales como la coma o similares pueden ser ignorados. Las palabras o términos sinónimos pueden considerarse similares.
En una etapa adicional del procedimiento, se crea eventualmente un programa asignado a la cadena de programación basado en el/los segmento(s) de código de programa de al menos un componente de código de programa de cadena seleccionado.
Un sistema respectivo para programar en lenguaje natural comprende una pluralidad de componentes de código de programa de cadena descritos previamente. El sistema comprende además un dispositivo de entrada para introducir una cadena de programación en lenguaje natural y un dispositivo de control acoplado al dispositivo de entrada. El dispositivo de entrada puede comprender un editor que está configurado para editar la cadena de programación, en particular en relación con la entrada o selección de parámetros para especificar la funcionalidad proporcionada por el segmento de código de programa de un componente de código de programa de cadena seleccionado, como se describe con más detalle a continuación.
El dispositivo de control está configurado para almacenar los componentes de código de programa de cadena y para procesar la cadena de programación de entrada. El dispositivo de control está configurado para seleccionar al menos uno de los componentes de código de programa de cadena si la cadena de programación de entrada comprende al menos una subcadena de la cadena de definición del componente de código de programa de cadena de la forma descrita previamente.
Partes adicionales de los sistemas son, al menos para un lenguaje de programación especificado, un generador de código y un compilador que están configurados para crear un programa asignado a la cadena de programación basado en los segmentos de código de programa de al menos un componente de código de programa de cadena seleccionado.
Por tanto, este aspecto de la presente invención difiere sustancialmente de la técnica anterior. A menudo se intenta «comprender» una entrada de lenguaje natural basada en procedimientos de la inteligencia artificial, es decir, analizarla lingüísticamente y por tanto entender el significado de la entrada. En una etapa adicional, se intenta transmitir este significado al código de programa. El enfoque propuesto en el presente documento no depende básicamente de la «comprensión», sino que funciona de forma estrictamente determinística, sin el riesgo de que se
produzca un error de comprensión semántico de una entrada. La cadena de programación de entrada no se analiza lingüística o semánticamente, sino que solo se compara sobre la base de la comparación de una cadena con las cadenas de definición de los componentes de código de programa de la cadena almacenada. Por una parte, esto apenas requiere tiempo de computación y, por otra parte, se puede implementar muy fácilmente.
La presente invención tiene ventajas adicionales. El enfoque propuesto es extremadamente modular. Los componentes de código de programa de cadena son independientes entre sí. Distintos programadores pueden crear nuevos componentes de código de programa de cadena y añadirlos al sistema de forma independiente uno del otro, en diferentes lugares y en diferentes momentos. Como se muestra a continuación con más detalle, se pueden crear fácilmente nuevos componentes de código de programa de cadena más complejos usando la programación en lenguaje natural a partir de componentes de código de programa de cadena simples, cuyos segmentos de código de programa implementan una funcionalidad básica fundamental y estrictamente limitada, y añadirlos al sistema.
Los segmentos de código de programa de los componentes de código de programa de cadena según el presente procedimiento corresponden aproximadamente a procedimientos fundamentales realizados en lenguaje de máquina en lenguajes de programación superiores. Cuantos más componentes de código de programa de cadena comprenda el sistema, y cuanto más diversos sean, mayores y más variables serán las posibilidades de programación en lenguaje natural dentro del alcance del sistema propuesto previamente.
La meta principal de este aspecto de la presente invención es que los usuarios que no tienen conocimientos específicos de programación puedan crear programas usando el lenguaje natural sobre la base de los componentes de código de programa de cadena proporcionado por los programadores. Es de esperar por tanto que la complejidad de los sistemas de software en diferentes campos de aplicación se reduzca considerablemente, junto con los tiempos de desarrollo y los costes asociados. En la actualidad, los nuevos requisitos o las pequeñas modificaciones de los sistemas existentes no requieren básicamente cambiar una arquitectura básica que probablemente se ha mantenido durante mucho tiempo y se ha adaptado varias veces, sino solo añadir uno u otro componente de código de programa de cadena y crear adiciones basadas en el mismo, usando programas creados fácilmente usando lenguaje natural. Además, prácticamente no es necesaria la anotación de los códigos de los programas creados, lo que consume mucho tiempo, ya que la programación se lleva a cabo ahora en lenguaje natural y, por tanto, el programa es autoexplicativo.
Como se menciona previamente, al menos uno de los componentes de código de programa de cadena seleccionados según una realización preferida está configurado para admitir una entrada de parámetros por medio de la cual la funcionalidad proporcionada por el segmento de código de programa del componente de código de programa de cadena seleccionado puede ser especificada de forma dinámica durante la programación en lenguaje natural. Preferentemente, esto se lleva a cabo usando un procedimiento propio para la entrada de parámetros. Según esta realización, el procedimiento comprende una etapa de entrada de al menos un parámetro para especificar la funcionalidad proporcionada por el segmento de código de programa del componente de código de programa de cadena seleccionado. Esta etapa se lleva a cabo durante o después de la entrada de la cadena de programación y antes de la etapa de creación del programa asignado a la cadena de programación.
La entrada de un parámetro puede llevarse a cabo específicamente de diferentes formas, como se describe previamente.
El procedimiento descrito previamente se puede usar para programar aplicaciones convencionales, por ejemplo para programar las llamadas aplicaciones para dispositivos móviles. En la etapa de creación del programa asignado a la cadena de programación, se crea un código de programa ejecutable en una plataforma predeterminada. Como se menciona previamente, el sistema puede comprender generadores de código y compiladores para cualquier lenguaje de programación y entorno de ejecución.
Por otra parte, se pueden crear nuevos componentes de código de programa de cadena basados en componentes de código de programas en cadena ya presentes mediante la programación en lenguaje natural, como se describe previamente. Esto se logra indicando una nueva cadena de definición para el componente de código de programa de cadena que se va a crear de nuevo, y los diversos componentes de código de programa de cadena se seleccionan introduciendo una cadena de programación adecuada en lenguaje natural de la forma descrita previamente. Se crea un nuevo segmento de código de programa para el componente de código de programa de cadena que se va a crear de nuevo, basándose en un código de programa que se crea automáticamente en la etapa de creación del programa asignado a la cadena de programación.
Una realización preferida de un sistema que está configurado para procesar el lenguaje natural comprende una pluralidad de componentes de código de programa de cadena descritos previamente que están integrados en el sistema. Los componentes de código de programa de cadena comprenden, como se menciona, una cadena de definición que comprende una expresión en lenguaje natural y un segmento de código de programa asignado inequívocamente a la cadena de definición que implementa una funcionalidad asignada inequívocamente a la expresión en lenguaje natural. Al menos uno de los componentes de código de programa de cadena de la pluralidad de componentes de código de programa de cadena comprende un proceso para la entrada de parámetros, donde este componente de código de programa de cadena está configurado para admitir una entrada de parámetros por medio de la cual se puede especificar la funcionalidad proporcionada por el segmento de código de programa de este componente de código de programa de cadena.
El sistema está configurado además, según una realización, para ejecutar la funcionalidad implementada por el segmento de código de programa al recibir una cadena de entrada que tiene una similitud especificada con la cadena de definición según un grado de similitud especificado.
Como se menciona previamente, el sistema puede integrar cualquier cantidad de componentes de código de programa de cadena. Estos forman unidades cerradas y funcionales y por tanto pueden ser proporcionados por programadores independientes y extender por tanto la funcionalidad de todo el sistema. Como también se mencionado previamente, es posible que la funcionalidad de un componente de código de programa de cadena recupere la funcionalidad de un componente adicional de código de programa de cadena creando una cadena de entrada respectiva y transmitiendo la cadena de entrada al sistema. Dicho de otra forma, un componente de código de programa de cadena es recuperado por otro componente de código de programa de cadena, no directamente sino siempre indirectamente, a través del sistema. Por tanto, no hay dependencias entre los componentes individuales del código de programa de cadena que tienen que ser consideradas durante la implementación de un componente de código de programa de cadena. Cada uno de los componentes de código de programa de cadena puede proporcionar una solución específica para una subcomplicación específica. Combinando adecuadamente las funcionalidades de los distintos componentes de código de programa de cadena, se pueden manejar ampliamente complicaciones complejas. Hasta ahora, las funcionalidades que faltan siempre se pueden complementar integrando nuevos componentes de código de programa de cadena, sin necesidad de cambiar los componentes de código de programa de cadena ya presentes o el sistema.
Según una realización, el sistema comprende un dispositivo de control que está configurado para recibir una cadena de entrada que comprende una expresión en lenguaje natural. El dispositivo de control está configurado además para comparar la cadena de entrada con una cadena de definición de un componente de código de programa de cadena proporcionado en el sistema según el grado de similitud especificado y para ejecutar la funcionalidad implementada por el segmento de código de programa del respectivo componente de código de programa de cadena en el caso de que la cadena de entrada tenga la similitud especificada con la cadena de definición según el grado de similitud especificado.
Según una realización adicional, el sistema comprende un dispositivo de entrada. El dispositivo de entrada está configurado para recibir una entrada del usuario en lenguaje natural, para inferir una cadena de entrada a partir de la misma que comprende una expresión en lenguaje natural, y para enviar esta cadena de entrada al dispositivo de control. Dicho dispositivo de entrada puede comprender, por ejemplo, un dispositivo convencional de reconocimiento de voz que traduce a una cadena respectiva el discurso detectado por un micrófono. Además, un editor que permite una entrada usando un teclado o similares puede servir como dispositivo de entrada para el sistema.
Según una realización, el sistema puede comprender otra clase de dispositivos de entrada que están configurados para recibir una señal del entorno, por ejemplo, usando un sensor, para inferir una cadena de entrada del mismo que comprende una expresión en lenguaje natural, y para enviar esta cadena de entrada al dispositivo de control del sistema. De manera más general, se puede proporcionar un dispositivo de entrada que esté configurado para recibir cualquier señal de activación especificada, para inferir una cadena de entrada dependiente de la señal de activación que comprenda una expresión en lenguaje natural, y para enviar la cadena de entrada al sistema. La señal de activación puede ser una señal del entorno que, por ejemplo, indique un cambio en el entorno (por ejemplo, en relación con la luminosidad, el calor, el ruido, etc.). De forma alternativa, dicha señal de activación también puede ser enviada por el sistema con el fin de provocar que el dispositivo de entrada cree una cadena de entrada que, por ejemplo, describa un estado actual del sistema del dispositivo de entrada (por ejemplo, «encendido/apagado» en el caso de un dispositivo de iluminación; «abierta/cerrada» en el caso de una ventana, etc.).
En este caso, se puede ver una característica adicional del sistema descrita en el presente documento. No solo un usuario humano, sino también los dispositivos técnicos se comunican como un usuario con el dispositivo de control
del sistema sobre la base de expresiones en lenguaje natural. El dispositivo de control del sistema no distingue entre una entrada de un usuario humano y una entrada de un usuario en forma de un dispositivo técnico, sino que procesa por igual la cadena de entrada recibida que comprende una expresión en lenguaje natural. Por ejemplo, se puede proporcionar un dispositivo de entrada que capte la temperatura, el brillo, la humedad, el ruido o parámetros ambientales similares, los describa en lenguaje natural y los envíe a un dispositivo de control del sistema. En respuesta, el sistema puede recuperar un componente de código de cadena respectivo y por tanto, por ejemplo, controlar una funcionalidad del dispositivo de recuperación y/o de otro dispositivo.
El sistema puede comprender además un dispositivo de salida que esté configurado para emitir una señal de salida hacia un usuario en lenguaje natural con el fin de admitir un diálogo entre el usuario y un componente de código de programa de cadena. El dispositivo de salida puede proporcionar en particular una salida de discurso convencional a través de un altavoz o similares. Incluso es posible una salida de texto a través de una pantalla o similares. Se entiende que el sistema también puede comprender un dispositivo combinado de entrada y salida.
Como se menciona varias veces, el sistema puede comprender dispositivos técnicos de cualquier tipo que estén configurados para ser controlados usando una funcionalidad implementada por un segmento de código de programa de un componente de código de programa de cadena. El procedimiento descrito es en particular adecuado para controlar robots. Incluso el control de dispositivos domésticos u otros dispositivos electrónicos de consumo puede llevarse a cabo usando el procedimiento descrito. Además, se puede usar un procedimiento descrito previamente para implementar un sistema experto. En particular, con la fácil implementación de los componentes de código de programa de cadena por parte de diferentes usuarios en el sistema, las diferentes áreas de conocimiento que son cubiertas por usuarios individuales pueden conectarse fácilmente para combinar fácilmente las diferentes áreas de conocimiento que estaban separadas previamente.
Breve descripción de las figuras
A continuación, la invención se explica a modo de ejemplo con respecto a las figuras adjuntas basadas en algunas realizaciones de ejemplo. En las figuras:
la figura 1 muestra esquemáticamente una realización preferida de una estructura de datos según la invención; la figura 2 muestra esquemáticamente diferentes componentes de una primera realización preferida de un sistema según la invención;
la figura 3 ilustra las etapas de una primera realización preferida de un procedimiento según la invención usando el sistema de la figura 2;
la figura 4 ilustra las etapas de una segunda realización preferida de un procedimiento según la invención;
la figura 5 muestra componentes de una segunda realización preferida de un sistema según la invención para programar en lenguaje natural; y
la figura 6 ilustra las etapas de una tercera realización preferida de un procedimiento para programar en lenguaje natural usando el sistema de la figura 5.
Descripción detallada de la invención
La figura 1 muestra esquemáticamente una realización preferida de una estructura de datos 10 en forma de componente de código de programa de cadena 10. El componente de código de programa de cadena comprende una cadena de definición 12 que comprende una expresión 13 en lenguaje natural. Además, el componente de código de programa de cadena comprende un segmento de código de programa 14 que implementa una funcionalidad asignada a la expresión 13 en lenguaje natural. Finalmente, el componente de código de programa de cadena comprende un procedimiento 16 para la entrada de parámetros.
Un componente de código de programa de cadena 10 forma una unidad inseparable y cerrada, que consiste en la cadena de definición 12 con la expresión 13 en lenguaje natural y el segmento de código de programa 14 que reconoce el significado de la expresión 13 en lenguaje natural. El componente de código de programa de cadena se reconoce técnicamente como un componente que oculta su implementación interna hacia el exterior. La implementación interna consiste, por ejemplo, en un cuerpo de procedimiento que reconoce el segmento de código de programa 14 o el componente de código de programa de cadena 10. La cadena de definición 12 sirve como punto de acoplamiento para una cadena de entrada en lenguaje natural para recuperar la funcionalidad del componente de código de programa de cadena 10, como se describe a continuación con más detalle en relación con la figura 3. Por tanto, un componente de código de programa de cadena 10 siempre representa una unidad completa extremadamente cerrada y funcional. El componente de código de programa de cadena 10 puede integrarse usando un mecanismo de enchufar y usar en un sistema 100 de una forma conocida (véase la figura 2).
Un componente de código de programa de cadena 10 puede proporcionarse usando un lenguaje de programación convencional, como se muestra a continuación usando el ejemplo C++.
Para implementar un componente de código de programa de cadena 10, se define una clase abstracta en C++ que sirve como clase básica para los componentes específicos de código de programa de cadena 10:
class Zeichenketten-Programmcode-Komponente {
public string getSentence() = 0;
public void collectParameter() = 0;
public ResultObject executeCodesegment () 0;
}
Los componentes específicos de código de programa de cadena implementan a continuación esta clase abstracta.
Como ejemplo, la clase «MyCPlusPlusAddition» se lleva a cabo para la cadena de definición con la expresión en lenguaje natural de «Añadir un número a otro número». El proceso getSentence() devuelve una expresión en lenguaje natural.
class MyCPlusPlusAddition : Zeichenketten-Programmcode-Komponente {
public string getSentence(){
return " Addiere eine Zahl zu einer anderer Zahl";
};
public void collectParameter( ... ) {
... some code;
};
public Object executeCodesegment (){
... some code;
};
}
En el presente ejemplo, el proceso collectParameter(...) se usa para recoger los parámetros funcionales requeridos para la ejecución del segmento de código. Un parámetro de entrada puede ser verificado en cuanto a su corrección en relación con el tipo de parámetro esperado para prevenir entradas incorrectas. En el presente ejemplo, puede verificarse, por ejemplo, como parte del proceso collectParameter(...) que se introducen exactamente dos parámetros en forma de valores numéricos, y no cualquier cadena.
El proceso executeCodesegment() se usa para implementar la funcionalidad real del componente de código de programa de cadena 10, a saber, la adición de dos números.
Debe entenderse que el concepto de componente de código de programa de cadena descrito anteriormente como ejemplo no solo puede reconocerse en C++, sino usando cualquier lenguaje de programación convencional, tal como PHP, Visual Basic, C#, Objective-C o similares.
Como alternativa a la programación de un componente de código de programa de cadena usando un lenguaje de programación convencional, también se puede programar un componente de código de programa de cadena usando un lenguaje natural, como se describe a continuación con más detalle en relación con la figura 4.
La figura 2 muestra a modo de ejemplo un sistema 100 en el que se integran diferentes componentes de código de programa de cadena 10, 10', 10''. Un usuario 40, 42 puede comunicarse con el sistema usando un lenguaje natural y por tanto activar la ejecución de diferentes funcionalidades Usando estas funcionalidades, cada una de ellas implementada por el segmento de código de programa de los componentes de código de programa de cadena 10, 10', 10'', pueden controlarse en particular los dispositivos 30, 32, 34, 36 conectados con el sistema 100, tales como una lámpara 30, un robot 32, una televisión 34 o un sistema experto 36. En cuanto al usuario, es posible tanto un usuario humano 42 como un dispositivo técnico 40 respectivamente configurado.
A continuación se describe la interacción de los componentes individuales del sistema con respecto a las figuras 3 y 4.
En la figura 3, se muestran etapas de una primera realización de un procedimiento para controlar la comunicación de
un usuario 40, 42 con un sistema 100.
En la etapa S1, se proporciona al menos un componente de código de programa de cadena 10 en el sistema 100. El componente de código de programa de cadena 10 comprende una cadena de definición 12 que comprende una expresión 13 en lenguaje natural, y un segmento de código de programa 14 asignado inequívocamente a la cadena de definición 12 que implementa una funcionalidad asignada a la expresión 13 en lenguaje natural.
El sistema 100 está configurado para ejecutar la funcionalidad implementada por el segmento de código de programa 14 al recibir una cadena de entrada que tiene una similitud especificada con la cadena de definición 12 según un grado de similitud especificado, como se describe a continuación.
El sistema 100 comprende un dispositivo de control 20. El dispositivo de control 20 está configurado para recibir una cadena de entrada que comprende una expresión en lenguaje natural. El dispositivo de control 20 está configurado además para comparar la cadena de entrada con una cadena de definición 12 de un componente de código de programa de cadena 10 según el grado de similitud especificado, para ejecutar una funcionalidad implementada por un segmento de código de programa 14 o el componente de código de programa de cadena 10 en cuestión, si la cadena de entrada tiene la similitud especificada con la cadena de definición 12 según el grado de similitud especificado.
En la etapa S2, el dispositivo de control 20 recibe una cadena de entrada, por ejemplo en forma de la expresión en lenguaje natural «Enciende la televisión, por favor» del usuario humano 42. La entrada de una cadena de entrada puede ser admitida usando un dispositivo de entrada 50, 52 que está configurado, por ejemplo, para capturar una frase pronunciada por el usuario 42 «Enciende la televisión, por favor», por ejemplo, usando un micrófono, y para traducirla en una cadena respectiva, por ejemplo, usando un software convencional de reconocimiento de voz. La cadena traducida, «Enciende la televisión, por favor» es enviada a continuación por el dispositivo de entrada 50, 52 al dispositivo de control 20 como una cadena de entrada.
En la etapa S3, el dispositivo de control compara la cadena de entrada con una cadena de definición de uno o más componentes de código de programa de cadena 10, 10', 10'' según un grado de similitud especificado.
La comparación de expresiones en lenguaje natural puede llevarse a cabo usando, por ejemplo, procedimientos de coincidencia de patrones conocidos convencionalmente.
Con respecto al ejemplo ilustrado en la figura 2, se supone que en el sistema 100 está integrado un componente de código de programa de cadena 10 que comprende la cadena de definición 12 con la expresión en lenguaje natural «Enciende la televisión». Esta cadena de definición 12 se asigna a un respectivo segmento de código de programa 14 que implementa una funcionalidad para encender la televisión 34 que está conectado con el sistema 100.
La comparación de la cadena de entrada «Enciende la televisión, por favor» con la cadena de definición «Enciende la televisión» indica que la cadena de entrada comprende completamente la cadena de definición, lo que se interpreta como una similitud suficiente en este documento.
Debe entenderse que se pueden usar diferentes grados de similitud y diferentes procedimientos de comparación para comparar cadenas que contengan expresiones en lenguaje natural. Dichos procedimientos, que no son objeto de la presente invención, son conocidos por el experto en la materia. Además, se sabe que las expresiones que se van a comparar pueden facilitarse adecuadamente para la comparación, por ejemplo, omitiendo palabras de relleno (que no tienen contenido en este contexto), tal como «por favor», artículos y similares. Asimismo, las expresiones que se van a comparar pueden facilitarse en relación con la gramática, por ejemplo, indicando los verbos solo en su forma básica.
Si, como en el caso anterior, la cadena de entrada «Enciende la televisión, por favor» tiene la similitud especificada con la cadena de definición «Enciende la televisión» según el grado de similitud especificado, el dispositivo de control ejecuta la funcionalidad implementada por el respectivo segmento de código de programa 14 en la etapa S4, por lo que la televisión 34 se enciende.
En el caso de que no se pueda encontrar una cadena de definición suficientemente similar a un componente de código de programa de cadena en la etapa S3, el dispositivo de control 20 puede indicar esto al usuario de una forma adecuada. Sin embargo, si el sistema encuentra una pluralidad de cadenas de definición, cada una de las cuales tiene una determinada similitud con la cadena de definición, esta puede ser emitida al usuario. En este caso, el usuario puede tener la posibilidad de seleccionar el componente de código de programa de cadena que considere
mejor para su cadena de entrada, basándose en la respectiva cadena de definición.
De forma alternativa, una cadena de entrada con una expresión en lenguaje natural también puede ser creada por un dispositivo de entrada, por ejemplo, un sensor de luminosidad 40, y enviada al dispositivo de control 20. Para este propósito, si el dispositivo de entrada 40 reconoce, por ejemplo, que la luminosidad de una habitación disminuye, por ejemplo, al anochecer o en caso de cielo muy nublado, puede crear una cadena de entrada en forma de «está oscuro» y enviarla al dispositivo de control 20. Este puede escanear a continuación los componentes de código de programa de cadena 10, 10', 10'' integrados en el sistema, como se explica previamente, por si uno de estos componentes de código de programa de cadena tuviera una cadena de definición con una similitud suficiente. Si este es el caso, el dispositivo de control 20 puede ejecutar la funcionalidad asignada inequívocamente a esta cadena de definición con el posible resultado de que la lámpara 30 conectada al sistema 100 se encienda. Se puede prever además que el dispositivo 40 no transmita automáticamente esta cadena de entrada al dispositivo de control 20, sino solo cuando el dispositivo de control 20 reciba una consulta respectiva.
Como alternativa al control de dispositivos técnicos, los segmentos de código de programa 14 del componente de código de programa de cadena 10 pueden ser usados de forma ventajosa para implementar una funcionalidad que permita una conversación entre un usuario 42 y el componente de código de programa de cadena 10. En particular, en el contexto de los sistemas expertos, por ejemplo, en el campo de la medicina, esto puede ser empleado de forma ventajosa. El siguiente ejemplo solo pretende indicar esto de forma muy breve y ejemplar.
Un sistema experto 36 puede comunicarse con un usuario 42 usando componentes de código de cadena 10, 10', como se describe a continuación. Por ejemplo, el usuario 42 puede ponerse en contacto con el sistema experto 36 a través del dispositivo de control 20 usando la expresión «Creo que estoy enfermo/a». El dispositivo de control 20 compara la cadena de entrada que comprende esta expresión con las cadenas de definición de los componentes de código de programa de cadena 10 presentes, por ejemplo, encuentra una cadena de definición 12 de un componente de código de programa de cadena 10 con la expresión «Estoy enfermo/a». El segmento de código de programa 14 de este componente de código de programa de cadena 10 implementa una conversación con el usuario 42, por ejemplo, de la siguiente manera:
Usuario: «Creo que estoy enfermo/a»
Sistema: «¿Qué te pasa? ¿Tienes fiebre?»
Usuario: «Sí»
Sistema: «¿De cuánto es la fiebre?»
Usuario: «38,5»
Sistema: «¿Desde cuándo tienes fiebre?»
Usuario: «Desde hoy al mediodía»
Sistema: «¿Tienes otros síntomas?»
Usuario: «No»
Sistema: «Entonces relájate. Tal vez te sientas mejor mañana».
Las señales de salida del sistema pueden ser emitidas a través de un dispositivo de salida adecuado 50, 54, por ejemplo, un altavoz 54, en lenguaje natural para el usuario. Como alternativa, se pueden mostrar las preguntas y las recomendaciones en un monitor.
El componente de código de programa de cadena 10 que se ha recuperado usando la cadena de entrada «Creo que estoy enfermo/a» implementa una conversación que recupera el estado de salud general del usuario. Si no hay anomalías, la conversación puede terminarse como se indica. Sin embargo, en el caso de que la conversación sea la siguiente:
Sistema: «¿Qué te pasa? ¿Tienes fiebre?»
Usuario: «Sí»
Sistema: «¿De cuánto es la fiebre?»
Usuario: «39,5»
Sistema: «¿Desde cuándo tienes fiebre?»
Usuario: «Desde hace tres días».
Sistema: «¿Tienes otros síntomas?»
Usuario: «Sí, dolor de cabeza y en el cuerpo, rinitis y tos»,
el segmento de código de programa 14 del componente de código de programa de cadena 10 puede formarse de modo que la conversación sea la siguiente:
Sistema: «Tus síntomas pueden indicar una gripe»...
Al mismo tiempo, la funcionalidad del componente de código de programa de cadena 10 actualmente ejecutado puede ser configurado para transmitir una cadena de entrada con la expresión «gripe» al dispositivo de control 20. Para analizar el estado de salud del usuario 42 en relación con la sospecha de presencia de una gripe usando un componente de código de programa de cadena independiente 10' que está destinado a este propósito, se puede recuperar la funcionalidad de este componente de código de programa de cadena 10'. Usando una conversación adecuada, estas funcionalidades pueden pedir información adicional sobre el estado de salud del usuario y proporcionar las acciones propuestas correspondientes.
Típicamente, el componente de código de programa de cadena 10' que tiene la cadena de definición con la expresión «gripe» puede acceder a dicha información que ha sido recuperada por el componente de código de programa de cadena 10 anterior (fiebre, de cuánto, cuánto tiempo, otros síntomas). Se pueden omitir las preguntas respectivas que se proporcionan por lo general en la funcionalidad. Por tanto, sigue siendo transparente para el usuario que el componente de código de programa de una cadena 10 recuperó indirectamente otro componente de código de programa de otra cadena 10'.
Como se menciona en varias ocasiones, un componente de código de programa de cadena también puede ser programado por un usuario usando el lenguaje natural, como se muestra a continuación de forma ejemplar e inicialmente simplificada usando un ejemplo muy simple con respecto a la figura 4. La programación en lenguaje natural se describe a continuación en detalle con respecto a las figuras 5 y 6.
En una primera etapa T1, se proporciona en el sistema 100 una pluralidad de componentes de código de programa de cadena 10; 10'; 10''. Estos componentes de código de programa de cadena son la base para la programación en lenguaje natural de un nuevo componente adicional de código de programa de cadena.
Con respecto al sistema 100 de la figura 2, se supone que en el sistema ya se proporcionan diferentes componentes de código de programa de cadena 10, 10', 10'', por ejemplo, un componente de código de programa de cadena 10 para encender la televisión 34. Este comprende una cadena de definición 12 con la expresión «Enciende la televisión» y un segmento de código de programa acoplado a la misma que implementa una funcionalidad para encender la televisión 34.
Otro componente de código de programa de cadena 10' sirve para adaptar la luminosidad y la iluminación dentro de la habitación y comprende la cadena de definición «Comprueba la luminosidad». El segmento de código de programa 14 de este componente de código de programa de cadena 10' implementa una funcionalidad que envía una consulta al sensor de luminosidad 40 para transmitir al dispositivo de control 20 un valor de luminosidad actual en forma de una cadena de entrada (que comprende una expresión en lenguaje natural). Como se menciona previamente, puede haber otro componente de código de programa de cadena 10'' en el sistema 100 que procese esta cadena de entrada y, por ejemplo, encienda la lámpara 30 al recibir una expresión en la forma «está oscuro» o acciona un dispositivo de oscurecimiento, por ejemplo, una persiana (no mostrada), en respuesta a una expresión «hay mucha luz».
A continuación, en la etapa T2, el usuario 42 define un nuevo componente de código de programa de cadena usando una pluralidad de componentes de código de programa de cadena 10; 10', 10'' ya proporcionados en el sistema, como sigue:
En una primera subetapa TS2.1, el usuario 42 indica ahora una nueva cadena de definición para el nuevo componente de código de programa de cadena que se va a definir que comprende una expresión en lenguaje natural. En el presente ejemplo, esta cadena de definición puede comprender, por ejemplo, la expresión «Me gustaría ver la televisión».
En una subcadena adicional TS2.2, el usuario indica una secuencia de cadenas («cadena de programación») para definir el segmento de código de programa del componente adicional de código de programa de cadena que se va a definir de nuevo. Cada una de las cadenas de la secuencia de cadenas comprende una expresión en lenguaje natural. Si una cadena de la secuencia de cadenas según el grado de similitud especificado tiene una similitud especificada con una cadena de definición de un componente de código de programa de cadena 10 de la pluralidad de componentes de código de programa de cadena 10; 10'; 10'', es decir, si la «cadena de programación» comprende al menos una subcadena de la cadena de definición del componente de código de programa de cadena 10, el segmento de código de programa del componente de código de programa de cadena que se va a definir de nuevo se extiende por el segmento de código de programa 14 del componente de código de programa de cadena 10
de la pluralidad de componentes de código de programa de cadena 10; 10', 10''.
Específicamente, la secuencia en cadena (cadena de programación) en el presente caso puede ser como sigue («Comprueba la luminosidad», «Enciende la televisión»). La cadena «Comprueba la luminosidad» comprende la expresión «Comprueba la luminosidad» de la cadena de definición 12 del componente de código de programa de cadena 10' explicado previamente. En consecuencia, el segmento de código de programa (que todavía está vacío) del componente de código de programa de cadena que se va a definir se complementa con el segmento de código de programa del componente de código de programa de cadena 10'. De forma similar, el segmento de código de programa del componente de código de programa de cadena que se va a definir se completa adicionalmente con el segmento de código de programa del componente de código de programa de cadena 10, ya que la cadena «Enciende la televisión» comprende la expresión «Enciende la televisión» de la cadena de definición 12.
En una última etapa T3, el componente de código de programa de cadena definido de nuevo se integra en el sistema 100 como se describe anteriormente.
Si el usuario 42 se pone ahora en contacto con el sistema 100 usando la expresión «Me gustaría ver la televisión», se recupera la funcionalidad del componente de código de programa de cadena definido de nuevo. Este comprueba la luminosidad usando una consulta al sensor de luminosidad 40. Dependiendo de una cadena de entrada recibida por el sistema 100 («está oscuro», «hay mucha luz»), la lámpara 30 se enciende opcionalmente o se baja una persiana. Finalmente, se enciende la televisión 34.
Debe entenderse que las secuencias que son significativamente más complejas pueden ser programadas usando dicho procedimiento, solo usando el lenguaje natural y usando los componentes de código de programa de cadena ya presentes. En particular, incluso las estructuras de control, tales como las ramificaciones, enunciados condicionales, bucles, etc., pueden implementarse en forma de componentes de código de programa de cadena, preferentemente al principio del proceso, como componentes básicos y usando un lenguaje de programación convencional. Estos componentes básicos pueden usarse posteriormente como parte de una posterior programación de nuevos componentes de código de programa de cadena usando el lenguaje natural.
Sin explicaciones detalladas adicionales, un nuevo componente de código de programa de cadena con la cadena de definición «Me gustaría ver la televisión» podría definirse de forma alternativa al ejemplo anterior usando la siguiente secuencia de cadenas:
«Si estoy en la oficina,
cambiar la intensidad de la iluminación de la habitación a noche de luna llena.
Bajar las persianas y
encender la televisión en la oficina.
Si estoy en el salón,
encender la televisión en el salón».
En este ejemplo se parte de la base de que el sistema cuenta con componentes de código de programa de cadena que implementan un enunciado condicional («Si...»), así como una ubicación del usuario («en el salón...», «en la oficina»), un accionamiento regulable de la iluminación («cambiar la intensidad de la iluminación de la habitación a noche de luna llena») y de la persiana («bajar la persiana») y un accionamiento de diferentes televisiones («encender la televisión en la oficina», «encender la televisión en el salón»), y accesibles a través de las respectivas cadenas de definición.
En la figura 5, se ilustran esquemáticamente los componentes de un sistema 200 que permite la programación en lenguaje natural.
En el presente contexto, la programación en lenguaje natural se basa significativamente en una estructura de datos que se conoce como componente de código de programa de cadena y que ya se ha descrito previamente.
El sistema 200 comprende un dispositivo de control 260 con un área de almacenamiento 270, un dispositivo de entrada 240, un área de almacenamiento 230, así como un generador de código 282 y un compilador 284. A continuación se explican las tareas y funcionalidades de cada uno de los componentes.
El dispositivo de entrada 240 se usa para introducir una entrada en el sistema por parte del usuario del sistema. La
entrada se efectúa, como se muestra a continuación, en lenguaje natural usando una cadena de programación en lenguaje natural, como «Añadir dos números». La entrada puede efectuarse a través de un teclado o similares o a través de entrada de voz.
El dispositivo de entrada 240 comprende un editor 250 que, como se muestra a continuación, admite la comunicación de un usuario con el sistema 200. El editor 250 comprende típicamente un dispositivo de salida, por ejemplo, una pantalla donde la entrada del usuario así como las salidas del dispositivo de control 260 pueden ser emitidas.
Ya se ha descrito un componente de código de programa de cadena 210, 210', 210'' con respecto a la figura 1. El modo de acción y las ventajas del uso de un proceso 16 para la entrada de parámetros se evidencian a continuación con respecto a un ejemplo sencillo.
Un componente de código de programa de cadena implementa un proceso «collectParameterQ» para crear y recoger los parámetros. En este ejemplo, el segmento de código de programa del componente de código de programa de cadena implementa una funcionalidad para emitir la hora en uno o más lugares que pueden ser introducidos como parámetros:
public class WhatTime: SentenceComponent
{
public:
String getSentence();
String collectParameter(String *sentence,
String *suggestions,
String receivedWord);
/* Markierung: nameRueckgabe =>
"aktuelle Zeit der Stadte" */
String excecuteCodesegment();
Private:
List<String> selectedCities;
}
public String WhatTime:: getSentence ()
{
return "Wie spat ist es in den folgenden Stadten?"
}
El proceso 16 para la entrada de parámetros tiene la siguiente forma:
public String WhatTime::collectParameter(String *sentence,
String *suggestions,
String receivedWord);
{
if (!sentence.isEmpty())
{
sentence = "Wie spat ist es";
return "ok";
}
if (sentens.endsWith(”?"))
{
sentence.replaceLastCommaWith(" und ");
return "EndOfSentence";
}
if (receivedWord == „Schweiz"))
{
selectedCities.add(„Schweiz")
sentence = sentence „in der Schweiz";
return „ok";
}
else if (receivedWord == „Malta"))
{
selectedCities.add(„Malta")
sentence = sentence „auf Malta";
return „ok";
}
else if (receivedWord == „London"))
{
selectedCities.add(„London")
sentence = sentence „in London";
return „ok";
}
else
{
suggestions = "(Suggestion: Paris),
(Suggestion: London),
(Suggestion: Schweiz),
(Suggestion: Malta)";
Return "(Error: Ihr Angabe ist falsch!)";
}
}
public String WhatTime::excecuteCodesegment() {
String timeInCities = "Die Ausgabe derUhrzeit für
folgende Stadte: ";
for(int i; sizeOf(selectedCities) < i; i++)
{
timeInCities = timeInCities selectedCities[i] ": "
Date.getTime(selectedCities[i]).toString();
}
return timeInCities;
}
Si se introduce «qué hora» como cadena de programación o cadena de entrada, por ejemplo, a través de un editor, el sistema buscará una coincidencia a través de un algoritmo de coincidencia en la cantidad de componentes de código de programa de cadena presentes, y encontrará una coincidencia parcial con la cadena de definición del componente de código de programa de cadena indicado previamente: «¿Qué hora es en las siguientes ciudades?» Posteriormente, el sistema recupera el proceso «collectParameter» de este componente de código de programa de cadena.
Basándose en el siguiente código de programa, el proceso collectParameter comprueba si la frase empieza correctamente, si no, será correcto:
if (!sentence.isEmpty())
{
sentence = „Wie spat ist es";
return „ok";
}
Usando el valor de retorno «ok», el editor indica a los sistemas que la indicación es correcta. El propio sistema proporciona el contenido del argumento «frase» al editor. El editor representa la corrección y espera la entrada del usuario Si el usuario indica la palabra «Suiza», el editor transmite esta entrada al sistema. El sistema asigna la palabra «Suiza» al argumento «receivedWord» y recupera el proceso «collectParameter».
Basándose en el siguiente código de programa, el proceso 16 de entrada de parámetros corrige la gramática y añade una entrada en la lista de las ciudades seleccionadas:
if (receivedWord == „Schweiz"))
{
selectedCities.add(„Schweiz")
sentence = sentence „in der Schweiz,
return „ok";
}
Por tanto, el enunciado «Qué hora es en Suiza» se representa en el editor.
Suponiendo que el usuario indique «Matta», se recupera de nuevo el proceso «coNectParameter». Como la palabra «Matta» no es una ciudad válida, se crea un mensaje de error mediante el siguiente código de programa del proceso 16 para la entrada de parámetros, y se transmiten al sistema algunas correcciones propuestas:
{
suggestions = "(Suggestion: Paris),
(Suggestion: London),
(Suggestion: Schweiz),
(Suggestion: Malta)";
Return "(Error: Ihr Angabe ist falsch!)";
}
El sistema transmite el mensaje de error y las propuestas al editor. El editor emite el mensaje de error y las propuestas:
A continuación, el usuario corrige su enunciado con «Malta», y el editor transmite la entrada corregida al sistema. El controlador asigna la palabra «Malta» al «receivedWord» y recupera de nuevo el proceso «collectParameter». Mediante el siguiente código de programa, se añade una entrada más en la lista de las ciudades seleccionadas y se corrige la frase en relación con la gramática:
else if (receivedWord == „Malta"))
{
selectedCities.add(„Malta")
sentence = sentence „auf Malta";
return "ok";
}
Ahora, la frase tiene el siguiente aspecto «Qué hora es en Suiza, en Malta». Con el signo de interrogación, el usuario indica el final de la frase. El editor envía esta entrada al sistema. El proceso «collectParameter» se recupera de nuevo. Usando el siguiente código de programa, se corrige de nuevo la frase en relación con la gramática, y usando el valor de retorno «EndOfSentence», se indica al sistema que la entrada de parámetros ha terminado.
if (sentens.endsWith(„?"))
{
sentens.replaceLastCommaWith(„ und ");
return "EndOfSentence";
}
El sistema envía el contenido del argumento «frase» al editor. El editor muestra la frase y espera las indicaciones del usuario.
De forma alternativa al uso de un proceso 16 para la entrada de parámetros, también se puede efectuar una introducción de parámetros de forma diferente usando el dispositivo de control 260. Para este propósito, se marca un proceso de un componente de código de programa de cadena, por ejemplo, usando el indicador «partOfSentence». El proceso tiene un parámetro de entrada y no tiene valor de retorno.
/* Markierung: partOfSentence = „eine Zeichenkette" */
void setOutput( String output );
De esta forma, el componente de código de programa de cadena 210 le indica al dispositivo de control 260 que interprete una parte de la cadena de definición como un parámetro y procede a la captura del parámetro. A continuación, el parámetro capturado debe ser asignado a este proceso por el generador de código 282 (en lo sucesivo, en los ejemplos de código de programa indicados ejemplarmente aparece el término «SentenceComponent» en lugar de «componente de código de programa de cadena», lo que debe entenderse como un sinónimo).
public class PrintText: public SentenceComponent {
public:
String getSentence();
void executeCodesegment();
/* Markierung: partOfSentence = „eine Zeichenkette" */
void setOutput ( String output );
Private:
String outputString;
}
público void :: setOutput( String output ){
outputString = output;
}
public PrintText:: getSentence (){
return „gebe eine Zeichenkette auf demBildschirm aus."
}
public String PrintText::executeCodesegment() {
println( outputString );
}
Si el nuevo componente de código de programa de cadena 210, «Emitir una cadena en la pantalla» mostrado anteriormente se integra en el sistema 200, se insertará en una tabla de registro después de un análisis. Usando el indicador capturado durante el registro, el dispositivo de control 260 reconoce que el valor de la parte de la frase, una «cadena», debe asignarse al proceso «setOutput( String output )» como un argumento.
Si un nuevo componente de código de programa de cadena 210 se integra por lo general en el sistema 200, este puede ser analizado por un analizador de metadatos (no mostrado) y los respectivos metadatos se conservan para uso adicional.
Los metadatos incluyen, por ejemplo, el nombre de la clase, las clases básicas, los procesos y las variables. Por ejemplo, si se suministra un componente de código de programa de cadena C++, se buscará una clase analizando la declaración incluida de la clase y su proceso que implementa la clase abstracta «SentenceComponent». Por tanto, un analizador de metadatos C++ reconoce la clase como componente de código de programa de cadena. Se recupera el proceso «getSentence», y la cadena de definición, incluyendo el nombre de la clase, se inserta en una tabla de metadatos. El componente de código de programa de cadena se integra por tanto en el sistema y se puede usar para programar en lenguaje natural.
Los analizadores de metadatos que están disponibles para cualquier lenguaje de programación común poseen técnicas que permiten obtener cualquier información relativa a elementos públicos de un componente de código de programa de cadena. En el caso de C++, se analiza el archivo de declaración del componente de código de programa de cadena para obtener los metadatos. Esta técnica proporciona lenguajes de programación modernos y convencionales. En Java, por ejemplo, cualquier metadato de una clase se proporciona por «reflexión».
Un componente de código de programa de cadena 210 para emitir la hora actual puede tener la siguiente forma, por ejemplo:
Por tanto, los metadatos del proceso executeCodesegment() en el lenguaje de programación C++ pueden ser como sigue:
Lenguaje de programación =C++
Archivo de cabecera =WhatTime.h
Nombre de clase =WhatTime
Nombre de proceso = executeCodesegment
Tipo de valor de retorno = Tiempo
Argumentos =ninguno
El analizador de metadatos también proporciona los metadatos para el valor de retorno «Hora»:
Lenguaje de programación =C++
Archivo de cabecera = time.h
Nombre de clase = Time
El analizador de metadatos y el dispositivo de control tienen toda la información de metadatos de un componente de código de programa de cadena.
El proceso executeCodesegment() sirve por lo general para implementar la funcionalidad actual de un componente de código de programa de cadena 210, por ejemplo, la emisión de una cadena capturada como parámetro o la adición de dos números.
Más adelante se explica un procedimiento para programar en lenguaje natural, con más detalle que en la figura 4, usando de forma ejemplar un ejemplo sencillo adicional con respecto a la figura 6.
En una primera etapa S601, se proporciona una pluralidad de componentes de código de programa de cadena 210, 210', 210'' y se registra en el sistema 200, como se describe previamente, tal como los componentes de código de programa de cadena para proporcionar la hora actual o para mostrar una cadena en una pantalla.
En una segunda etapa S602, un usuario del sistema 200 introduce una cadena de programación en lenguaje natural en el sistema 200 a través del dispositivo de entrada 240.
Por ejemplo, la cadena de programación puede comenzar con «Qué hora...».
El dispositivo de control 260 reconoce la entrada y compara continuamente los fragmentos de la cadena de programación ya introducidos con las cadenas de definición de los componentes de código de programa de cadena 210, 210', 210'' presentes en el sistema. En el presente ejemplo, el dispositivo de control 260 reconocería que hay un componente de código de programa de cadena 210 con la cadena de definición «¿Qué hora es?», y le propondría al usuario el uso de este componente de código de programa de cadena. Por ejemplo, esta propuesta podría emitirse a través del editor 250. En el presente ejemplo, el usuario aplica esta propuesta.
Por tanto, el componente de código de programa de cadena con la cadena de definición «¿Qué hora es?» se selecciona como la cadena de programación «qué hora...» que comprende al menos una subcadena de la cadena de definición.
La cadena de programación se completa a continuación con «¿qué hora es?». La programación en lenguaje natural puede continuar, por ejemplo, si el usuario introduce «mostrar...».
El dispositivo de control 260 reconoce una nueva cadena de definición que coincide parcialmente con esta cadena de programación, a saber, «mostrar una cadena en la pantalla», y propone el uso del respectivo componente de código de programa de cadena. Si el usuario acepta como es el caso, el dispositivo de control 260 asume, como se describe previamente, la captura del parámetro «una cadena» y espera que el usuario inserte una cadena delimitada entre apóstrofos o una variable del tipo de datos «cadena».
El usuario inserta la «hora actual» (el valor de retorno del componente de código de cadena «¿Qué hora es?»). A continuación, la cadena de programación se completa con:
«¿Qué hora es? Mostrar la hora actual en la pantalla».
En este punto, hay dos aspectos ventajosos del procedimiento descrito. El componente de código de programa de cadena puede devolver resultados de valores (una indicación de tiempo que indica la hora actual). Dichos valores de retorno pueden ser almacenados por el sistema 200, por ejemplo, en una memoria 270. Preferentemente, dichos valores de retorno se anotan usando el lenguaje natural, en el presente caso, con la «hora actual». De esta forma, los posteriores componentes de código de programa de cadena pueden, no solo de forma general, sino también fácilmente, usar dichos valores de retorno usando el lenguaje natural, especificando el parámetro «una cadena» con la expresión del lenguaje natural «hora actual».
El ejemplo anterior también muestra que las etapas de introducción de la cadena de programación, así como la selección de un componente de código de programa de cadena, pueden alternarse varias veces. Además, se puede requerir una consulta y entrada de parámetros durante la entrada y/o después de introducir la cadena de programación.
En el caso de que el usuario señale que la entrada de la cadena de programación ha finalizado, en la etapa S604, se crea un programa asignado a la cadena de programación basado en el segmento de código de programa del componente de código de programa de cadena seleccionado.
Para este propósito, el generador de código 282 genera, por ejemplo, el siguiente código de programa para los dos componentes de código de programa de cadena:
#include „ WhatTime.h"
#include „PrintText.h"
WhatTime whatTime_1= newWhatTime ()
String result_1 = whatTime_1.excecuteCodesegment();
PrintText printText_1 = new PrintText()
printText_1.setOutput( result_1 );
printText_1.excecuteCodesegment();
La variable result_1 corresponde al valor de retorno «hora actual» del componente de código de programa de cadena «¿qué hora es?». El correspondiente compilador C++ 284 compila el código de programa anterior y lo coloca como archivo ejecutable en una memoria prevista (no mostrada) del sistema 200. Si se ejecuta el archivo ejecutable, la hora actual se visualiza en la pantalla.
Los cálculos aritméticos pueden indicarse usando una cadena de programación en lenguaje natural, por ejemplo, en la forma «Suma 20 a 5 y saca la raíz del resultado de la adición» o incluso, como es habitual en matemáticas, a través de una notación matemática. Por ejemplo, como sigue:
Resultado de la adición = 20 5
Resultado de la raíz = VResultado de la adición
Aparte de la representación gráfica de cualquier símbolo matemático, es posible usar los resultados obtenidos antes como variables en fórmulas para el cálculo adicional. Los resultados también se pueden usar como parámetros en el posterior componente de código de programa de cadena.
Debe entenderse que el lenguaje de programación en el que se crean los segmentos de código de programa de los componentes individuales de código de programa de cadena puede ser diferente al lenguaje de programación en el que el generador de código crea el código de programa para el programa programado usando el lenguaje natural como se describe anteriormente. Si ambos lenguajes de programación son diferentes, el generador de código añade mecanismos en el código de programa del lenguaje de programación de destino que permiten recuperar los segmentos de código de programa en el lenguaje de programación extranjero, por ejemplo, a través de un proxy. Como ya se ha mencionado, el sistema puede comprender generadores de código y compiladores para diferentes lenguajes de programación de destino (C++, C#, Java, etc.) y plataformas de ejecución (Windows, Linux, Android, etc.) que el usuario puede usar opcionalmente.
Más adelante se describen, a modo de ejemplo, aspectos adicionales del procedimiento descrito en el presente documento.
Las estructuras de control, los enunciados condicionales en particular, son componentes esenciales de los lenguajes de programación convencionales. Como se muestra a continuación a modo de ejemplo, dichas estructuras de control pueden estar provistas de funcionalidad completa usando el procedimiento de programación en lenguaje natural propuesto en el presente documento.
Los enunciados condicionales también se implementan como componentes de código de programa de cadena. Para este propósito, el proceso executeCodesegment(), por ejemplo, en el caso de un enunciado IF, puede indicarse con el indicador controlFlow = «IF». El generador de código 282 tiene instrucciones de insertar el proceso executeCodesegment() como condición de un enunciado IF:
if ( classX.executeCodesegment() ){
// hier wird durch Codegenerator der
// Source Code anderer Zeichenketten-Programmcode-Komponenten
// eingetragen.
}
Las condiciones genéricas de la forma «a < b» pueden implementarse fácilmente de modo que el componente de código de programa de cadena correspondiente tenga un proceso de recuperación de parámetros que esté configurado para consultar los operandos y el operador de dicha condición durante la programación en lenguaje natural. La cantidad y tipo de operandos y operadores puede variar y también ser consultados durante la programación. De esta forma, se puede formar cualquier enunciado condicional.
Los componentes de código de programa de cadena también permiten verificar condiciones que no siguen el esquema genérico, sino que son más parecidas al lenguaje natural, por ejemplo, una condición de la forma «si hay luz en el exterior, entonces...». Por ejemplo, esto puede realizarse usando un componente de código de programa de cadena como sigue:
public class MyFirstIF: SentenceComponent {
public:
String getSentence();
/* Markierung: controlFlow = "IF" */
boolean executeCodesegment();
}
public String MyFirstIF:: getSentence (){
return „Wenn es drauBenhell ist, dann ..."
}
public boolean MyFirstIF:: executeCodesegment(){
OutdoorBrightnessSensor sensor = new OutdoorBrightnessSensor(); boolean brightness = sensor.isBright();
if ( brightness == true ){
return true;
}
else {
return false;
}
}
La clase «OutdoorBrightnessSensor» se refiere a un sensor de intensidad de luz exterior. El procedimiento «isBrightO» mide el brillo y muestra como resultado «true» (verdadero) si el brillo no está por debajo de una intensidad especificada.
El generador de código crea el siguiente código de programa en C++
#include „MyFirstIF.h"
MyFirstIF myFirstIF _1 = newMyFirstIF ();
if (myFirstIF _1.executeCodesegment() ){
// hier wird durch Codegenerator der
// Source Code anderer Zeichenketten-Programmcode-Komponente
// eingetragen.
}
Si el proceso executeCodesegment() muestra como resultado un valor lógico booleano de «true», los enunciados se ejecutan dentro del bloque. Estos enunciados se originan de componentes de código de programa de cadena que se seleccionan debido a una cadena de programación insertada después del término «then» (entonces).
Según un aspecto adicional, un subconjunto de componentes de código de programa de cadena puede combinarse técnicamente en un módulo. Al registrar un módulo en el sistema, cualquier componente de código de programa de cadena en la tabla de metadatos que contiene este módulo, se combina en un grupo.
Cualquier componente de código de programa de cadena en un grupo conoce las interfaces de otros componentes de código de programa de cadena. Entre los componentes de código de programa de cadena de un grupo se pueden asumir relaciones implícitas. El componente de código de programa de cadena «Insertar un campo de entrada» está implícitamente relacionado con el componente de código de programa de cadena «Crear una aplicación»; en consecuencia, se asigna un campo de entrada creado de la aplicación creada, sin que se requiera determinar explícitamente un parámetro que se va a insertar. Además, debido a la agrupación, el dispositivo de control 260 puede asignar implícitamente un valor de retorno de un primer componente de código de programa de cadena a un posterior componente de código de programa de cadena en el mismo grupo.
Un aspecto adicional que también puede ser capturado usando la programación en lenguaje natural en la forma propuesta en el presente documento es el procesamiento paralelo de diferentes tareas.
En relación con el control de sistemas complejos, por ejemplo, el control de un robot humanoide, a menudo se requiere la ejecución de varias secuencias de programas al mismo tiempo. Existen varios procesos para el manejo general de una tarea. La paralelización de secuencias de programas puede realizarse fácilmente en los lenguajes de programación modernos. Por ejemplo, para programar un proceso en Java, la clase abstracta «Thread» (hilo) se proporciona con el único proceso run() para implementar un código de programa que se ejecute en paralelo.
Public MyThread_1 implements Thread{
public void run()
{
}
}
Para generar un proceso, hay que crear una nueva clase que implemente la clase abstracta Thread y su proceso run(). Posteriormente, hay que crear una instancia de la clase, y a continuación, hay que recuperar el proceso start() de la clase «Thread».
Por ejemplo, para un componente de código de programa de cadena con la cadena de definición «Bajar las
persianas», se genera el siguiente código de programa, con la condición de que su nombre de clase sea «JalousieDown»:
Public MyThread_1 implements Thread{
public void run()
{
JalousieDown jalousieDown_1 = new JalousieDown(); jalousieDown_1.executeCodesegment();
}
}
Mediante el siguiente componente de código de programa de cadena, indicado por las cadenas de definición, se puede realizar una sencilla tarea paralela.
Hacer lo siguiente en paralelo:
cambiar la intensidad de la iluminación de la habitación a noche de luna llena.
Bajar las persianas
Al introducir la cadena de definición «Hacer lo siguiente en paralelo», el generador de código Java crea un proceso para cada componente de código de programa de cadena y añade el respectivo componente de código de programa de cadena dentro del proceso run().
Public MyThread_1 implements Thread{
public void run()
{
LightDeamer lightDeamer_1 = new LightDeamer(); lightDeamer_1.setLight( "Vollmondnacht" ); 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();
Por tanto, los dos componentes de código de programa de cadena, es decir, las funcionalidades implementadas por los respectivos segmentos de código de programa, se ejecutan al mismo tiempo ejecutando el proceso start().
Como se menciona varias veces, usando el procedimiento descrito, también existe la posibilidad de crear nuevos componentes de código de programa de cadena a partir de componentes de código de programa de cadena existentes.
Para crear un nuevo componente de código de programa de cadena, se indican uno o varios componentes de código de programa de cadena fundamentales para una nueva cadena de definición Para el nuevo componente de código de programa de cadena, el generador de código 282 crea un proceso «getSentence» para devolver el resultado de la nueva cadena de definición y un proceso «executeCodesegmentQ» para implementar una funcionalidad que es una combinación de las funcionalidades que proporcionan los componentes individuales de código de programa de cadena usados para crear el nuevo componente de código de programa de cadena.
Según un ejemplo muy sencillo que es solo ejemplar, podría crearse un componente de código de programa de cadena para la nueva cadena de definición «mostrar la hora en la pantalla», basado en los dos componentes de código de programa de cadena «¿qué hora es?» y «mostrar una cadena en la pantalla» ya explicados.
Una cadena de programación respectiva puede ser, por ejemplo:
«Crear un nuevo componente de código de programa de cadena para la cadena de definición D y la cadena de programación P»,
donde D y P corresponden cada uno a parámetros del tipo de cadena.
La especificación D = «mostrar la hora en la pantalla», P = «¿qué hora es» mostrar una cadena en la pantalla», tendría el efecto deseado:
Se crea un nuevo componente de código de programa de cadena con la cadena de definición «mostrar la hora en la pantalla». El segmento de código de programa corresponde al código de programa creado por el generador de código si la cadena de programación «¿qué hora es? mostrar una cadena en la pantalla» se inserta en la programación en lenguaje natural como se describe previamente.
Claims (16)
1. Procedimiento para programar en lenguaje natural, que comprende las etapas de:
- proporcionar (S1) una pluralidad de componentes de código de programa de cadena de caracteres (10, 10', 10'') en un sistema (100), donde un componente de código de programa de cadena de caracteres (10) comprende respectivamente:
- una cadena de caracteres de definición (12) que comprende una expresión (13) en lenguaje natural, y - un segmento de código de programa (14) que se asigna inequívocamente a la cadena de caracteres de definición (12) y que implementa una funcionalidad asignada a la expresión (13) en lenguaje natural, - introducir (S602) una cadena de caracteres de programación en lenguaje natural;
- seleccionar (S603) al menos un componente de código de programa de cadena de caracteres (210) de la pluralidad de componentes de código de programa de cadena de caracteres si la cadena de caracteres de programación comprende al menos una subcadena de caracteres de la cadena de caracteres de definición del al menos un componente de código de programa de cadena de caracteres;
- crear (S604) un programa asignado a la cadena de caracteres de programación basado en el segmento de código de programa del al menos un componente de código de cadena de caracteres seleccionado.
2. Procedimiento según la reivindicación 1, donde se seleccionan varios componentes de código de programa de cadena de caracteres de la pluralidad de componentes de código de programa de cadena de caracteres si la cadena de caracteres de programación comprende al menos una subcadena de caracteres de la cadena de caracteres de definición de cada uno de los varios componentes de código de programa de cadena de caracteres seleccionados, y donde se crea un programa asignado a la cadena de caracteres de programación basado en los segmentos de código de programa de los varios componentes de código de programa de cadena de caracteres seleccionados.
3. Procedimiento según la reivindicación 1 o 2, donde al menos uno de los componentes de código de programa de cadena de caracteres de la pluralidad de componentes de código de cadena de caracteres comprende un procedimiento (16) para la entrada de parámetros que se solicita desde un dispositivo de control del sistema (100) cuando el componente de código de programa de cadena de caracteres es procesado por el sistema, como resultado de lo cual este componente de código de cadena de caracteres está configurado para admitir una entrada de parámetros por medio de la cual se puede especificar la funcionalidad proporcionada por el segmento de código de programa de este componente de código de cadena de caracteres, y donde preferentemente una funcionalidad proporcionada por el segmento de código de programa de al menos uno de los componentes de código de cadena de caracteres de la pluralidad de componentes de código de cadena de caracteres suministra, si esta funcionalidad es ejecutada por el sistema, un valor de retorno, donde este valor de retorno está preferentemente anotado en lenguaje natural, y donde al menos otro componente de código de programa de cadena de caracteres de la pluralidad de componentes de código de programa de cadena de caracteres accede al valor de retorno, si la funcionalidad proporcionada por el segmento de código de programa de este otro componente de código de cadena de caracteres es ejecutada por el sistema, en particular como un parámetro para especificar la funcionalidad proporcionada por el segmento de código de programa del otro componente de código de programa de cadena de caracteres, donde el acceso al valor de retorno se puede efectuar basándose en una anotación en lenguaje natural del valor de retorno.
4. Procedimiento según la reivindicación 3, donde el sistema (100) está configurado para ejecutar la funcionalidad implementada por el segmento de código de programa (14) al recibir una cadena de caracteres de entrada que comprende una similitud predefinida con la cadena de caracteres de definición (12) según una medida de similitud predefinida, donde el segmento de código de programa (14) implementa preferentemente una funcionalidad para controlar un dispositivo (30; 32; 34; 36) acoplado al sistema (100), o donde el segmento de código de programa (14) o el procedimiento para la entrada de parámetros implementa preferentemente un diálogo entre el componente de código de programa de cadena de caracteres (10) y un usuario (42).
5. Procedimiento según la reivindicación 4, donde, si el segmento de código de programa (14) o el procedimiento para la entrada de parámetros implementa un diálogo entre el componente de código de programa de cadena de caracteres (10) y un usuario (42), el diálogo de una entrada de parámetros sirve para especificar la funcionalidad implementada por el segmento de código de programa (14) o el diálogo admite una conversación entre el usuario (42) y el componente de código de programa de cadena de caracteres (10).
6. Procedimiento según una de las reivindicaciones 1 a 5, donde el segmento de código de programa (14) implementa una funcionalidad para transmitir una cadena de caracteres de entrada al sistema (100).
7. Procedimiento según una de las reivindicaciones 1 a 6, que comprende las etapas adicionales de: - recibir (S2) una cadena de caracteres de entrada por el sistema (100);
- comparar (S3) la cadena de caracteres de entrada con la cadena de caracteres de definición (12) según la medida de similitud predefinida por el sistema (100); y
- ejecutar (S4) la funcionalidad implementada por el segmento de código de programa (14) por el sistema (100) si la cadena de caracteres de entrada comprende la similitud predefinida con la cadena de caracteres de definición (12) según la medida de similitud predefinida.
8. Procedimiento según la reivindicación 7, que comprende las etapas adicionales de:
- almacenar una cadena de caracteres de entrada recibida;
- leer la cadena de caracteres de entrada almacenada para admitir la posterior ejecución de una funcionalidad implementada por un segmento de código de programa (14) de un componente de código de programa de cadena de caracteres (10; 10'), donde una cadena de caracteres de entrada recibida se almacena preferentemente dentro de un componente de código de programa de cadena de caracteres y es leída por el componente de código de programa de cadena de caracteres para admitir la posterior ejecución de la funcionalidad implementada por el segmento de código de programa (14) del componente de código de programa de cadena de caracteres (10; 10').
9. Procedimiento según una de las reivindicaciones 7 u 8, que comprende las etapas adicionales de: - almacenar una cadena de caracteres de entrada recibida;
- inferir una información de contexto a partir de la cadena de caracteres de entrada usando la funcionalidad implementada por el segmento de código de programa; y
- almacenar la información de contexto en el sistema.
10. Procedimiento según una de las reivindicaciones 1 a 9, donde se asigna un tipo de parámetro definible a un parámetro por medio del cual se puede especificar la funcionalidad proporcionada por el segmento de código de programa de un componente de código de programa de cadena de caracteres.
11. Procedimiento según una de las reivindicaciones 1 a 10, donde el segmento de código de programa de al menos uno de los componentes de código de programa de cadena de caracteres de la pluralidad de componentes de código de programa de cadena de caracteres implementa una estructura de control que controla una secuencia de programa, donde el segmento de código de programa puede implementar un enunciado condicional, y donde la condición que define el enunciado condicional se consulta usando la funcionalidad implementada por el segmento de código de programa del componente de código de programa de cadena de caracteres, o donde el segmento de código de programa implementa un enunciado condicional, y donde la condición que define el enunciado condicional está definida por al menos un operador y al menos un operando, y donde el al menos un operador y el al menos un operando se introducen preferentemente como un parámetro para especificar la funcionalidad proporcionada por el segmento de código de programa del componente de código de programa de cadena de caracteres cuando se programa en lenguaje natural.
12. Procedimiento según una de las reivindicaciones 1 a 11, que comprende una etapa de crear un nuevo componente de código de programa de cadena de caracteres basado en varios componentes de código de programa de cadena de caracteres de la pluralidad de componentes de código de programa de cadena de caracteres, donde
- se indica una nueva cadena de caracteres de definición para el componente de código de programa de cadena de caracteres que se va a crear de nuevo;
- los varios componentes de código de programa de cadena de caracteres se seleccionan introduciendo la cadena de caracteres de programación en lenguaje natural según la reivindicación 1; y
- donde un nuevo segmento de código de programa para el componente de código de programa de cadena de caracteres que se va a crear de nuevo se basa en un código de programa creado en la etapa de crear el programa asignado a la cadena de caracteres de programación.
13. Sistema (100), configurado para la programación en lenguaje natural, que comprende
- una pluralidad de componentes de código de programa de cadena de caracteres (10, 10', 10''), donde un componente de código de programa de cadena de caracteres (10) comprende, respectivamente:
- una cadena de caracteres de definición (12) que comprende una expresión (13) en lenguaje natural,
- un segmento de código de programa (14) que se asigna inequívocamente a la cadena de caracteres de definición (12) y que implementa una funcionalidad asignada a la expresión (13) en lenguaje natural,
- un dispositivo de entrada (240) para introducir una cadena de caracteres de programación en lenguaje natural, - un dispositivo de control (260) que está configurado para almacenar el componente de código de programa de cadena de caracteres y para procesar la cadena de caracteres de programación de entrada,
donde el dispositivo de control está configurado además para seleccionar al menos uno de los componentes de código de programa de cadena de caracteres (210) si la cadena de caracteres de programación de entrada comprende al menos una subcadena de caracteres de la cadena de caracteres de definición del componente de código de programa de cadena de caracteres; así como
- un generador de código (282) y un compilador (284) que están configurados para crear un programa asignado a la cadena de caracteres de programación basado en los segmentos de código de programa del al menos un componente de código de programa de cadena de caracteres seleccionado.
14. Sistema según la reivindicación 13, donde al menos uno de los componentes de código de programa de cadena de caracteres (10) de la pluralidad de componentes de código de programa de cadena de caracteres (10; 10', 10'') comprende un procedimiento (16) para la entrada de parámetros, donde el sistema está configurado para solicitar el procedimiento para la entrada de parámetros cuando un dispositivo de control del sistema (100) procesa el componente de código de programa de cadena de caracteres, como resultado de lo cual este componente de código de programa de cadena de caracteres está configurado para admitir una entrada de parámetros por medio de la cual se puede especificar la funcionalidad proporcionada por el segmento de código de programa de este componente de código de programa de cadena de caracteres, donde una funcionalidad proporcionada por el segmento de código de programa (14) de al menos uno de los componentes de código de programa de cadena de caracteres (10) de la pluralidad de componentes de código de programa de cadena de caracteres está configurada, si esta funcionalidad es ejecutada por el sistema (100; 200), para suministrar un valor de retorno, donde este valor de retorno está preferentemente anotado en lenguaje natural, y donde al menos otro componente de código de programa de cadena de caracteres de la pluralidad de componentes de código de programa de cadena de caracteres está configurado, si la funcionalidad proporcionada por el segmento de código de programa de este otro componente de código de programa de cadena de caracteres es ejecutada por el sistema, para acceder al valor de retorno, en particular como un parámetro para especificar la funcionalidad proporcionada por el segmento de código de programa de este otro componente de código de programa de cadena de caracteres, donde el acceso al valor de retorno puede efectuarse basándose en una anotación en lenguaje natural del valor de retorno.
15. Sistema (100) según la reivindicación 13 o 14, donde el sistema está configurado para ser controlado por lenguaje natural,
donde el sistema (100) está configurado además, al recibir una cadena de caracteres de entrada que comprende una similitud predefinida con la cadena de caracteres de definición (12) según una medida de similitud predefinida, para ejecutar la funcionalidad implementada por el segmento de código de programa (14), que comprende un dispositivo de control (20) configurado
- para recibir una cadena de caracteres de entrada que comprende una expresión en lenguaje natural,
- comparar la cadena de caracteres de entrada con la cadena de caracteres de definición (12) de un componente de código de programa de cadena de caracteres (10) según la medida de similitud predefinida, y
- ejecutar una funcionalidad implementada por el segmento de código de programa (14) si la cadena de caracteres de entrada comprende la similitud predefinida con la cadena de caracteres de definición (12) según la medida de similitud predefinida, donde el sistema comprende preferentemente un dispositivo de entrada (50, 52) configurado para recibir una entrada de usuario en lenguaje natural, para inferir de esta una cadena de caracteres de entrada que comprenda una expresión en lenguaje natural y reenviarla al dispositivo de control (20) o comprende un dispositivo de entrada (40) configurado para recibir una señal de activación, en particular una señal de entorno detectada usando un sensor del dispositivo de entrada (40) y, en respuesta a la señal de activación, inferir una cadena de caracteres de entrada en función de la señal de activación que comprende una expresión en lenguaje natural y reenviarla al dispositivo de control (20), donde el sistema comprende preferentemente un dispositivo de salida (50; 54) configurado para emitir una señal de salida para un usuario (42) en lenguaje natural con el fin de admitir un diálogo entre el usuario (42) y un componente de código de programa de cadena de caracteres (10), y donde el sistema comprende preferentemente un dispositivo (30; 32; 34; 36)
configurado para ser controlado por una funcionalidad que es implementada por un segmento de código de programa (14) de un componente de código de programa de cadena de caracteres (10).
16. Sistema (200) según una de las reivindicaciones 13 a 15, configurado para ejecutar un procedimiento según una de las reivindicaciones 1 a 12, donde el dispositivo de entrada (240) puede comprender un editor (250) configurado para editar la cadena de caracteres de programación, en particular en relación con una entrada o una selección de parámetros para especificar la funcionalidad proporcionada por el segmento de código de programa de un componente de código de programa de cadena de caracteres seleccionado.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102016107892 | 2016-04-28 | ||
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 (1)
Publication Number | Publication Date |
---|---|
ES2887998T3 true ES2887998T3 (es) | 2021-12-29 |
Family
ID=60081578
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES17720367T Active ES2887998T3 (es) | 2016-04-28 | 2017-04-06 | Sistema controlado por voz |
Country Status (11)
Country | Link |
---|---|
US (1) | US10915709B2 (es) |
EP (1) | EP3365891B1 (es) |
JP (1) | JP7023008B2 (es) |
KR (1) | KR102421274B1 (es) |
CN (1) | CN109155129B (es) |
AU (1) | AU2017258454B9 (es) |
CA (1) | CA3022884A1 (es) |
DE (1) | DE102016115243A1 (es) |
ES (1) | ES2887998T3 (es) |
RU (1) | RU2741622C2 (es) |
WO (1) | WO2017186469A1 (es) |
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 | ファナック株式会社 | 機械動作指令プログラム検索装置 |
Family Cites Families (48)
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 |
JP2002523828A (ja) * | 1998-08-24 | 2002-07-30 | ビーシーエル コンピューターズ, インコーポレイテッド | 適応型自然言語インターフェース |
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 |
EP1680780A1 (en) * | 2003-08-12 | 2006-07-19 | Philips Intellectual Property & Standards GmbH | Speech input interface for dialog systems |
KR100725719B1 (ko) * | 2005-02-04 | 2007-06-08 | 주식회사 유진로봇 | 음성과 태스크 오브젝트 기반의 대화시스템 |
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 |
JP5363589B2 (ja) * | 2008-12-19 | 2013-12-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | データ・メタモデルから音声ユーザ・インタフェース・コードを生成するための方法およびシステム |
FR2947923B1 (fr) * | 2009-07-10 | 2016-02-05 | Aldebaran Robotics | Systeme et procede pour generer des comportements contextuels d'un robot mobile |
CN102687529B (zh) * | 2009-11-30 | 2016-10-26 | 诺基亚技术有限公司 | 用于处理音频信号的方法和装置 |
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) |
WO2013104504A1 (en) * | 2012-01-12 | 2013-07-18 | 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 | Общество с ограниченной ответственностью "Спиктуит" | Способ коммуникации пользователя с информационной диалоговой системой |
KR20240132105A (ko) * | 2013-02-07 | 2024-09-02 | 애플 인크. | 디지털 어시스턴트를 위한 음성 트리거 |
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 | 梁涛 | 开关装置及其控制实现方法 |
CN107209780A (zh) * | 2015-01-16 | 2017-09-26 | 普华永道会计事务所 | 医疗数据交换系统和方法 |
WO2016161119A1 (en) * | 2015-04-01 | 2016-10-06 | Smartcare Consultants, Llc | System for determining behavioral patterns and deviations from determined behavioral patterns |
US10860549B2 (en) * | 2015-08-05 | 2020-12-08 | 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 |
US20190066000A1 (en) * | 2017-08-31 | 2019-02-28 | Selfie Stub LLC | Systems and methods for creating a personalized digital or physical item |
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 JP JP2019507996A patent/JP7023008B2/ja active Active
- 2017-04-06 WO PCT/EP2017/058239 patent/WO2017186469A1/de active Application Filing
- 2017-04-06 ES ES17720367T patent/ES2887998T3/es active Active
- 2017-04-06 KR KR1020187031220A patent/KR102421274B1/ko active IP Right Grant
- 2017-04-06 CA CA3022884A patent/CA3022884A1/en active Pending
- 2017-04-06 CN CN201780026572.9A patent/CN109155129B/zh active Active
- 2017-04-06 US US16/096,840 patent/US10915709B2/en active Active
- 2017-04-06 RU RU2018137557A patent/RU2741622C2/ru active
- 2017-04-06 AU AU2017258454A patent/AU2017258454B9/en active Active
- 2017-04-06 EP EP17720367.6A patent/EP3365891B1/de active Active
Also Published As
Publication number | Publication date |
---|---|
RU2018137557A3 (es) | 2020-05-28 |
CN109155129B (zh) | 2023-05-12 |
KR20190042490A (ko) | 2019-04-24 |
RU2018137557A (ru) | 2020-05-28 |
RU2741622C2 (ru) | 2021-01-29 |
AU2017258454A1 (en) | 2018-12-06 |
AU2017258454B9 (en) | 2022-06-16 |
AU2017258454B2 (en) | 2022-04-14 |
CN109155129A (zh) | 2019-01-04 |
KR102421274B1 (ko) | 2022-07-15 |
WO2017186469A1 (de) | 2017-11-02 |
CA3022884A1 (en) | 2017-11-02 |
EP3365891B1 (de) | 2021-06-09 |
DE102016115243A1 (de) | 2017-11-02 |
JP7023008B2 (ja) | 2022-02-21 |
EP3365891A1 (de) | 2018-08-29 |
US10915709B2 (en) | 2021-02-09 |
US20190121854A1 (en) | 2019-04-25 |
JP2019519870A (ja) | 2019-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2887998T3 (es) | Sistema controlado por voz | |
Artzi et al. | Weakly supervised learning of semantic parsers for mapping instructions to actions | |
CN105164641B (zh) | 扩展开发环境 | |
US9928040B2 (en) | Source code generation, completion, checking, correction | |
WO2016181368A1 (es) | Método implementado por computador que expone aplicaciones tipo software a partir de especificaciones de diseño | |
Díaz et al. | Harvesting models from web 2.0 databases | |
Alexandru et al. | Replicating parser behavior using neural machine translation | |
Fudaba et al. | Pseudogen: A tool to automatically generate pseudo-code from source code | |
Wei et al. | Automated model based assurance case management using constrained natural language | |
Haraldsson | Genetic improvement of software: from program landscapes to the automatic improvement of a live system | |
Paige et al. | Towards model transformation with TXL | |
CN107818501A (zh) | 精算方法和装置 | |
Jain et al. | Compiler Basic Design And Construction | |
Gradl et al. | Data integration for the arts and humanities: a language theoretical concept | |
Pop et al. | An extensible environment for expert system development | |
Sato et al. | PRISM User’s Manual | |
Sottet et al. | JSMF: a flexible JavaScript modelling framework | |
Matsson | Implementing perceptual semantics in type theory with records (TTR) | |
Nita et al. | Practical Concurrent Haskell: With Big Data Applications | |
KR101833539B1 (ko) | IoT 기기의 통합 지원을 위한 가상 디바이스 시스템 | |
Ranjan et al. | Relational algebra interpreter in context of query languages | |
Pigula et al. | Unified compile-time and runtime java annotation processing | |
Hariyanto et al. | The Development of Android-based Control System for Reinforcing the Electronic Control Subject | |
Zhao | The algorithm analyses and design about the subjective test online basing on the DOM tree | |
Balkovski et al. | Designing cyber-physical systems from natural language descriptions |