前提・実現したいこと
Telegramにお喋りボットをPythonを使って実装したいです。
xmlのaimlを使って簡単なお喋りができるファイルをPythonで作り、これをTelegramに実装しようとしているのですが、inputがうまくできていないのか、応答が正常に行われません。市販の本のチュートリアルが日本語用に書かれていたのを独力で英語版にしようとして、MeCab等の解析手順を勝手に省いたのですが、その辺りに問題があるのかと…
発生している問題・エラーメッセージ
Telegram上のボットが初期メッセージを発するところまでは順調です。そののちHelloとメッセージをこちら側が打ち込むと以下のエラーが出力されます。(名前の部分はで伏してあります。):
(以下エラー)
FATAL PARSE ERROR in file osyaberi.xml:
osyaberi.xml:1:0: unclosed token
WARNING: No match found for input: Hello
No error handlers are registered, logging exception.
Traceback (most recent call last):
File "/Users//opt/anaconda3/lib/python3.7/site-packages/telegram/ext/dispatcher.py", line 340, in process_update
handler.handle_update(update, self, check, context)
File "/Users//opt/anaconda3/lib/python3.7/site-packages/telegram/ext/handler.py", line 122, in handle_update
return self.callback(dispatcher.bot, update, optional_args)
File "/Users//Desktop/Weather/telegram_bot.py", line 14, in message
update.message.reply_text(system_output["utt"])
File "/Users//opt/anaconda3/lib/python3.7/site-packages/telegram/message.py", line 515, in reply_text
return self.bot.send_message(self.chat_id, args, kwargs)
File "</Users//opt/anaconda3/lib/python3.7/site-packages/decorator.py:decorator-gen-2>", line 2, in send_message
File "/Users//opt/anaconda3/lib/python3.7/site-packages/telegram/bot.py", line 67, in decorator
result = func(args, kwargs)
File "/Users//opt/anaconda3/lib/python3.7/site-packages/telegram/bot.py", line 348, in send_message
timeout=timeout, kwargs)
File "/Users//opt/anaconda3/lib/python3.7/site-packages/telegram/bot.py", line 175, in _message
result = self._request.post(url, data, timeout=timeout)
File "/Users//opt/anaconda3/lib/python3.7/site-packages/telegram/utils/request.py", line 333, in post
urlopen_kwargs)
File "/Users/*/opt/anaconda3/lib/python3.7/site-packages/telegram/utils/request.py", line 244, in _request_wrapper
raise BadRequest(message)
telegram.error.BadRequest: Message text is empty
(以上エラー)
該当のソースコード
xml
1<?xml version="1.0" encoding="UTF-8"> 2<aiml version="1.0.1" encoding="UTF-8"> 3 4 <category> 5 <pattern>Hello _</pattern> 6 <template>Hello, Kay.</template> 7 </category> 8 <category> 9 <pattern>Good morning _</pattern> 10 <template>Good morning, Kay.</template> 11 </category> 12 <category> 13 <pattern>Good evening _</pattern> 14 <template>Good evening, Kay.</template> 15 </category> 16 17 18 <category> 19 <pattern>_ Japan _</pattern> 20 <template>Ah Japan is really a divine country, isnt it.</template> 21 </category> 22 <category> 23 <pattern> _ UK _</pattern> 24 <template>Diving into Thames is quite fun.</template> 25 </category> 26 <category> 27 <pattern>_ France _</pattern> 28 <template>Ah Ive been to France to visit the friend in Toulouse. That was definitely superb.</template> 29 </category> 30 <category> 31 <pattern>_ I went to * _</pattern> 32 <template>Oh you visited <star/>? Thats absolutely a good place.</template> 33 </category> 34 35 36 <category> 37 <pattern>My name is * _</pattern> 38 <think><set name="username"><star/></set></think> 39 <template>Thank you. Your name has been registered.</template> 40 </category> 41 <category> 42 <pattern>_ bye</pattern> 43 <template>Good bye, <get name="username"/>. See you again.</template> 44 </category> 45 46 47 <category> 48 <pattern>_ films _</pattern> 49 <template>Do you like watching films?</template> 50 </category> 51 <category> 52 <pattern>_ yes _</pattern> 53 <that>Do you like watching films?</that> 54 <template>Me too.</template> 55 </category> 56 <category> 57 <pattern>_ no _</pattern> 58 <that>Do you like watching films?</that> 59 <template>I do recommend you watch Weathering With You.</template> 60 </category> 61 62 63 <category> 64 <pattern>Any suggestion for todays lunch?</pattern> 65 <template> 66 <random> 67 <li>Italian</li> 68 <li>Japanese</li> 69 <li>French</li> 70 <li>Chinese</li> 71 </random> 72 </template> 73 </category> 74 75 76 77 <category> 78 <pattern>What food do you like?</pattern> 79 <template>Hmm French cuisines, in general.</template> 80 </category> 81 <category> 82 <pattern>What kind of food are you into?</pattern> 83 <template><srai>What food do you like?</srai></template> 84 </category> 85 <category> 86 <pattern>What kind of meal do you like?</pattern> 87 <template><srai>What food do you like?</srai></template> 88 </category> 89 90 91 92</aiml>
また、Pythonによるaimlのファイルの読み込みは以下の通りです:
python
1import aiml 2from telegram_bot import TelegramBot 3 4class Osyaberi: 5 def __init__(self): 6 self.sessiondic={} 7 def initial_message(self, input): 8 sessionId=input['sessionId'] 9 kernel=aiml.Kernel() 10 kernel.learn('osyaberi.xml') 11 self.sessiondic[sessionId]=kernel 12 return {'utt': 'Hi, Kay. Talk for a little while?', 'end': False} 13 def reply(self, input): 14 sessionId=input['sessionId'] 15 utt=input['utt'] 16 response=self.sessiondic[sessionId].respond(utt) 17 return {'utt': response, 'end': False} 18 19if __name__=='__main__': 20 osyaberi=Osyaberi() 21 bot=TelegramBot(osyaberi) 22 bot.run()
試したこと
ターミナル上で上記のファイルを実行した結果、initial_messageの係る部分はOKそうなのですが、replyの方でパースがしっかりできていないようです。エラーはTelegram上で'Hi, Kay. Talk for a little while?'に対し'Hello'と応答した結果です。
###補足情報
環境:MacBook Pro13,macOS 10.15.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 14:11
2020/09/02 14:51
2020/09/02 14:51
2020/09/02 15:13
2020/09/02 15:24
2020/09/02 23:32