BLOG

 

235日のセブIT留学  成長日記「ぐるなびAPIの口コミデータを形態素分析!」 ( 46/235 days )

23 8月 2018, Posted by keisuke in IT留学, プログラミング

こんばんわ!Keisukeです!

 

前回, 口コミを取得したので

今回は, その口コミを形態素分析してみたいと思います!

 

① 口コミのデータを取得

② 口コミのデータを形態素分析し 分解した状態で表示する

③ 更に名詞の頻出頻度を表示する

 

以下コード

***************************

#!/usr/bin/env python

# -*- coding: utf-8 -*-

#*****************************************************************************************

# ぐるなびWebサービスの応援口コミAPIを実行しハンバーグの口コミを取得しパースするプログラム

# 注意:アクセスキーはユーザ登録後に発行されるキーを指定してください。

#*****************************************************************************************

import sys

import urllib.parse

import urllib.request

import json

from janome.tokenizer import Tokenizer

from janome.analyzer import Analyzer

from janome.tokenfilter import *

 

####

# 変数の型が文字列かどうかチェック

####

def is_str( data = None ) :

   if isinstance( data, str ) or isinstance( data, int ) :

       return True

   else :

       return False

if __name__ == ‘__main__’:   

   ####

   # 初期値設定

   ####

   # APIアクセスキー

   keyid     = “4b069e059d0923043fca1f5e6b4f20ce”

   # エンドポイントURL

   url      = “https://api.gnavi.co.jp/PhotoSearchAPI/20150630/”

   # メニュー

   menu_name = u”カレー”

   #文字コード

   encoding = ‘utf-8’

 

   latitude  = “43.067656”

   # 経度

   longitude = “141.350857”

   # 範囲

   # 1:300m、2:500m、3:1000m、4:2000m、5:3000m

   range_m     = “1”

   ####

   # APIアクセス

   ####

   # URLに続けて入れるパラメータを組立

   query = [

   ( “format”,    “json” ),

   ( “keyid”,     keyid ),

   ( “latitude”,    latitude ),

   ( “longitude”,   longitude ),

   ( “range”,       range_m ),

   ( “menu_name”, menu_name.encode(encoding) ),

   ]

   # URL生成

   url += “?{0}”.format( urllib.parse.urlencode( query ) )

   # API実行

   try :

       result = urllib.request.urlopen( url ).read()

   except ValueError :

       print(u”APIアクセスに失敗しました。”)

 

   ####

   # 取得した結果を解析

   ####

   data = json.loads( result )

   print(“—————–口コミを表示します!—————–“)

 

   #print(data)

   # エラーの場合

   if “error” in data :

       if “message” in data :

           print(u”{0}”.format( data[“message”] ))

       else :

           print(u”データ取得に失敗しました。”)

 

   # ヒット件数取得

   total_hit_count = None

   if “total_hit_count” in data[“response”] :

       total_hit_count = data[“response”][“total_hit_count”]

 

   #ページごとの件数を取得

   total_hit_count = None

   if “total_hit_count” in data[“response”] :

       total_hit_count = data[“response”][“total_hit_count”]

 

   # ヒット件数が0以下、または、ヒット件数がなかったら終了

   if total_hit_count is None or total_hit_count <= 0 or total_hit_count is None or total_hit_count <= 0 :

       print(u”指定した内容ではヒットしませんでした。”)

 

   # ヒット件数表示

   print(“{0}件ヒットしました。”.format( total_hit_count ))

   print(“”)

   print(“—-“)

 

   # 出力件数

   disp_count = 0

   com = []

   sname = []

 

   # 応援口コミデータ取得

   for i in range( total_hit_count ) :

       photo = data[“response”][“{0}”.format(i)][“photo”]

       line             = []

       id             = “”

       name             = “”

       mname             = “”

       comment             = “”

 

       # 店舗番号

       if “shop_id” in photo and is_str( photo[“shop_id”] ) :

           id = photo[“shop_id”]

       line.append( id )

 

       # 店舗名

       if “shop_name” in photo and is_str( photo[“shop_name”] ) :

           name = photo[“shop_name”]

       sname.append(name)

       line.append( name )

 

       # メニュー名

       if “menu_name” in photo and is_str( photo[“menu_name”] ) :

           mname = photo[“menu_name”]

       line.append( mname )

 

       # コメント

       if “comment” in photo and is_str( photo[“comment”] ) :

           comment = photo[“comment”]

       line.append( comment )

       com.append(comment)

 

       # タブ区切りで出力

       print(“\t”.join( line ))

       print(“**********************************”,”\n”)

       disp_count += 1

   # 出力件数を表示して終了

   print(“—-“)

   print(u”{0}件出力しました。”.format( disp_count ))

 

   print(“—————–形態素分析を開始します!—————–“)

   t = Tokenizer()

   token_filters = [POSKeepFilter(‘名詞’), TokenCountFilter()]

   a = Analyzer(token_filters=token_filters)

   for i in range(len(com)):

       print(sname[i],’\n’)

       print(“**********************************”,”\n”)

       print(com[i],’\n’)

 

       print(“+++++++++++++++++++++++分解+++++++++++++++++++++++”,”\n”)

       for token in t.tokenize(com[i]):

           print(token)

       print(“**********************************”,”\n”)

 

       print(“+++++++++++++++++++++++名詞頻度+++++++++++++++++++++++”,”\n”)

       for k, v in a.analyze(com[i]):

 

           print(‘%s: %d’ % (k, v))    

       print(“**********************************”,”\n”)

 

