追記
この記事の情報は既に古くなっているので以下の記事を参照ください。
はじめに
5/1に渋谷にて行われたLINE/Facebookボットもくもく会に参加してきました
そこで私はLINEボットで形態素解析器を作りました.
形態素解析器ボット
まずは,ボットのQRコードを貼っておきます.もしよかったら使ってみてください
形態素解析とは
文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。
ソースコード
https://github.com/nnsnodnb/LINE_bot-MorphologicalAnalysisgithub.com
from flask import Flask from flask import request from janome.tokenizer import Tokenizer import requests import json import re import settings LINEBOT_API_EVENT ='https://trialbot-api.line.me/v1/events' LINE_HEADERS = { 'Content-type': 'application/json; charset=UTF-8', 'X-Line-ChannelID':settings.CHANNEL_ID, 'X-Line-ChannelSecret':settings.CHANNEL_SECRET, 'X-Line-Trusted-User-With-ACL':settings.MID } def post_event(to, content): msg = { 'to': [to], 'toChannel': 1383378250, 'eventType': "138311608800106203", 'content': content } r = requests.post(LINEBOT_API_EVENT, headers = LINE_HEADERS, data = json.dumps(msg)) def post_text(to, text): content = { 'contentType':1, 'toType':1, 'text':text, } post_event(to, content) commands = ( (re.compile('作者', 0), lambda x: 'https://nnsnodnb.moe'), ) app = Flask(__name__) @app.route("/callback", methods=['POST']) def callback(): messages = request.json['result'] for message in messages: text = message['content']['text'] for matcher, action in commands: if matcher.search(text): response = action(text) break else: post_text(message['content']['from'], '解析中...') # 形態素解析 response = '' t = Tokenizer() for token in t.tokenize(message['content']['text']): response += str(token) + '\n' post_text(message['content']['from'], response) return '' if __name__ == "__main__": app.run(host = '0.0.0.0', port = 8001, threaded = True, debug = True)
こんな感じ.
LINE botの登録は以下
https://business.line.me/ja/products/4/introductionbusiness.line.me
callback URLは「https」でないとダメなのでHeroku等で運用するといいかもしれません
私は,自宅サーバをhttpsにしているの証明書を再発行してなんとかサーバ設定を終え開発しました.
現在,管理者募集は考えていませんが,もし興味があるようでしたら
コメントなりなんなりしていただけたら対応いたします!
最後に
一応デモ動画を貼っておきます
この機会になにかボットでサービス作れれば良いなぁって思います.