比较多个字符串
嘿,我是新手,需要一些关于比较字符串的帮助。我的作业是制作一个聊天机器人,这个机器人需要从一个文本文件中读取可能的输入内容,以及对应的输出结果。
我的问题是,它要求从文本文件中选择最合适的内容,这听起来简单,对吧?但同时你还得保存一些变量。
举个例子,规则中的一行是:
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 来处理这个任务,而不是用正则表达式。因为即使是比较复杂的语法,用它来写解析器也更简单、更容易理解。