***************************

 

実行結果

 

—————–口コミを表示します!—————–

4件ヒットしました。

 

—-

7104243 スープカレーとカレーの店 天馬   海の幸の海鮮スープカレー 見た目にも鮮やかで、えび・ムール貝・あさ り・いかの入ったシーフードカレーですが、大きく切った野菜もごろごろ入っていて、食べ応えもあり大満足です。

**********************************

 

7104243 スープカレーとカレーの店 天馬   豚の角煮温野菜のスープカレー(ポークスープ) よく煮込まれた柔らかい豚 の角煮とスープカレーならではの大きな野菜がたっぷりで、スパイスの効いたサラサラスープが具材と良く合います。

**********************************

 

h957801 カリーハウス コロンボ   ハンバーグカレー ジューシーなハンバーグが、この店特有の甘口カレーの風味と 相まって、とびきりの美味さを醸し出している。

**********************************

 

6295315 まんざら        ざんぎカレー 久しぶりに美味しいカレー&ざんぎを頂きました。

まろやかでコクのあるカレーと、カラっと揚がった味付ざんぎは人におすすめできる美味しさです。

ランチメニューで限定10食なのでお早めに。

**********************************

 

—-

4件出力しました。

—————–形態素分析を開始します!—————–

スープカレーとカレーの店 天馬

 

**********************************

 

見た目にも鮮やかで、えび・ムール貝・あさり・いかの入ったシーフードカレーですが、大きく切った野菜もごろごろ入って いて、食べ応えもあり大満足です。

 

+++++++++++++++++++++++分解+++++++++++++++++++++++

 

見た目  名詞,一般,*,*,*,*,見た目,ミタメ,ミタメ

に      助詞,格助詞,一般,*,*,*,に,ニ,ニ

も      助詞,係助詞,*,*,*,*,も,モ,モ

鮮やか  名詞,形容動詞語幹,*,*,*,*,鮮やか,アザヤカ,アザヤカ

で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ

、      記号,読点,*,*,*,*,、,、,、

えび    名詞,一般,*,*,*,*,えび,エビ,エビ

・      記号,一般,*,*,*,*,・,・,・

ムール貝        名詞,一般,*,*,*,*,ムール貝,ムールガイ,ムールガイ

・      記号,一般,*,*,*,*,・,・,・

あさり  名詞,一般,*,*,*,*,あさり,アサリ,アサリ

・      記号,一般,*,*,*,*,・,・,・

いか    名詞,一般,*,*,*,*,いか,イカ,イカ

