概要
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
実行結果
海
成果物
以上。