我正在用Python构建一个会话机器人。虽然我想从头开始生成尽可能多的文本,但我仍然需要一种方法来编目和存储一堆对话框片段字符串。理想情况下,我想在字符串中包含某种层次结构/分类。 例如:
问候:
"Oh, nice to meet you {0}"
"My name is Bob, how about you?"
调情:
"Stop it"
"I'm blushing"
"How flattering"
等...
虽然我可以将它们存储在数据库中,但是人们可以轻松地手动编辑不同的格式会很不错。 CSV? JSON?这样的事情有先例吗?
答案 0 :(得分:8)
这取决于你想如何使用它。如果字符串仅供Python使用,则应考虑将它们存储在自己的.py
文件中。是的,一个模块,但它也是一个简单的文本文件,可以由Python解释:)
许多项目使用.py
文件作为配置文件(Django)并且导入其内容非常简单,因为您只需执行import answer_strings
并且您已经在变量或类中获取它们。
您可以这样做:
#bot answers module
greetings = ["hello {0}", "what's up {0}"]
farewells = ["see you soon {0}", "nos vemos {0}"]
...
可以随机返回等效答案等。
另一方面,如果这些也是由Javascript,Java,node.js或者除了Python以外的任何技术读取的话,那么应该使用更通用的格式,JSON,XML,YAML,你可以命名它。 / p>
我认为这在文本文件(项目的资源)中比在数据库中更好,因为这样(如你所提到的)可以更加自定义。我还建议使用包含语义的格式。 CSV文件是IMHO 非常冷,只是一堆数据转储到文件中。使用XML,JSON等,您可以按照“问候”,“告别”等类别对数据进行分组。
不要忘记,因为您有多个选项,所以以模块化方式构建代码并解耦是非常好的。因此,如果您做出决定并且将来需要改变,那么它将尽可能无缝地完成。
希望这有帮助!
答案 1 :(得分:1)
这取决于您希望用字符串存储多少信息。
我认为对于一个简单的情况,当“数据库”只是字符串列表时,你可以使用纯文本,每行一个字符串。优点可能是这样的纯文本文件很容易使用GNU coreutils(如grep,sed ...)到GUI编辑器的大量工具进行搜索/编辑/操作。
使用预定义的文件命名和目录层次结构也可以轻松扩展。例如,像
这样的结构data/
data/en_GB/greetings
data/en_GB/farewells
data/en_US/greetings
data/en_US/farewells
data/de_DE/greetings
data/de_DE/farewells
可以让您按语言选择数据,甚至在某些系统上只部署相关语言。
如果只有你的问题是换行符,你仍然可以使用某种垂直分隔符(例如~~~~
)来逃避上述加号。
但是,如果您计划稍微复杂的结构和/或您希望它们发生变化,那么完整的序列化/标记语言可能会很有意义。我最喜欢的一个是YAML,它丰富,成熟,主要语言库不存在语言,人类容易理解和编辑(看看他们的网站:它在YAML!)。
# you can have comments for editors in YAML
# informal greetings are allowed
greetings:
- "hello {0}"
- "what's up {0}"
# bye, etc.
farewells:
- "see you soon {0}"
- "nos vemos {0}"
# please be polite here
flirtation:
- "Stop it"
- "I'm blushing"
- "How flattering"