の      助詞,格助詞,一般,*,*,*,の,ノ,ノ

入っ    動詞,自立,*,*,五段・ラ行,連用タ接続,入る,ハイッ,ハイッ

た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

シーフード      名詞,一般,*,*,*,*,シーフード,シーフード,シーフード

カレー  名詞,一般,*,*,*,*,カレー,カレー,カレー

です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス

が      助詞,接続助詞,*,*,*,*,が,ガ,ガ

、      記号,読点,*,*,*,*,、,、,、

大きく  形容詞,自立,*,*,形容詞・イ段,連用テ接続,大きい,オオキク,オーキク

切っ    動詞,自立,*,*,五段・ラ行,連用タ接続,切る,キッ,キッ

た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

野菜    名詞,一般,*,*,*,*,野菜,ヤサイ,ヤサイ

も      助詞,係助詞,*,*,*,*,も,モ,モ

ごろごろ        副詞,一般,*,*,*,*,ごろごろ,ゴロゴロ,ゴロゴロ

入っ    動詞,自立,*,*,五段・ラ行,連用タ接続,入る,ハイッ,ハイッ

て      助詞,接続助詞,*,*,*,*,て,テ,テ

い      動詞,非自立,*,*,一段,連用形,いる,イ,イ

て      助詞,接続助詞,*,*,*,*,て,テ,テ

、      記号,読点,*,*,*,*,、,、,、

食べ    動詞,自立,*,*,一段,連用形,食べる,タベ,タベ

応え    名詞,一般,*,*,*,*,応え,コタエ,コタエ

も      助詞,係助詞,*,*,*,*,も,モ,モ

あり    動詞,自立,*,*,五段・ラ行,連用形,ある,アリ,アリ

大      接頭詞,名詞接続,*,*,*,*,大,ダイ,ダイ

満足    名詞,サ変接続,*,*,*,*,満足,マンゾク,マンゾク

です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス

。      記号,句点,*,*,*,*,。,。,。

**********************************

 

+++++++++++++++++++++++頻度+++++++++++++++++++++++

 

見た目: 1

鮮やか: 1

えび: 1

ムール貝: 1

あさり: 1

いか: 1

シーフード: 1

カレー: 1

野菜: 1

応え: 1

満足: 1

**********************************

 

スープカレーとカレーの店 天馬

 

**********************************

 

よく煮込まれた柔らかい豚の角煮とスープカレーならではの大きな野菜がたっぷりで、スパイスの効いたサラサラスープが具 材と良く合います。

 

+++++++++++++++++++++++分解+++++++++++++++++++++++

 

よく    副詞,一般,*,*,*,*,よく,ヨク,ヨク

煮込ま  動詞,自立,*,*,五段・マ行,未然形,煮込む,ニコマ,ニコマ

れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ

た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

柔らかい        形容詞,自立,*,*,形容詞・アウオ段,基本形,柔らかい,ヤワラカイ,ヤワラカイ

豚      名詞,一般,*,*,*,*,豚,ブタ,ブタ

の      助詞,連体化,*,*,*,*,の,ノ,ノ

角      名詞,一般,*,*,*,*,角,カク,カク

煮      動詞,自立,*,*,一段,連用形,煮る,ニ,ニ

と      助詞,並立助詞,*,*,*,*,と,ト,ト

スープ  名詞,一般,*,*,*,*,スープ,スープ,スープ

カレー  名詞,固有名詞,地域,一般,*,*,カレー,カレー,カレー

ならでは        名詞,接尾,一般,*,*,*,ならでは,ナラデハ,ナラデワ

の      助詞,連体化,*,*,*,*,の,ノ,ノ

大きな  連体詞,*,*,*,*,*,大きな,オオキナ,オーキナ

野菜    名詞,一般,*,*,*,*,野菜,ヤサイ,ヤサイ

が      助詞,格助詞,一般,*,*,*,が,ガ,ガ

たっぷり        副詞,助詞類接続,*,*,*,*,たっぷり,タップリ,タップリ

で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ

、      記号,読点,*,*,*,*,、,、,、

