在Python中标识aiml模式中的点

在Python中标识aiml模式中的点,python,aiml,Python,Aiml,在我的一个项目中,我试图在给定的句子中识别文件名。例如,“能否请您打开abc.txt”,因此我需要获取关键字“open”,以便了解预期的操作类型,并且出于明显的原因,我还需要识别文件名。一个简单的AIML标记是: <aiml> <category> <pattern>* OPEN *</pattern> <template>open <star index="2"/></template> <

在我的一个项目中,我试图在给定的句子中识别文件名。例如,“能否请您打开abc.txt”,因此我需要获取关键字“open”,以便了解预期的操作类型,并且出于明显的原因,我还需要识别文件名。一个简单的AIML标记是:

<aiml>
<category>
    <pattern>* OPEN *</pattern>
    <template>open <star index="2"/></template>
<category>
</aiml>

*打开*
打开
在这里,在模板标签中,我只是给出了一个关于要执行的操作和文件名的信息。另一方面,我的python代码负责执行所需的操作。 现在的问题是“.”字符。使用该字符将句子分为两个部分(在我上面提到的示例中,这两个句子将是“可否请打开abc”和“txt”),分别映射到定义的任何aiml标记。但是,在我的例子中,我不希望“.”字符充当分隔符。基本上,我想识别可能包含或不包含扩展名的文件名。谁能帮我解决这个问题


提前谢谢

默认情况下,AIML允许多句输入。这意味着句号、感叹号和问号被视为句子之间的分隔符。例如,如果你问:

早上好。我叫乔治。你今天好吗?

这被解释为3个独立的输入。通常这是一件好事,因为这意味着AIML解释器可以重复使用现有的模式,祝大家早上好,我的名字是*,您好*

但在您的情况下,这并没有帮助,因为扩展之前的句号会导致不必要的拆分。根据您的AIML解释器的不同,在将输入发送到解释器之前,将在预处理阶段完成句子拆分。一些AIML解释器有一个配置文件,允许您定义分句字符,因此您可以简单地从分隔符列表中删除句号

更好的方法可能是预处理文件名并用单词DOT替换句号,然后您可以在模式*OPEN中检测到这一点*


作为最后一点评论,*OPEN*是一种非常广泛的模式,如果有人说商店今天几点开门,或者任何其他输入中有OPEN一词并用文本包围,它也会被调用。

默认情况下,AIML允许多句输入。这意味着句号、感叹号和问号被视为句子之间的分隔符。例如,如果你问:

早上好。我叫乔治。你今天好吗?

这被解释为3个独立的输入。通常这是一件好事,因为这意味着AIML解释器可以重复使用现有的模式,祝大家早上好,我的名字是*,您好*

但在您的情况下,这并没有帮助,因为扩展之前的句号会导致不必要的拆分。根据您的AIML解释器的不同,在将输入发送到解释器之前,将在预处理阶段完成句子拆分。一些AIML解释器有一个配置文件,允许您定义分句字符,因此您可以简单地从分隔符列表中删除句号

更好的方法可能是预处理文件名并用单词DOT替换句号,然后您可以在模式*OPEN中检测到这一点*

作为最后的评论,*OPEN*是一个非常广泛的模式,如果有人说商店今天几点开门,或者任何其他输入中有OPEN一词并用文本包围,也会调用它