You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

nltk.chat.util聊天机器人如何替换无匹配时返回的None值

问题原因

你原代码没生效的核心原因是chat.converse()本身就是内置无限循环的交互方法,调用后会一直卡在这行执行自带的交互逻辑,你后面写的while循环永远不会被执行。

解决方法

有两种常用实现方案:

方案1:添加兜底匹配规则(最简单)

nltk的Chat类会按从上到下的顺序匹配规则,你只需要在现有规则列表的最后添加一个匹配所有输入的兜底规则,所有没命中前面规则的输入都会走这个规则,直接返回你自定义的内容,不会再输出None。
修改后的完整代码:

from nltk.chat.util import Chat, reflections

ciftler = [
    ['(Benim adım|adım|ben)(.*)', ["Merhaba %1, nasılsın?"]],
    ['(.*)(Benim adım|adım|ben)', ["Merhaba %1, nasılsın?"]],
    ['(adın ne|adın|isim|ismin ne|ismin var mı|ismin varmı|sana ne diyorlar|sana nasıl seslenelim|bir adın varmı|bir adın var mı)',['onur']],
    ['(merhaba|selam|selamünaleyküm|hey|naber|bro|hi|whatsup)',['merhaba nasılsın,','selam nasılsın ', 'merhaba nasıl gidiyor']],
    ['(iyidir|sağol|sağolasın|eyvallah|iyi iyi|iyi|eh işte|ii|sen)',['süper']],
    ['(iyi değilim|kötü|sik gibi|keyfim yok|hiç iyi sayılmaz|kötüyüm|bilmem|boşver)',['ne oldu ki']],
    ['(Yaşın kaç?|yaş|yaş?|yaşın|Yaşın?|kaç yaşındasın)',['yeni doğdum sayılır']],
    ['(memleket|nerelisin|hangi şehir|hangi ülke|nerdesin|şu an nerdesin|neredesin|şu an neredesin|memleketin)',['şişli, istanbul']],
    ['(.*) gittim',['%1! ok']],
    # 新增兜底规则,必须放在所有规则的最后
    ['(.*)', ['Anlamadım, lütfen tekrar anlatır mısın?']]
]
yansimalar={
    'merhaba': 'merhaba, nasılsın',
    'gittim':'gittin',
    'Selamünaleyküm':'Aleykümselam',
    '12':'21'
}

chat = Chat(ciftler, yansimalar)

def deneme():
    chat.converse()

deneme()

方案2:自定义交互逻辑,不用自带的converse方法

如果你不想加兜底规则,也可以自己实现交互流程,手动判断返回结果是否为None,自行替换成自定义内容,这种方案灵活度更高,还可以加额外的交互逻辑:

from nltk.chat.util import Chat, reflections

ciftler = [
    ['(Benim adım|adım|ben)(.*)', ["Merhaba %1, nasılsın?"]],
    ['(.*)(Benim adım|adım|ben)', ["Merhaba %1, nasılsın?"]],
    ['(adın ne|adın|isim|ismin ne|ismin var mı|ismin varmı|sana ne diyorlar|sana nasıl seslenelim|bir adın varmı|bir adın var mı)',['onur']],
    ['(merhaba|selam|selamünaleyküm|hey|naber|bro|hi|whatsup)',['merhaba nasılsın,','selam nasılsın ', 'merhaba nasıl gidiyor']],
    ['(iyidir|sağol|sağolasın|eyvallah|iyi iyi|iyi|eh işte|ii|sen)',['süper']],
    ['(iyi değilim|kötü|sik gibi|keyfim yok|hiç iyi sayılmaz|kötüyüm|bilmem|boşver)',['ne oldu ki']],
    ['(Yaşın kaç?|yaş|yaş?|yaşın|Yaşın?|kaç yaşındasın)',['yeni doğdum sayılır']],
    ['(memleket|nerelisin|hangi şehir|hangi ülke|nerdesin|şu an nerdesin|neredesin|şu an neredesin|memleketin)',['şişli, istanbul']],
    ['(.*) gittim',['%1! ok']]
]
yansimalar={
    'merhaba': 'merhaba, nasılsın',
    'gittim':'gittin',
    'Selamünaleyküm':'Aleykümselam',
    '12':'21'
}

chat = Chat(ciftler, yansimalar)

def deneme():
    print("Merhaba, benimle sohbet edebilirsin! Çıkmak için 'quit' yazabilirsin.")
    while True:
        user_input = input("> ")
        if user_input.lower() == 'quit':
            break
        resp = chat.respond(user_input)
        # 无匹配时resp为None,替换为自定义内容
        if not resp:
            resp = "Anlamadım, lütfen tekrar söyler misin?"
        print(resp)

deneme()

内容的提问来源于stack exchange,提问作者onur yılmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:06:05