スパイス        名詞,一般,*,*,*,*,スパイス,スパイス,スパイス

の      助詞,格助詞,一般,*,*,*,の,ノ,ノ

効い    動詞,自立,*,*,五段・カ行イ音便,連用タ接続,効く,キイ,キイ

た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

サラサラスープ  名詞,一般,*,*,*,*,サラサラスープ,*,*

が      助詞,格助詞,一般,*,*,*,が,ガ,ガ

具      名詞,一般,*,*,*,*,具,グ,グ

材      名詞,接尾,一般,*,*,*,材,ザイ,ザイ

と      助詞,格助詞,一般,*,*,*,と,ト,ト

良く    副詞,一般,*,*,*,*,良く,ヨク,ヨク

合い    動詞,自立,*,*,五段・ワ行促音便,連用形,合う,アイ,アイ

ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス

。      記号,句点,*,*,*,*,。,。,。

**********************************

 

+++++++++++++++++++++++頻度+++++++++++++++++++++++

 

豚: 1

角: 1

スープ: 1

カレー: 1

ならでは: 1

野菜: 1

スパイス: 1

サラサラスープ: 1

具: 1

材: 1

**********************************

 

カリーハウス コロンボ

 

**********************************

 

ジューシーなハンバーグが、この店特有の甘口カレーの風味と相まって、とびきりの美味さを醸し出している。

 

+++++++++++++++++++++++分解+++++++++++++++++++++++

 

ジューシー      名詞,一般,*,*,*,*,ジューシー,*,*

な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ

ハンバーグ      名詞,一般,*,*,*,*,ハンバーグ,ハンバーグ,ハンバーグ

が      助詞,格助詞,一般,*,*,*,が,ガ,ガ

、      記号,読点,*,*,*,*,、,、,、

この    連体詞,*,*,*,*,*,この,コノ,コノ

店      名詞,一般,*,*,*,*,店,ミセ,ミセ

特有    名詞,一般,*,*,*,*,特有,トクユウ,トクユー

の      助詞,連体化,*,*,*,*,の,ノ,ノ

甘口    名詞,一般,*,*,*,*,甘口,アマクチ,アマクチ

カレー  名詞,一般,*,*,*,*,カレー,カレー,カレー

の      助詞,連体化,*,*,*,*,の,ノ,ノ

風味    名詞,一般,*,*,*,*,風味,フウミ,フーミ

と      助詞,格助詞,一般,*,*,*,と,ト,ト

相まって        副詞,一般,*,*,*,*,相まって,アイマッテ,アイマッテ

、      記号,読点,*,*,*,*,、,、,、

とびきり        副詞,助詞類接続,*,*,*,*,とびきり,トビキリ,トビキリ

の      助詞,連体化,*,*,*,*,の,ノ,ノ

美味    形容詞,自立,*,*,形容詞・アウオ段,ガル接続,美味い,ウマ,ウマ

さ      名詞,接尾,特殊,*,*,*,さ,サ,サ

を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ

醸し出し        動詞,自立,*,*,五段・サ行,連用形,醸し出す,カモシダシ,カモシダシ

て      助詞,接続助詞,*,*,*,*,て,テ,テ

いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル

。      記号,句点,*,*,*,*,。,。,。

**********************************

 

+++++++++++++++++++++++頻度+++++++++++++++++++++++

 

ジューシー: 1

ハンバーグ: 1

店: 1

特有: 1

甘口: 1

カレー: 1

風味: 1

さ: 1

**********************************

 

まんざら

 

**********************************

 

久しぶりに美味しいカレー&ざんぎを頂きました。

まろやかでコクのあるカレーと、カラっと揚がった味付ざんぎは人におすすめできる美味しさです。

ランチメニューで限定10食なのでお早めに。

 

+++++++++++++++++++++++分解+++++++++++++++++++++++

 

久しぶり        名詞,一般,*,*,*,*,久しぶり,ヒサシブリ,ヒサシブリ

に      助詞,格助詞,一般,*,*,*,に,ニ,ニ

