Ошибка Clips empty в ClipSpy при использовании make_instance

#python #clips #clipspy

#python #клипы #clipspy

Вопрос:

Я новичок в CLIPS и ClipSpy. Я пытаюсь создать экземпляр класса CLIPS

Это класс, который я определил и правильно построил в своей среде python (ClipSpy)

 ENTITIES_CLASS = """
(defclass ENTITY-CLASS (is-a INITIAL-OBJECT)
    (slot text (type STRING))
    (slot confidence (type FLOAT))
    (slot type (type SYMBOL))
)
"""
env.build(ENTITIES_CLASS)
  

Это работает, как и ожидалось, но когда я пытаюсь создать экземпляр этого класса:

 new_instance = "(ent0-0 of ENTITY-CLASS (text 'Bruce Springsteen')(confidence 1.0)(type PER))"
env.make_instance( new_instance )
  

Я получаю эту пустую ошибку:

введите описание изображения здесь

Я пробовал несколько форм построения строки new_instance, но ни одна из них не работает :

 new_instance = '(ent0-0 of ENTITY-CLASS (text "Bruce Springsteen")(confidence 1.0)(type PER))'
new_instance = "(ent0-0 of ENTITY-CLASS (text 'Bruce Springsteen') (confidence 1.0) (type PER) )"
  

Где моя синтаксическая ошибка?
Я ценю любую помощь

Ответ №1:

Проблема с пустой ошибкой может быть связана с тем, как Jupyter перенаправляет ввод-вывод.

На IPython я получаю:

 In [1]: import clips                                                                                                                                                                                               

In [2]: env = clips.Environment()                                                                                                                                                                                  

In [3]: ENTITIES_CLASS = """ 
   ...: (defclass ENTITY-CLASS (is-a INITIAL-OBJECT) 
   ...:     (slot text (type STRING)) 
   ...:     (slot confidence (type FLOAT)) 
   ...:     (slot type (type SYMBOL)) 
   ...: ) 
   ...: """ 
   ...: env.build(ENTITIES_CLASS)                                                                                                                                                                                  

In [4]: env.make_instance("(ent0-0 of ENTITY-CLASS (text 'Bruce Springsteen')(confidence 1.0)(type PER))")                                                                                                         

---------------------------------------------------------------------------
CLIPSError                                Traceback (most recent call last)
<ipython-input-4-92b62ecc6bed> in <module>
----> 1 env.make_instance("(ent0-0 of ENTITY-CLASS (text 'Bruce Springsteen')(confidence 1.0)(type PER))")

/usr/local/lib/python3.6/dist-packages/clips/classes.py in make_instance(self, command)
    215         ist = lib.EnvMakeInstance(self._env, command.encode())
    216         if ist == ffi.NULL:
--> 217             raise CLIPSError(self._env)
    218 
    219         return Instance(self._env, ist)

CLIPSError: [INSFUN7] ('Bruce Springsteen') illegal for single-field slot text of instance [ent0-0] found in put-text primary in class ENTITY-CLASS. [PRCCODE4] Execution halted during the actions of message-handler put-text primary in class ENTITY-CLASS
  

Проблема заключается в том, как вы представляете строку 'Bruce Springstreen' . В CLIPS СТРОКОВЫЕ типы находятся в двойных кавычках " .

 In [4]: env.make_instance('(ent0-0 of ENTITY-CLASS (text "Bruce Springsteen")(confidence 1.0)(type PER))')                                                                                                         
Out[4]: Instance: [ent0-0] of ENTITY-CLASS (text "Bruce Springsteen") (confidence 1.0) (type PER)
  

Комментарии:

1. Я выполняю < env.make_instance(‘(ent0-0 КЛАССА СУЩНОСТИ (текст «Брюс Спрингстин») (уверенность 1.0)(тип PER))’)> с clips 0.3.3 и python 3.8.6, но я все равно получаю ту же пустую ошибку. Вы знаете, почему?

2. В старой версии CLIPS есть ошибка, из-за которой, если ошибка возникает на уровне API, статус ошибки не устанавливается повторно, и любое другое взаимодействие с CLIPS все равно вернет ошибку. Это было исправлено в более поздней версии CLIPS. Я посмотрю, смогу ли я перенести это исправление в двоичный файл ClipSpy.

3. Спасибо за ваш комментарий, мы используем ваш пакет в одном из предметов университета по специальности data science, гордитесь!