Help us understand the problem. What is going on with this article?

これで俺モ ゲンシジン

はじめに

こんにちは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を使ったらかなり簡単にできました。形態素解析自体このコードを書くまでが初めてですが面白いですね(コード書いたの半年以上前)。またここまで読んでくれた方ありがとうございました!

rin1208
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした