Edited at
WHITEPLUSDay 25

たった3分でできる俳句判定処理

More than 1 year has passed since last update.

ホワイトプラスのエンジニアのkaizoaです。

アドベントカレンダーの最後となりますので季節感出していきます。

季節ということで、Goで渡したテキストから俳句の判定をする実装はないかなと探したところ、github.com/mattn/go-haikuを見つけたので、俳句の世界でアイドル的な存在である北大路翼さんのツイートを渡してみました。

$ haiku -u 'https://twitter.com/search?l=&q=from%3Atenshinoyodare%20since%3A2017-12-01%20until%3A2017-12-24'

五本指 ソックスで来る サンタさん
年末は 俺を見てゐろ 風邪気味の
アウトロー 俳句アマゾン 詩歌部門
開発者 契約および 開発者
しよう気に なるツイートを 見つけたら
情報は こちら話題の トピックが

すごいっ!、年末っぽい俳句が出てきた笑

しかしながら、実際はもっと俳句をツイートしてるのに、ここには引っかかってきませんでした。

これは下記のような五七五の定型じゃない句がまぁまぁあるので、文字数を数えるアプローチでは見つけられないケースが結構あるためです。

というわけで北大路さんのツイート限定ですが、確実に俳句を抜き出せる処理を書いてみました。


main.go

package main

import (
"os"
"fmt"

"github.com/dghubble/go-twitter/twitter"
"github.com/dghubble/oauth1"
"strings"
"strconv"
)

func main() {
config := oauth1.NewConfig(os.Getenv("TWITTER_CONSUMER_KEY"), os.Getenv("TWITTER_CONSUMER_SECRET"))
token := oauth1.NewToken(os.Getenv("TWITTER_ACCESS_TOKEN"), os.Getenv("TWITTER_ACCESS_SECRET"))

tweets, _, err:= twitter.NewClient(config.Client(oauth1.NoContext, token)).
Timelines.
UserTimeline(&twitter.UserTimelineParams{
ScreenName: "tenshinoyodare",
Count: 1000,
})

if err != nil {
panic(err)
}

for _, t := range tweets {
arr := strings.Split(t.Text, " ")
if len(arr) == 0 {
continue
}
if _, err := strconv.Atoi(arr[0]); err != nil {
continue
}
fmt.Printf("%s\n", t.Text)
}
}


はい、先頭に数字が入ってるかチェックしてるだけです。

歌人の方で句をツイートしてる人の一部は、採番した数字を句の頭に書いていることがあるので、その場合はこれだけで良いのです。

$ go  run main.go

24 大阪で途方にくれるクリスマス
23 東電をぶち殺すためサンタコス
22 サンタクロース(女)は脱がしづらい
21 十字架の人の当日参加かな
20 馬小屋で糞すれば湯気クリスマス
19 どちらかといへば又吉クリスマス
18 神様を踏んで聖夜に集まりぬ
18 五本指ソックスで来るサンタさん
17 落椿が絵文字になつたらよく使ふ
16 手袋を裏返さぬやううまく脱ぐ
15 重ね着の肩をすぼめて座りたる
14 新しい靴の固さに寒気満つ
12 どろどろに固まつてゐるチーズピザ
11 いい人で終はりたくない狸汁
10 年末は俺を見てゐろ風邪気味の
9 通販で買ふと蜜柑がついてくる
8 小さくて汚い店の冬の星
7 返り花日差しにほつとしてゐたる
6 鋭利な便意もうだめ嚔出る
5 風邪引いてゐますが痴漢ぢやありません
4 枯れ木踏む音で手紙が破かれて

大したことないコードではありますが、定形に囚われることなく確実に俳句を抜き出せるので最高✌✌

季節感✌✌

🎍🎍では良いお年を🎍🎍


ホワイトプラスではエンジニアを募集しています

ホワイトプラスでは、web×リアル領域で「新しい日常を創りたい」エンジニアWanted!!しております。