比较多个字符串

1 投票
2 回答
751 浏览
提问于 2025-04-17 00:53

嘿,我是新手,需要一些关于比较字符串的帮助。我的作业是制作一个聊天机器人,这个机器人需要从一个文本文件中读取可能的输入内容,以及对应的输出结果。

我的问题是,它要求从文本文件中选择最合适的内容,这听起来简单,对吧?但同时你还得保存一些变量。

举个例子,规则中的一行是:

you <w1> <w2> <w3> <w4> me | What makes you think I <w1> <w2> <w3> <w4> you?

你必须把 <w1> 之类的内容保存到一个变量中。而且输入可能是像“你知道你对我真的很好”这样的句子,所以你也得调整代码来处理这种情况。

而且我们不能只为这个文本文件写代码,代码应该能够适应文本文件中放入的任何内容。

有人能帮我吗?

这是我现在的进展:

import string
import sys
import difflib


#File path:
rules = open("rules.txt", "rU")

#Set some var's:
currentField = 0
fieldEnd = 0
questions = []
responses = []
Input = ""
run = True

#Check if we are not at the end of the file:
for line in rules:
    linem = line.split(" | ")
    question = linem[0]
    response = linem[1]

    questions.append(question.replace("\n", ""))
    responses.append(response.replace("\n", ""))

print questions
print responses

for q in questions:
    qwords.appendq.split()

while run = True:
    Input = raw_input('> ').capitalize()

    for char in Input:
        for quest in questions:
            if char in quest:
                n += 1
            else:
                if "<" in i:
                    n += 1
            closestQuestion = questions.index(q)


    print response

2 个回答

0

作为一个简单粗暴的解决方案,可以先解析输入文件,把每一条记录存到一个列表里。每条记录应该包含一个动态生成的“匹配正则表达式”(比如 r'you (\w+) (\w+) (\w+) (\w+) me(?i)'),还有一个“替换字符串”(比如 r'What makes you think I \1 \2 \3 \4 you?')。对于每一个进来的请求,聊天机器人需要用文本去匹配这个正则表达式列表,找到合适的记录,然后调用 regex.sub() 来进行“替换字符串”的替换。

不过首先,建议你先看看一些关于Python的初学者教程。你的代码在很多方面都不符合Python的风格,而且也有很多错误。

2

我更喜欢用 pyparsing 来处理这个任务,而不是用正则表达式。因为即使是比较复杂的语法,用它来写解析器也更简单、更容易理解。

撰写回答