美味しい        形容詞,自立,*,*,形容詞・イ段,基本形,美味しい,オイシイ,オイシイ

カレー  名詞,一般,*,*,*,*,カレー,カレー,カレー

&      記号,一般,*,*,*,*,&,アンド,アンド

ざんぎを        名詞,一般,*,*,*,*,ざんぎを,*,*

頂き    動詞,自立,*,*,五段・カ行イ音便,連用形,頂く,イタダキ,イタダキ

まし    助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ

た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

。      記号,句点,*,*,*,*,。,。,。

,*,*    記号,一般,*,*,*,*,

 

       記号,空白,*,*,*,*,

,*,*

まろやか        名詞,形容動詞語幹,*,*,*,*,まろやか,マロヤカ,マロヤカ

で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ

コク    名詞,一般,*,*,*,*,コク,コク,コク

の      助詞,格助詞,一般,*,*,*,の,ノ,ノ

ある    動詞,自立,*,*,五段・ラ行,基本形,ある,アル,アル

カレー  名詞,一般,*,*,*,*,カレー,カレー,カレー

と      助詞,並立助詞,*,*,*,*,と,ト,ト

、      記号,読点,*,*,*,*,、,、,、

カラ    名詞,一般,*,*,*,*,カラ,カラ,カラ

っと    助詞,格助詞,引用,*,*,*,っと,ット,ット

揚がっ  動詞,自立,*,*,五段・ラ行,連用タ接続,揚がる,アガッ,アガッ

た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

味      名詞,一般,*,*,*,*,味,アジ,アジ

付      名詞,接尾,一般,*,*,*,付,ヅケ,ズケ

ざんぎは        名詞,一般,*,*,*,*,ざんぎは,*,*

人      名詞,接尾,一般,*,*,*,人,ジン,ジン

に      助詞,格助詞,一般,*,*,*,に,ニ,ニ

おすすめ        名詞,サ変接続,*,*,*,*,おすすめ,オススメ,オススメ

できる  動詞,自立,*,*,一段,基本形,できる,デキル,デキル

美味し  形容詞,自立,*,*,形容詞・イ段,ガル接続,美味しい,オイシ,オイシ

さ      名詞,接尾,特殊,*,*,*,さ,サ,サ

です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス

。      記号,句点,*,*,*,*,。,。,。

,*,*    記号,一般,*,*,*,*,

 

       記号,空白,*,*,*,*,

,*,*

ランチ  名詞,一般,*,*,*,*,ランチ,ランチ,ランチ

メニュー        名詞,一般,*,*,*,*,メニュー,メニュー,メニュー

で      助詞,格助詞,一般,*,*,*,で,デ,デ

限定    名詞,サ変接続,*,*,*,*,限定,ゲンテイ,ゲンテイ

1      名詞,数,*,*,*,*,1,イチ,イチ

0      名詞,数,*,*,*,*,0,ゼロ,ゼロ

食      名詞,接尾,助数詞,*,*,*,食,ショク,ショク

な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ

ので    助詞,接続助詞,*,*,*,*,ので,ノデ,ノデ

お      接頭詞,名詞接続,*,*,*,*,お,オ,オ

早め    名詞,一般,*,*,*,*,早め,ハヤメ,ハヤメ

に      助詞,格助詞,一般,*,*,*,に,ニ,ニ

。      記号,句点,*,*,*,*,。,。,。

**********************************

 

+++++++++++++++++++++++頻度+++++++++++++++++++++++

 

久しぶり: 1

カレー: 2

ざんぎを: 1

まろやか: 1

コク: 1

カラ: 1

味: 1

付: 1

ざんぎは: 1

人: 1

おすすめ: 1

さ: 1

ランチ: 1

メニュー: 1

限定: 1

1: 1

0: 1

食: 1

早め: 1

**********************************

 

数値などは, 一つ一つ分解されてしまうのは少しネックですね!

改善したいな…

 

[今日の達成]

・口コミを形態素分析した!

・頻出頻度を表示した!

 

[今日の未消化]

・数字がかかわる形態素分析を改善する

 

Post a comment