• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie wiem co się dzieje z pewnym fragmentem kodu. nie potrafię go naprawić ktoś wie coś? język python

Object Storage Arubacloud
0 głosów
179 wizyt
pytanie zadane 29 maja 2022 w Python przez Maestro_prosiak Początkujący (310 p.)

kod błędu

2022-05-29 19:38:48.023937: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
GO! Bot is running
hej
1/1 [==============================] - 0s 128ms/step
Traceback (most recent call last):
  File "C:\Users\antek\PycharmProjects\pythonProject2f\chatbot.py", line 57, in <module>
    res = get_response(ints, intents)
  File "C:\Users\antek\PycharmProjects\pythonProject2f\chatbot.py", line 50, in get_response
    return result
UnboundLocalError: local variable 'result' referenced before assignment

Process finished with exit code 1
 

UnboundLocalError: local variable 'result' referenced before assignment

kod:

import random
import json
import pickle
import numpy as np
import tensorflow
import nltk
from nltk.stem import WordNetLemmatizer

from tensorflow.keras.models import load_model

lemmatizer = WordNetLemmatizer()
intents = json.loads(open('intents.json').read())
words = pickle.load(open('words.pkl', 'rb'))
classes = pickle.load(open('classes.pkl', 'rb'))
model = load_model('chatbot_model.model')

def clean_up_sentence(sentence):
    sentence_words = nltk.word_tokenize(sentence)
    sentence_words = [lemmatizer.lemmatize(word) for word in sentence_words]
    return  sentence_words

def bag_of_words(sentence):
    sentence_words = clean_up_sentence(sentence)
    bag = [0] * len(words)
    for w in sentence_words:
        for i, word in enumerate(words):
            if word == w:
                bag[i] = 1
        return  np.array(bag)

def predict_class(sentence):
    bow = bag_of_words(sentence)
    res = model.predict(np.array([bow]))[0]
    ERROR_THRESHOLD = 0.25
    results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD]

    results.sort(key=lambda x : x[1], reverse=True)
    return_list = []
    for r in results:
        return_list.append({'intent': classes[r[0]], 'propability': str(r[1])})
    return return_list

def get_response(intents_list, intents_json):
    tag = intents_list[0]['intent']
    list_of_intents = intents_json['intents']
    for i in list_of_intents:
        if i['tag'] == tag:
            result = random.choice(i['responses'])
            break
    return result

print("GO! Bot is running")

while True:
    message = input("")
    ints = predict_class(message)
    res = get_response(ints, intents)
    print(res)

 

1 odpowiedź

+2 głosów
odpowiedź 30 maja 2022 przez VBService Ekspert (253,340 p.)
wybrane 30 maja 2022 przez Maestro_prosiak
 
Najlepsza

Wygląda na to, że w funkcji get_response w pętli

for i in list_of_intents:

nie zachodzi warunek

if i['tag'] == tag:

przez co nie zostaje zwrócona wartość z

result = random.choice(i['responses'])

czyli pętla dochodzi do końca, zostaje wywołane polecenie

return result

co powoduje użycie zmiennej result bez wcześniejszej jej inicjacji, więc np. dodaj przed pętlą inicjację zmiennej result jako None

def get_response(intents_list, intents_json):
    tag = intents_list[0]['intent']
    list_of_intents = intents_json['intents']

    result = None
    for i in list_of_intents:
        if i['tag'] == tag:
            result = random.choice(i['responses'])
            break

    if result is None:
        return "No data"
    else:
        return result

 

1
komentarz 30 maja 2022 przez Maestro_prosiak Początkujący (310 p.)

dzięki błąd nowicjusza.smiley

 

Podobne pytania

0 głosów
1 odpowiedź 114 wizyt
0 głosów
1 odpowiedź 228 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...