2017-10-21 78 views
1

Dans un de mes projets, j'essaie d'identifier les noms de fichiers dans une phrase donnée. Par exemple, "Pourriez-vous s'il vous plaît ouvrir abc.txt", donc j'ai besoin d'aller chercher les mots-clés "open" afin de connaître le type d'action attendu et j'ai aussi besoin d'identifier le nom du fichier, pour des raisons évidentes. Une étiquette AIML en est simple:Identifier un point dans un motif aiml en Python

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

Ici, dans la balise de modèle, je donne simplement une information sur l'opération à effectuer et le nom du fichier. Mon code python, d'autre part, prend soin d'effectuer l'action requise. Maintenant, le problème est le '.' personnage. Utiliser ce caractère divise la phrase en deux parties (dans le cas de l'exemple que j'ai mentionné ci-dessus, les deux phrases seraient "Pourriez-vous s'il vous plaît ouvrir abc" et "txt") qui sont mappées individuellement à l'une des balises aiml définies. Mais, dans mon cas, je ne veux pas le '.' caractère pour agir en tant que délimiteur. Fondamentalement, je veux identifier les noms de fichiers qui peuvent ou non inclure une extension. Quelqu'un pourrait-il m'aider s'il vous plaît avec ceci?

Merci d'avance!

Répondre

0

Par défaut, AIML permet l'entrée de plusieurs phrases. Cela signifie que les points d'arrêt, les points d'exclamation et les points d'interrogation sont traités comme des séparateurs entre les phrases. Par exemple si vous avez demandé:

Bonjour. Je m'apelle George. Comment vas-tu aujourd'hui?

Ceci est interprété comme 3 entrées distinctes. Normalement, c'est une bonne chose car cela signifie que l'interprète AIML peut réutiliser les patterns existants pour BONJOUR, MON NOM EST *, COMMENT ÊTES-VOUS *.

Mais dans votre cas, cela ne sert pas à l'arrêt complet avant que l'extension provoque une division non désirée. En fonction de votre interpréteur AIML, la division des phrases est effectuée dans une étape de pré-traitement avant d'envoyer l'entrée à l'interpréteur. Certains interprètes AIML disposent d'un fichier de configuration qui vous permet de définir les caractères de séparation de phrases. Vous pouvez donc simplement supprimer l'arrêt complet de la liste des séparateurs.

Une meilleure approche peut être pré-traiter les noms de fichiers et de remplacer l'arrêt complet avec le mot DOT, vous pouvez détecter dans votre modèle * OUVERT *

Comme un dernier commentaire, * OUVERT * est motif très large, il sera également invoqué si quelqu'un dit QUELLE HEURE EST LE MAGASIN OUVERT AUJOURD'HUI, ou toute autre entrée avec le mot OUVERT entouré de texte.