[Day 12] Google Natural Language - 3

今天來Google Natural Language第三篇,我本來想按照Natural Language裡分析情緒這個部分實作,可是看完以後發現它code有點短,只有下面這樣:

1
2
3
4
5
6
7
8
9
10
func analyzeSentimentFromGCS(ctx context.Context, gcsURI string) (*languagepb.AnalyzeSentimentResponse, error) {
return client.AnalyzeSentiment(ctx, &languagepb.AnalyzeSentimentRequest{
Document: &languagepb.Document{
Source: &languagepb.Document_GcsContentUri{
GcsContentUri: gcsURI,
},
Type: languagepb.Document_PLAIN_TEXT,
},
})
}

遲遲找不到適合的範例,恰巧看到Natural Language基礎知識有一個蓋茨堡宣言的範例,gcsURI是gs://cloud-samples-tests/natural-language/gettysburg.txt,我把gcsURI帶入gs://cloud-samples-tests/natural-language/gettysburg.txt,發現跑出來結果很難閱讀
output1.jpg

好吧,就照著之前Video跟Vision那樣,把它改寫得比較好閱讀一點:

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
func AnalyzeSentiment(gcsURI 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
}
op, err := client.AnalyzeSentiment(ctx, &languagepb.AnalyzeSentimentRequest{
Document: &languagepb.Document{
Source: &languagepb.Document_GcsContentUri{
GcsContentUri: gcsURI,
},
Type: languagepb.Document_PLAIN_TEXT,
},
})
if err != nil {
return err
}

fmt.Printf("Document Sentiment:\n")
fmt.Printf("\tScore: %.2f\n", op.DocumentSentiment.Score)
fmt.Printf("\tMagnitude: %.2f\n", op.DocumentSentiment.Magnitude)
fmt.Printf("Language: %q\n\n", op.Language)
for _, annotation := range op.Sentences {
text := annotation.GetText()
fmt.Printf("Text:\n")
fmt.Printf("\tContent: %s\n", text.Content)
fmt.Printf("\tSentiment: %q\n", annotation.Sentiment)
}

return nil
}

再丟入一樣的蓋茨堡宣言進去運算以後,我們再來看看漂亮的output。
output2.jpg

但我始終算不出Natural Language基礎知識裡的{score: 0.2, magnitude: 3.6}。靈機一動看看其他版本的宣言,來研究一下其他結果。
output3.jpg

嗯?都是蓋茨堡宣言,竟然結果不完全一樣,可以看到最後兩段gcs沒辨識出來,但wiki上的有結果,不過每個句子的比重差不多,可能是不同結構造成的誤差,剩下就看實際使用時的情境去做調整。

好了,今天是個很有實驗精神的一篇,測了不同的蓋茨堡宣言、改寫了範例程式。
今天就到這邊了,這是今天的Github: https://github.com/josephMG/ithelp-2019/tree/Day-12 。謝謝大家~