1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

paiza.ioでelixir その209

Posted at

概要

paiza.ioでelixirやってみた。
練習問題やってみた。

練習問題

jsonパーサーを書け。

方針

agentを使う。
正規表現を使う。
request.intent.slots.message.valueで、指定する。

サンプルコード



defmodule Json do
	use Agent
	def start_link() do
		Agent.start_link(fn -> 
            ""
		end, name: __MODULE__)
	end
	def set(x) do
		Agent.update(__MODULE__, fn v ->
	        x
		end)
	end
	def get() do
		Agent.get(__MODULE__, fn v ->
			v
		end)
	end
	def get(s) do
		Agent.get(__MODULE__, fn v ->
		    o = String.split(s, ".")
			v = String.replace(v, "\n", "")
			v = String.replace(v, "\t", "")
			v = String.replace(v, " ", "")
			#IO.puts(length(o))
			if length(o) == 5 do
			    #request.intent.slots.message.value
			    reg = Regex.compile!("\"request\":.+intent\":.+slots\":.+message\":.+value\":\"(?<kore>.+)\",\"")
			    #reg = ~r/(?<prefix>.*?)\|(?<main>.*?)\|(?<sufix>.*)/
                #IO.inspect Regex.named_captures(reg, "pre_value|main_value|sufix_value")
                #mat = Regex.named_captures(~r/\"request\":.+intent\":.+slots\":.+message\":.+value\":\"(?<kore>.+)\",\"/, v)
                mat = Regex.named_captures(reg, v)
                ma = mat["kore"]
                m = String.split(ma, "\"")
                Enum.at(m, 0)
            end
            #v
		end)
	end
end


#choices[0].message.content


json = """
{
    id: 'chatcmpl-6sj7iU73n9TEbDrnuxHXfL47XWoKp',
    object: 'chat.completion',
    created: 1678501186,
    model: 'gpt-3.5-turbo-0301',
    usage: { 
        prompt_tokens: 16, 
        completion_tokens: 64, 
        total_tokens: 80 
    },
    choices: [{
        message: {
            role: 'assistant',
            content: '私はボットであり、食べ物を食べることができないので、牛丼に対する好みや嗜好を持っていません。申し訳ありません。'
        },
        finish_reason: null,
        index: 0
    }]
}
"""

