공투 말 RPG 코토하만

소개



여러분은 코토다만이라는 게임을 아십니까?

코토다만이란 iOS/Android용으로 전달되고 있는 공투 말 RPG 게임입니다

규칙으로서는 빈 테두리에 문자를 메워 가서 콤보를 짜서 적을 쓰러뜨린다는 느낌의 것이 되어 있습니다



공투 말 RPG 코토다만 호평 전달중! !

iOS
htps: //언제나 s. 아 ぇ. 이 m/jp/아니 p/아니 d1298368256
안드로이드
htps : // p ぁ y. 오, ぇ. 이 m / s 취해 / 아 ps /에서 원하는 ls? 이 d = 코 m. 세가. 코다만

무엇을 하는가?



그런데, 최음을 매진 한 곳에서 본제에 들어가려고 생각합니다.

이번에 해 나가는 것은 COTOHA API를 사용해 코토다만과 같은 것을 만들어 보자는 것입니다

(코토다만 같은 것이라고 해도 단어마다 나누어 콤보수를 세는 것만입니다만)

프로그램 본체



코토하만.py

cotohaman.py
# -*- coding: utf-8 -*-
import os
import urllib.request
import json

class CotohaApi:
    def __init__(self,client_id, client_secret, developer_api_base_url, access_token_publish_url):
        self.client_id = client_id
        self.client_secret = client_secret
        self.developer_api_base_url = developer_api_base_url
        self.access_token_publish_url = access_token_publish_url
        self.getAccessToken()

    def getAccessToken(self):
        url = self.access_token_publish_url
        headers={
            "Content-Type": "application/json;charset=UTF-8"
        }
        data = {
            "grantType": "client_credentials",
            "clientId": self.client_id,
            "clientSecret": self.client_secret
        }
        data = json.dumps(data).encode()
        req = urllib.request.Request(url, data, headers)
        res = urllib.request.urlopen(req)
        res_body = res.read()
        res_body = json.loads(res_body)
        self.access_token = res_body["access_token"]
    def callCotohaApiCommon(self, url, data):
        headers= {
            "Authorization": "Bearer " + self.access_token,
            "Content-type":"application/json;charset=UTF-8",
        }
        data = json.dumps(data).encode()
        req = urllib.request.Request(url, data, headers)

        CONNECTION_RETRY_COUNT = 2

        for counter in range(1, CONNECTION_RETRY_COUNT + 1):
            try:

                res = urllib.request.urlopen(req)
                break
            except urllib.request.HTTPError as e:
                if e.code == 401:
                    print("Please retry.")
                    self.access_token = self.getAccessToken()
                    headers["Authorization"] = "Bearer " + self.access_token
                    req = urllib.request.Request(url, data, headers)
                else:
                    print ("<Error> " + e.reason)
                    return ""
            except Exception as e:
                print(e)
                return ""

        res_body = res.read()    
        res_body = json.loads(res_body)
        return res_body["result"][0]["tokens"]

    def cotodama(self,coto):
        url = self.developer_api_base_url + "nlp/v1/parse"
        data = {
            "sentence": coto
        }
        coto = self.callCotohaApiCommon(url, data)
        if len(coto) == 1 and coto[0]["pos"] == "名詞":
            return coto
        return ""

    def cut(self):
        word_lis = []
        result_lis = []
        coto = input("文字を入力してください(7文字)")
        for i in range(0,6,1):
            for j in range(7,0,-1):
                if i+1 == j: break
                word_lis.append(coto[i:j])
        for tex in word_lis:
            if tex[0] == "ん":
                continue
            result_lis.append(self.cotodama(tex))
        result_lis = list(filter(lambda a: a!="",result_lis))
        return result_lis

if __name__ == "__main__":
    f = open('token.txt')
    lines = f.readlines()  
    for i in range(len(lines)):
        lines[i] = lines[i].replace("\n",'')
    inst = CotohaApi(lines[0], lines[1], lines[2], lines[3])
    result = inst.cut()
    for res in result:
        print(res[0]["lemma"])
    print("{}COMBO!".format(len(result)))



조금 해설



초반의 API 설정 and 호출 부분은
↓이 기사인가 공식 참조를 읽어주세요
「멘토스와 바둑의 추억」을 COTOHA씨에게 요약해 준 결과. COTOHA 가장 빠른 자습서 포함

이 템플릿에 주는 데이터를 가공하는 부분의 해설을 합니다

일곱 글자의 히라가나를 입력으로 받고 왼쪽에서 긴 순서로 입력을 분할하여 목록에 저장합니다.

그 후 분할한 단어마다 API에 던져 갑니다만, "응"이 단어의 처음에 있다고 왠지 명사 판정되어 버리므로 제거하고 있습니다

그리고 돌아온 결과가 나뉘지 않고, 단어만이면서 명사였을 경우에 결과의 리스트에 저장하고 있습니다

마지막으로 순서대로 출력하고 종료

결과


入力>>さいかくあいま
才覚
さいか

いかくあ
威嚇
いか
くあいま
くあい
くあ
合間
あい

12COMBO!

적당히 이미지 검색에서 찾아 온 단어를 넣었습니다만, 인간에게는 이해할 수 없는 단어도 나오고 있어요

요약



이번에 만든 것의 문제점으로는
· 여러 번 API 호출해야합니다.
· 조금 인간에게는 이해할 수없는 단어가 나옵니다.

수정안이 있으면 댓글을 달면 도움이됩니다.

사이고에게



이 문서는 【Qiita x COTOHA API 선물 기획】에 참여했습니다.

좋아요

참고 페이지



COTOHA API
공식 참조
「멘토스와 바둑의 추억」을 COTOHA씨에게 요약해 준 결과. COTOHA 가장 빠른 자습서 포함
자연 언어 처리를 쉽게 다룰 수 있다면 소문의 COTOHA API를 Python에서 사용해 보았습니다.

좋은 웹페이지 즐겨찾기