吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1949|回复: 6
收起左侧

[其他转载] 基于阿里云NLP基础服务的parseNLP_Go语言实现

[复制链接]
yangxiaodi 发表于 2022-1-6 00:35
本帖最后由 yangxiaodi 于 2022-1-6 00:39 编辑

parseNLP

前置知识

  • Go语言时间格式化

    • 方法一:使用Format()函数

    • Format()函数,其字符串的格式是特定的"2006-01-02 15:04:05",我们在使用的时候可以根据需求对其更改

    • func getTime() {
            t := time.Now()
            // 2022-01-05T17:12:12Z
            s := t.Format("2006-01-02T15:04:05Z")
            fmt.Println(s)
      }
    • 方法二:使用格式化输出

    • 用格式化输出,时间没有前导零

    • func getTime() {
            t := time.Now()
            // 2022-1-5T17:11:45Z
            s := fmt.Sprintf("%d-%d-%dT%d:%d:%dZ", t.Year(),
                    t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
            fmt.Println(s)
      }
  • Go语言获取UTC时间

    • time.Now().UTC()
  • Go语言生成唯一随机数,基于go-basic/uuid

    • import "github.com/go-basic/uuid"
      
      func getRandom() string {
          uuid := uuid.New()        // 生成一个uuid
          for i := 0; i < len(uuid); i++ {
                  if uuid[i] == '-' {
                          uuid = uuid[:i] + uuid[i+1:]
                  }
          }        // 删除uuid中的 '-'
          return uuid
      }
  • HmacSHA1 的计算

    • func HmacSHA1(key string, data string) []byte {
         mac := hmac.New(sha1.New, []byte(key))
         mac.Write([]byte(data))
         return mac.Sum(nil)
      }

项目代码

  •     package main
    
        import (
                "crypto/hmac"
                "crypto/sha1"
                "encoding/base64"
                "encoding/json"
                "fmt"
                "github.com/go-basic/uuid"
                "io/ioutil"
                "net/http"
                url2 "net/url"
                "time"
        )
    
        const accessKeyId = "You_accessKeyId"
    
        const accessKeySecret = "You_accessKeySecret"
    
        // 2013-01-10T12:00:00Z
        func getTime() string {
                return time.Now().UTC().Format("2006-01-02T15:04:05Z")
        }
    
        // 唯一随机数
        func getRandom() string {
                uuid := uuid.New()
                for i := 0; i < len(uuid); i++ {
                        if uuid[i] == '-' {
                                uuid = uuid[:i] + uuid[i+1:]
                        }
                }
                return uuid
        }
    
        // HmacSHA1 的计算
        func HmacSHA1(key string, data string) []byte {
                mac := hmac.New(sha1.New, []byte(key))
                mac.Write([]byte(data))
                return mac.Sum(nil)
        }
    
        func parseNLP(text string) string {
                url := "http://alinlp.cn-hangzhou.aliyuncs.com/"
    
                param := url2.Values{}
                param.Add("AccessKeyId", accessKeyId)
                param.Add("Action", "GetSaChGeneral")
                param.Add("Format", "json")
                param.Add("ServiceCode", "alinlp")
                param.Add("SignatureMethod", "HMAC-SHA1")
                param.Add("SignatureNonce", getRandom())
                param.Add("SignatureVersion", "1.0")
                param.Add("Text", text)
                param.Add("Timestamp", getTime())
                param.Add("TokenizerId", "GENERAL_CHN")
                param.Add("Version", "2020-06-29")
    
                stringToSign := url2.QueryEscape(param.Encode())
                stringToSign = "GET&%2F&" + stringToSign
    
                secret := accessKeySecret + "&"
                sig := base64.StdEncoding.EncodeToString(HmacSHA1(secret, stringToSign))
    
                param.Add("Signature", sig)
    
                u, err := url2.ParseRequestURI(url)
                if err != nil {
                        panic(err)
                }
                u.RawQuery = param.Encode()
    
                return u.String()
        }
    
        func getResult(url string) string {
                resp, err := http.Get(url)
                if err != nil {
                        panic(err)
                }
                defer resp.Body.Close()
    
                body, err := ioutil.ReadAll(resp.Body)
                if err != nil {
                        panic(err)
                }
    
                m0 := struct {
                        Data string `json:"Data"`
                }{}
                m1 := struct {
                        Result struct {
                                Sentiment string `json:"sentiment"`
                        } `json:"result"`
                }{}
                err = json.Unmarshal([]byte(body), &m0)
                if err != nil {
                        panic(err)
                }
                err = json.Unmarshal([]byte(m0.Data), &m1)
                if err != nil {
                        panic(err)
                }
                return m1.Result.Sentiment
        }
    
        func main() {
                text := "我不是不讨厌你,我是真的不想再见到你"
                url := parseNLP(text)
                result := getResult(url)
    
                fmt.Println(text, ": 是一个", result, "的词汇")
        }

结语

需要自行前往阿里云NLP平台获取accessKeyIdaccessKeySecret
搞了个大概,核心都实现了,就不想再给他包装了,大家可以自己弄一下



cc68fd7c51094041854cca4e56af2ab.png cd77ab3d6619b9d9fc2285d87a81337.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

PLFJOB 发表于 2022-1-6 08:28
学习了,谢谢分享
slbcmgn 发表于 2022-1-6 09:00
liu流年 发表于 2022-1-6 10:09
huyifan311 发表于 2022-1-6 13:24
感谢楼主的热心分享
hiodis 发表于 2022-1-6 17:38
Go语言实现  不错
sordar 发表于 2022-1-6 20:30
有点意思,不过手头没有阿里云账号,到时候试试看转成AWS的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-13 03:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表