# request.intent.slots.message.value
json2 = """
{
	"version":"1.0",
	"session":{
	    "new":false,
	    "sessionId":"amzn1.echo-api.session.db6c106b-2e1e-42de-9d44-4b2627f341e0",
	    "application":{
	        "applicationId":"amzn1.ask.skill.e5799a1b-8ead-43d4-9375-69d32c0ecaac"
	    },
        "attributes":{},
        "user":{
            "userId":"amzn1.ask.account.AGCVRNLNDG2QMV3XG74NZYKINRCNOCJMWUZILJDQ43JHUANT5FUF7BOHE5IBH65IOOJ5N2ZJB72KFVBADT5BMFPP4H3J7Q2UZUEGP55ZYFZLAR5TYQDJJQMLHRXRUXQICK34IJXC4SXRG4OYSBCLVEKB725HCMEKBWG2KP2OM7TS3H5YUDZX7QNOC73AEKRNQL5LK6DC5HE33QA"
        }
    },
	"context":{
	    "Viewports":[{
	        "type":"APL",
	        "id":"main",
	        "shape":"RECTANGLE",
	        "dpi":213,
	        "presentationType":"STANDARD",
	        "canRotate":false,
	        "configuration":{
	            "current":{
	                "mode":"HUB",
	                "video":{
	                    "codecs":["H_264_42","H_264_41"]
	                },
	                "size":{
	                    "type":"DISCRETE",
	                    "pixelWidth":1280,
	                    "pixelHeight":800
	                }
	            }
	        }
	    }],
	    "Viewport":{
	        "experiences":[{
	            "arcMinuteWidth":346,
	            "arcMinuteHeight":216,
	            "canRotate":false,
	            "canResize":false
	        }],
	        "mode":"HUB",
	        "shape":"RECTANGLE",
	        "pixelWidth":1280,
	        "pixelHeight":800,
	        "dpi":213,
	        "currentPixelWidth":1280,
	        "currentPixelHeight":800,
	        "touch":["SINGLE"],
	        "video":{
	            "codecs":["H_264_42","H_264_41"]
	        }
	    },
	    "Extensions":{
	        "available":{
	            "aplext:backstack:10":{}
	        }
	    },
	    "System":{
	        "application":{
	            "applicationId":"amzn1.ask.skill.e5799a1b-8ead-43d4-9375-69d32c0ecaac"
	        },
	        "user":{
	            "userId":"amzn1.ask.account.AGCVRNLNDG2QMV3XG74NZYKINRCNOCJMWUZILJDQ43JHUANT5FUF7BOHE5IBH65IOOJ5N2ZJB72KFVBADT5BMFPP4H3J7Q2UZUEGP55ZYFZLAR5TYQDJJQMLHRXRUXQICK34IJXC4SXRG4OYSBCLVEKB725HCMEKBWG2KP2OM7TS3H5YUDZX7QNOC73AEKRNQL5LK6DC5HE33QA"},"device":{"deviceId":"amzn1.ask.device.AG4PDANJPSYS7ZR34W5GGMWZRXQNX4VZYHD6RMNK2MBDJJJ6YYRYTJR4G2B47PEVE5EYSEDWUHB4KW6ZUYK5N23QJEGRI6XUXWCPHWYBEAFD7D7NMPVFAITA2S5SBQ7TFG7ZEIHYELRAMVKSBA5ENJ7T347DOLWNN4RIZ3M2BB5PFLUMWHSAS","supportedInterfaces":{}},"apiEndpoint":"https://api.fe.amazonalexa.com","apiAccessToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJhdWQiOiJodHRwczovL2FwaS5mZS5hbWF6b25hbGV4YS5jb20iLCJpc3MiOiJBbGV4YVNraWxsS2l0Iiwic3ViIjoiYW16bjEuYXNrLnNraWxsLmU1Nzk5YTFiLThlYWQtNDNkNC05Mzc1LTY5ZDMyYzBlY2FhYyIsImV4cCI6MTY3ODQ5NzkwNiwiaWF0IjoxNjc4NDk3NjA2LCJuYmYiOjE2Nzg0OTc2MDYsInByaXZhdGVDbGFpbXMiOnsiY29udGV4dCI6IkFBQUFBQUFBQXdCME1rbVVDMk00SGZMSmpESkVValYvS2dFQUFBQUFBQUF3YWxwN0xZRnBSVElYL005RkthY1BPK0lqa09CaUhZOFNZUmYvVEw5Sk5EUXRMSHZDOUNRN1gyRWhiWWJqbEQrcXNWb1JsL2Y1Yk5BQ3ZGY3F1c2hrUEE4dWJSSHgxWEpkMmx2aXJJUyttUEV6RmpYZnRJMHRaZkhlNmI1R1FIanF2aFcwbWhiUFFOMnlSSUxBYm5oaUkvZDZtMDhieXV1ck1RYlZRM0dZVGxvajRMSFlCcTQ3bDkvcklxWU9mRW1pYyt3ZzkrdzRCR1VPSkVsbDdGb0RJa2tZcWdKRmZJaFVHdWtYb0ZYVllpQXl2NzZsaEdlVnhzY2pUUFc5NjBEZXJmKzB0OVJDSHRKc3hWeTM2S2hrTVVUZUtkU1VuUDJ0OVJlRmpNZWxIODE2ektIOXFOdldSTEg1Y3FkSm9hUFVEdkp4ZC9idG4xc1pMRU9Lc0RKdnpUbFBYYU9rajh6S0ZnVGtkUmZBcTFMMWhTa3h2SEVTenFIdlJIZ0ZxQ21JUWlWVGNRa1BQVXk1IiwiZGV2aWNlSWQiOiJhbXpuMS5hc2suZGV2aWNlLkFHNFBEQU5KUFNZUzdaUjM0VzVHR01XWlJYUU5YNFZaWUhENlJNTksyTUJESkpKNllZUllUSlI0RzJCNDdQRVZFNUVZU0VEV1VIQjRLVzZaVVlLNU4yM1FKRUdSSTZYVVhXQ1BIV1lCRUFGRDdEN05NUFZGQUlUQTJTNVNCUTdURkc3WkVJSFlFTFJBTVZLU0JBNUVOSjdUMzQ3RE9MV05ONFJJWjNNMkJCNVBGTFVNV0hTQVMiLCJ1c2VySWQiOiJhbXpuMS5hc2suYWNjb3VudC5BR0NWUk5MTkRHMlFNVjNYRzc0TlpZS0lOUkNOT0NKTVdVWklMSkRRNDNKSFVBTlQ1RlVGN0JPSEU1SUJINjVJT09KNU4yWkpCNzJLRlZCQURUNUJNRlBQNEgzSjdRMlVaVUVHUDU1WllGWkxBUjVUWVFESkpRTUxIUlhSVVhRSUNLMzRJSlhDNFNYUkc0T1lTQkNMVkVLQjcyNUhDTUVLQldHMktQMk9NN1RTM0g1WVVEWlg3UU5PQzczQUVLUk5RTDVMSzZEQzVIRTMzUUEifX0.Edb3lnQIKEeAj6zrR4qHelZsNNJlHCpIB4ADz0y4vJJN-D6_TvpwFcFsTBb9G0pUWJCEwwpW7rDekatiFTpAJr7sPekJR_sU6aZgkUeQ4mFCfdD4XteEuL1SnM2qP5RDHOdDtHgVwYhMQcfQcly8o_OthpRM_pU2Q5P7PTHW12THfFlzhBB3rZLGY4eP3Ke7rrxLWXpNtEgpzHY0P3VhYQo_O_Eo5tk98M2yOhnpZI2P07uNjSDI39QEONr2G0OwoRSZw5fTlJ8lHVr1hJIn5CIJCvGBBqeS-F8nbmyUOqPVEUMgw_8BguH0FKktpSCyiXFVWQN9hVMszSflKa4gQQ"
    	    }
        }
	},
    "request":{
    	"type":"IntentRequest",
    	"requestId":"amzn1.echo-api.request.b6c1e74a-a087-47bd-9cc8-08f6acb27786",
    	"locale":"ja-JP",
    	"timestamp":"2023-03-11T01:20:06Z",
    	"intent":{
	    	"name":"MsgIntent",
	    	"confirmationStatus":"NONE",
    		"slots":{
	    		"message":{
		    		"name":"message",
			    	"value":"海",
				    "confirmationStatus":"NONE",
					"slotValue":{
    				    "type":"Simple",
	    			    "value":"海"
		    		}
			    }
		    }
	    },
	    "dialogState":"COMPLETED"
    }
}
"""

Json.start_link

Json.set(json2)

Json.get("request.intent.slots.message.value")
|> IO.puts




実行結果

成果物

以上。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?