jyhsu2000 / CKIPService

Web service for ckiplab/ckiptagger
6 stars 4 forks source link

使用 JSON 做為 response 格式 #4

Closed johnroyer closed 4 months ago

johnroyer commented 4 months ago

依照 #3 的討論,將結果轉成 JSON 格式再回傳


使用 README 中的測試資料,可以得到以下結果:

{
  "sentences": [
    {
      "segments": [
        {
          "word": "土地公",
          "pos": "Nb"
        },
        {
          "word": "有",
          "pos": "V_2"
        },
        {
          "word": "政策",
          "pos": "Na"
        },
        {
          "word": "?",
          "pos": "QUESTIONCATEGORY"
        },
        {
          "word": "?",
          "pos": "QUESTIONCATEGORY"
        },
        {
          "word": "還是",
          "pos": "Caa"
        },
        {
          "word": "土地",
          "pos": "Na"
        },
        {
          "word": "婆",
          "pos": "Na"
        },
        {
          "word": "有",
          "pos": "V_2"
        },
        {
          "word": "政策",
          "pos": "Na"
        },
        {
          "word": "。",
          "pos": "PERIODCATEGORY"
        },
        {
          "word": ".",
          "pos": "PERIODCATEGORY"
        }
      ],
      "entities": [
        {
          "word": "土地公",
          "type": "PERSON",
          "start": 0,
          "end": 3
        }
      ]
    },
    {
      "segments": [
        {
          "word": "最多",
          "pos": "VH"
        },
        {
          "word": "容納",
          "pos": "VJ"
        },
        {
          "word": "59,000",
          "pos": "Neu"
        },
        {
          "word": "個",
          "pos": "Nf"
        },
        {
          "word": "人",
          "pos": "Na"
        },
        {
          "word": ",",
          "pos": "COMMACATEGORY"
        },
        {
          "word": "或",
          "pos": "Caa"
        },
        {
          "word": "5.9萬",
          "pos": "Neu"
        },
        {
          "word": "人",
          "pos": "Na"
        },
        {
          "word": ",",
          "pos": "COMMACATEGORY"
        },
        {
          "word": "再",
          "pos": "D"
        },
        {
          "word": "多",
          "pos": "D"
        },
        {
          "word": "就",
          "pos": "D"
        },
        {
          "word": "不行",
          "pos": "VH"
        },
        {
          "word": "了",
          "pos": "T"
        },
        {
          "word": ".",
          "pos": "PERIODCATEGORY"
        },
        {
          "word": "這",
          "pos": "Nep"
        },
        {
          "word": "是",
          "pos": "SHI"
        },
        {
          "word": "環評",
          "pos": "Na"
        },
        {
          "word": "的",
          "pos": "DE"
        },
        {
          "word": "結論",
          "pos": "Na"
        },
        {
          "word": ".",
          "pos": "PERIODCATEGORY"
        }
      ],
      "entities": [
        {
          "word": "59,000",
          "type": "CARDINAL",
          "start": 4,
          "end": 10
        },
        {
          "word": "5.9萬",
          "type": "CARDINAL",
          "start": 14,
          "end": 18
        }
      ]
    }
  ]
}

再麻煩你確認,謝謝。

jyhsu2000 commented 4 months ago

JSON 結構感覺沒啥問題 不過在其他方面有注意到一些問題:

另外注意到新增了一個 docker-compose.local.yml 檔案,這部份對於此 PR 有點離題,會建議拆分到其他 PR 或在此 PR 的標題與內文一併論述

再麻煩修改了,謝謝

johnroyer commented 4 months ago

更動:

由於 line 86 的 json.dumps() 回傳的是 string,所以 fastapi 的 response type 我還是保留 PlainTextResponse,避免非預期行為

jyhsu2000 commented 4 months ago

對於回應型態, 我注意到 json.dumps() 了,是我疏忽

我能夠了解你的考量 不過,考慮到現行大多 Web API,在回傳 JSON 型態資料時,會採用 JSON Response 而非 plain text, 我建議直接改用 JSONResponse,並將回傳的 json.dumps(json_response) 對應修改為 json_response

另外,測試發現 entities 部份回傳為

"entities": [
    "(24, 30, 'CARDINAL', '59,000')",
    "(34, 38, 'CARDINAL', '5.9萬')"
]

與 PR 內文描述不符,也請協助確認與修改

johnroyer commented 4 months ago

再麻煩你確認,謝謝

jyhsu2000 commented 4 months ago

LGTM 😎