[Day 11] Google Natural Language - 2

今天開始使用Natural3Language API,一樣要先Enable API跟下載credential json。

忘記的人可以看這系列第三天的文章回想一下。

在這之前我先重構一下原先的main.go,讓我加上參數去呼叫不同天的Demo api:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Usage: `docker run -it golang ./app [DayXX]`
func main() {
arg := os.Args[1]

if arg == "Day3" {
vision.DetectLabel(os.Stdout, "./testdata/furniture.jpg")
} else if arg == "Day4" {
vision.DetectText(os.Stdout, "./testdata/las-vegas.jpg")
vision.DetectFaces(os.Stdout, "./testdata/face.jpg")
} else if arg == "Day7" {
video.DemoCode(os.Stdout, "gs://cloud-samples-data/video/cat.mp4")
} else if arg == "Day8" {
video.ShotChangeURI(os.Stdout, "gs://cloud-samples-data/video/gbikes_dinosaur.mp4")
video.TextDetectionGCS(os.Stdout, "gs://python-docs-samples-tests/video/googlework_short.mp4")
} else if arg == "Day11" {
language.DemoCode(os.Stdout, "Hello World")
}
}

day 11 我就直接呼叫時傳入Hello World的字串,然後把Demo code改成module的方式,像下面這樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package natural_language

import (
"context"
"fmt"
"io"
"log"

language "cloud.google.com/go/language/apiv1"
languagepb "google.golang.org/genproto/googleapis/cloud/language/v1"
)

func DemoCode(w io.Writer, text string) error {
ctx := context.Background()

// Creates a client.
client, err := language.NewClient(ctx)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
return err
}

// Detects the sentiment of the text.
sentiment, err := client.AnalyzeSentiment(ctx, &languagepb.AnalyzeSentimentRequest{
Document: &languagepb.Document{
Source: &languagepb.Document_Content{
Content: text,
},
Type: languagepb.Document_PLAIN_TEXT,
},
EncodingType: languagepb.EncodingType_UTF8,
})
if err != nil {
log.Fatalf("Failed to analyze text: %v", err)
return err
}

fmt.Fprintf(w, "Text: %v\n", text)
if sentiment.DocumentSentiment.Score >= 0 {
fmt.Fprintln(w, "Sentiment: positive")
} else {
fmt.Fprintln(w, "Sentiment: negative")
}
return nil
}

languagepb詳細文件可以看這邊:https://godoc.org/google.golang.org/genproto/googleapis/cloud/language/v1
快速入門對這方面的連結還是提供不是很詳盡…

Type可以是Document_PLAIN_TEXT也可以是Document_HTML,但沒找到太多Document_HTML的敘述,在Python Demo裡找到這段:

如要分類網頁內容,請將網頁的來源 HTML 做為 text 進行傳遞,並將 type 參數設為 language.enums.Document.Type.HTML
golang則為Document_HTML

至於Source這邊是傳入Document_Content並帶上參數{Content: text},也可以是傳入Document_GcsContentUri然後帶上{GcsContentUri: gcsURI},以gcs content為資料分析。

還沒實際測過分析HTML會有什麼結果,今天先來分析文字。來看看Output:

1
2
Text: Hello World
Sentiment: positive

看起來大家學程式的第一個作業Hello World是正向情緒的(也這樣大家才學得下去?)好囉,今天的github在這邊:https://github.com/josephMG/ithelp-2019/tree/Day-11
OK,今天工作提早結束,謝謝大家!

開始越來越擔心內容不夠了…