夏の間インターンとして白ヤギでお世話になっていた安川です.今回のブログではインターンの期間で取り組んだ小プロジェクトの一つについて紹介します.
プロジェクトの目的
この小プロジェクト(以下,RedBlue)は勉強会,ハッカソン,音楽のコンサート,花火など
のあらゆるイベントの情報を取得することを目的として作成しました.これによって最終的にカメリオ無いでのイベント情報からのメタデータ抽出に役立てて頂く狙いがありました.作成期間は2日程度で今後も
継続して開発を進めていく予定ですので,興味のある方は一緒に開発しましょう!
コードはここで公開しています.
まずは使用例をご紹介します.
これは,実際に私が旭川で開催したイベントのサイトで掲載したテキスト
を利用しています.そのテキストはRedBlue/flask.html
にあります.
利用方法は以下の通りです.(なお,実行例ではpython3を利用していますが,2.x系でも動作します)
このようにして,テキストの情報を解析しイベントの情報を取得してきます.
実装
基本は正規表現を利用してイベント情報を取得しています.今回,正規表現を利用したのは,イベントの情報はある程度形式的に表現される事が多いためです.まずはルールベースで情報を取得し,この方法で取得できない情報に関しては他の手法で取得する事を考えています.
例えば開催日であれば,まず開催日を示すラベル(_date_label)
と開催日を示す値(_date)の正規表現にマッチした文字列の位置を
取得し距離を測ります.現在は単純に距離が近ければ開催日としています.
同様の原理で,他の情報も取得しています.
_date = re.compile(r”(?P(\d{4}[/\.年])?\d{1,2}[/\.月]\d{1,2}[日]?)”)
_date_label = re.compile(r'(?P<date_label>(開催日?)|(日[付時程])|期間)’)
正規表現の例
工夫した点
イベント情報の取得を特定のラベルとその値との距離で取得するシンプルな仕組みにした事が工夫点です.外部依存も少なくしたかったのですが,場所の特定にはMeCab
を利用しました.
場所の情報を正規表現で取得するのは非現実的なので,場所に関する単語であれば「地域」と特徴付けられるMeCabを利用しました.他は正規表現のみを利用しています.
今後
現状では,イベントの確からしさの計算はヒューリスティクに計算しており
計算方法の改善が必要となっています.また,1つのページ(htmlテキスト)に
複数のイベント情報がある場合はどちらかの情報しか取れないようになっているため
複数イベントへの対応も行う予定です.さらに,他にも精度の改善,イベントに必要な
他の情報も取得する等の機能拡充も行う予定です.
突貫的に作成したものなので多くの改善点がありますが,改善すれば良いものになると
信じています.
皆様からのプルリクお待ちしています.
特に評価の方法はどのように行うのが良いのかご教示して頂けると幸いです.