9
2

More than 3 years have passed since last update.

これで俺モ ゲンシジン

Last updated at Posted at 2019-12-18

はじめに

こんにちはRIN1208です。この記事はITRCアドベントカレンダーの19日目の記事になります。

経緯

まず初めにこの記事を書いた経緯の説明をしたいと思います。
この記事で作った物こちらの記事、オレ プログラム ウゴカス オマエ ゲンシジン ナルを読み自分でも作ってみたくなったので作成した物です。
内容は似ていますが作成した言語やパッケージは異なります。
こちらの記事は個人的にとても好きなので是非見てみて下さい。

開発環境

  • Mac
  • goの実行環境
  • MeCabの環境

MeCabのインストール(Mac)

$ brew install mecab
$ brew install mecab-ipadic
$ brew install git curl xz
$ git clone --depth 1 git@github.com:neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n

上記のコマンドで一通りインストールできます。

また今回neologd辞書もインストールしています。詳しくはこちらを参照して下さい。

GoでMeCabを扱う

今回使用したGoのMeCabのラッパーはmecab-golangです。
先ほどMeCabをインストールしたのでこちらのコマンドを実行すれば準備完了です。

$ export CGO_LDFLAGS="`mecab-config --libs`"
$ export CGO_CFLAGS="-I`mecab-config --inc-dir`"
$ go get github.com/bluele/mecab-golang

これで準備完了です。

main.goと言うファイルを作成して下さい。

原始人になれるコードはこちら


package main

import (
    "fmt"
    "strings"

    "github.com/bluele/mecab-golang"
)

func parseToNode(m *mecab.MeCab, word string) {
    var key string
    tg, err := m.NewTagger()
    if err != nil {
        panic(err)
    }
    defer tg.Destroy()
    lt, err := m.NewLattice(word)
    if err != nil {
        panic(err)
    }
    defer lt.Destroy()

    node := tg.ParseToNode(lt)

    for {
        features := strings.Split(node.Feature(), ",")
        if features[0] != "助詞" && features[0] != "助動詞" {

            key = key + " " + features[7]
        }
        if node.Next() != nil {
            break
        }
    }
    fmt.Println(key)
}

func main() {
    var word string
    m, err := mecab.New("-Owakati")
    if err != nil {
        panic(err)
    }
    defer m.Destroy()
    fmt.Print("input keyword :")
    fmt.Scan(&word)
    parseToNode(m, word)
}

正直サンプルコードを少しいじっただけです。  
それでは実行結果をみてみましょう。

$ go build main.go 
$ go run main.go
input keyword :これでみんな原始人になれる

 * コレ ミンナ ゲンシ ジン ナレル *

このような感じです。

ですがこちらのコードではカタカナで入力された言葉があるとエラーが出てしまいます。(改善予定)

他には限界ヲタクするとき等にも使用可能です。

$ go run main.go
input keyword :水着まこと可愛すぎてやばい
 * ミズギ マコト カワイ スギ ヤバイ *
$ go run main.go
input keyword :この子かわいすぎないか。ほんと好みすぎてやばい
 * コノ コ カワイ スギ 。 ホント コノミ スギ ヤバイ *  

こんな感じで限界ヲタクするとき等にも使えます。

おわりに

自分は初めcotoha apiを使用してやってみたかったのですがいろいろと面倒だったのでMeCabを使ったらかなり簡単にできました。形態素解析自体このコードを書くまでが初めてですが面白いですね(コード書いたの半年以上前)。またここまで読んでくれた方ありがとうございました!

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2