• 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

VPS Starter Arubacloud
0 głosów
201 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 (255,800 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ź 129 wizyt
0 głosów
1 odpowiedź 260 wizyt

92,977 zapytań

141,940 odpowiedzi

321,182 komentarzy

62,303 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...