AIML 解析器 PHP

AIML Parser PHP

我正在尝试开发 Artificial Bot 我发现 AIML 可以用来实现这样的目标我发现这些关于 AIML 解析的要点是由 Program-O 完成的

1.) 输入中的所有字母都转换为大写 2.) 删除所有标点符号并替换为空格 3.) 删除了额外的空白字符,包括制表符

从那里,程序 O 在数据库中执行搜索,查找与输入的所有潜在匹配项,包括通配符。然后对返回的结果进行相关性“评分”,并选择“最佳匹配”。然后程序O根据选择的结果处理AIML,returns成品给用户

我只是想知道如何定义分数并找到最接近用户输入的相关答案

任何帮助或想法将不胜感激

@user3589042(相当麻烦的名字,你不觉得吗?)

我是 Dave Morton,Program O 的首席开发人员。很抱歉在您提问时我错过了这个。今天才引起我的注意。

程序 O 对从数据库中提取的潜在匹配进行评分的方式是这样的:

  1. 是来自aiml_userdefined的回复table?是=300/否=0
  2. 是这个机器人的类别,还是 parent(如果有的话)?这=250/parent=0
  3. 模式是否有一个或多个下划线 (_) 通配符?是=100/否=0
  4. 当前类别是否有 <topic> 标签?是(见下文)/否=0

    一个。 <topic> 是否包含一个或多个下划线 (_) 通配符?是=80/否=0

    b。 <topic> 是否直接匹配当前主题?是=50/否=0

    c。 <topic> 是否包含星号 (*) 通配符?是=10/否=0

  5. 当前类别是否包含 <that> 标签?是(见下文)/否=0

    一个。 <that> 是否包含一个或多个下划线 (_) 通配符?是=45/否=0

    b。 <that> 是否直接匹配当前主题?是=15/否=0

    c。 <that> 是否包含星号 (*) 通配符?是=2/否=0

  6. <pattern> 是否与用户输入直接匹配?是=10/否=0

  7. <pattern> 是否包含一个或多个星号 (*) 通配符?是=1/否=0

  8. <pattern> 是否匹配配置中的默认 AIML 模式?是=5/否=0

脚本然后将上面列出的所有通过的测试相加,并为类别 <pattern> 中的每个单词添加一个点,该单词也与用户输入中的单词相匹配。得分最高的 AIML 类别被认为是 "best match"。如果出现平局,脚本将 select "first" 最高得分类别、"last" 类别或随机类别,具体取决于配置设置。然后将此 selected 类别返回给其他函数以解析 XML.

我希望这能回答你的问题。