ARC130

總覽
在挑戰研究室中,您會在特定情境下完成一系列任務。挑戰研究室不會提供逐步說明,您將運用從課程研究室學到的技巧,自行找出方法完成任務!自動評分系統 (如本頁所示) 將根據您是否正確完成任務來提供意見回饋。
在您完成任務的期間,挑戰研究室不會介紹新的 Google Cloud 概念。您須靈活運用所學技巧,例如變更預設值或詳讀並研究錯誤訊息,解決遇到的問題。
若想滿分達標,就必須在時限內成功完成所有任務!
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
挑戰情境
您最近加入一間公司,擔任某團隊的初級雲端工程師。公司指派一項機器學習 (ML) 專案給您,客戶的要求之一,是使用 Google Cloud 的 Cloud Natural Language API 服務完成專案。
您應具備完成下列工作所需的技能與知識。
挑戰內容
在這項挑戰中,您需要設定 Google 文件,並對顧客評論執行情緒分析、使用 Natural Language API 分析語法和詞性,以及建立非英文的 Natural Language API 要求。
您需要完成下列動作:
- 建立 API 金鑰。
- 設定 Google 文件並呼叫 Natural Language API。
- 使用 Natural Language API 分析語法和詞性。
- 執行多語言自然語言處理。
在本挑戰實驗室,我們已設定好虛擬機器 (VM) 執行個體 ,供您完成工作 3 至 4。
過程中請遵守下列規則:
- 確認已成功啟用所有必要 API,例如 Cloud Natural Language API。
各項工作的詳細說明如下,祝您好運!
工作 1:建立 API 金鑰
-
在這項工作中,您需要建立 API 金鑰,供傳送要求至 Natural Language API 時使用。
-
儲存 API 金鑰,方便用於其他工作。
點選「Check my progress」,確認目標已達成。
建立 API 金鑰
工作 2:設定 Google 文件並呼叫 Natural Language API
在這項工作中,您需要設定 Google 文件,以利使用 Natural Language API 辨識 Google 文件中所選文字的情緒,並根據情緒標示部分文字。
負面情緒的文字標上紅色,正面情緒的文字標上綠色,中性情緒的文字則標上黃色。
-
建立新的 Google 文件。
-
在 Apps Script 使用下列程式碼,並將 retrieveSentiment 函式中的「your key here」替換成 Google Cloud 控制台顯示的實際 API 金鑰。
/**
* @OnlyCurrentDoc
*
* 上述註解會指示 Apps Script 限制這個外掛程式的
* 檔案存取範圍,並指出這個外掛程式只會
* 嘗試讀取或修改外掛程式所在檔案的內容,
* 而非使用者的所有檔案。向使用者顯示的授權要求訊息
* 會反映這個有限的範圍。
*/
/**
* 在文件開啟時,於 Google 文件 UI
* 建立選單項目。
*
*/
function onOpen() {
var ui = DocumentApp.getUi();
ui.createMenu('Natural Language Tools')
.addItem('Mark Sentiment', 'markSentiment')
.addToUi();
}
/**
* 取得使用者選取的文字,並根據情緒標示:
* 正面情緒標為綠色、負面情緒為紅色、
* 中性情緒為黃色。
*
*/
function markSentiment() {
var POSITIVE_COLOR = '#00ff00'; // 情緒的顏色
var NEGATIVE_COLOR = '#ff0000';
var NEUTRAL_COLOR = '#ffff00';
var NEGATIVE_CUTOFF = -0.2; // 情緒的閾值
var POSITIVE_CUTOFF = 0.2;
var selection = DocumentApp.getActiveDocument().getSelection();
if (selection) {
var string = getSelectedText();
var sentiment = retrieveSentiment(string);
// 選取合適的顏色
var color = NEUTRAL_COLOR;
if (sentiment <= NEGATIVE_CUTOFF) {
color = NEGATIVE_COLOR;
}
if (sentiment >= POSITIVE_CUTOFF) {
color = POSITIVE_COLOR;
}
// 標示文字
var elements = selection.getSelectedElements();
for (var i = 0; i < elements.length; i++) {
if (elements[i].isPartial()) {
var element = elements[i].getElement().editAsText();
var startIndex = elements[i].getStartOffset();
var endIndex = elements[i].getEndOffsetInclusive();
element.setBackgroundColor(startIndex, endIndex, color);
} else {
var element = elements[i].getElement().editAsText();
foundText = elements[i].getElement().editAsText();
foundText.setBackgroundColor(color);
}
}
}
}
/**
* 傳回字串包含所選文字內容。
* 如未選取任何文字,則傳回空白字串。
*/
function getSelectedText() {
var selection = DocumentApp.getActiveDocument().getSelection();
var string = "";
if (selection) {
var elements = selection.getSelectedElements();
for (var i = 0; i < elements.length; i++) {
if (elements[i].isPartial()) {
var element = elements[i].getElement().asText();
var startIndex = elements[i].getStartOffset();
var endIndex = elements[i].getEndOffsetInclusive() + 1;
var text = element.getText().substring(startIndex, endIndex);
string = string + text;
} else {
var element = elements[i].getElement();
// 只翻譯可做為文字編輯的元素;
// 跳過圖片和其他非文字元素。
if (element.editAsText) {
string = string + element.asText().getText();
}
}
}
}
return string;
}
/** 傳入字串後,將呼叫 Natural Language API 並擷取
* 該字串的情緒。情緒是介於
* -1 到 1 之間的實數,其中 -1 代表極度負面的情緒,
* 1 代表極度正面的情緒。
*/
function retrieveSentiment(line) {
var apiKey = "your key here"; // 替換為實際取得的 API 金鑰
var apiEndpoint = "https://language.googleapis.com/v1/documents:analyzeSentiment?key=" + apiKey;
// 建立結構,須包含文字、語言、類型
// 和編碼
var docDetails = {
language: 'en-us',
type: 'PLAIN_TEXT',
content: line
};
var nlData = {
document: docDetails,
encodingType: 'UTF8'
};
// 將所有選項和資料包裝起來以供呼叫
var nlOptions = {
method : 'post',
contentType: 'application/json',
payload : JSON.stringify(nlData)
};
// 呼叫
var response = UrlFetchApp.fetch(apiEndpoint, nlOptions);
var data = JSON.parse(response);
var sentiment = 0.0;
// 確保所有部分都包含在傳回的值中
if (data && data.documentSentiment
&& data.documentSentiment.score){
sentiment = data.documentSentiment.score;
}
return sentiment;
}
- 在文件中新增文字,例如從狄更斯的小說《雙城記》中節錄一段內容。
點選「Check my progress」,確認目標已達成。
設定 Google 文件並呼叫 Natural Language API
工作 3:使用 Natural Language API 分析語法和詞性
透過 SSH 連線至我們為您佈建的 VM 執行個體 ,以完成這項工作。
- 使用下方程式碼建立名為
analyze-request.json 的 JSON 檔案。
{
"document":{
"type":"PLAIN_TEXT",
"content": "Google, headquartered in Mountain View, unveiled the new Android phone at the Consumer Electronic Show. Sundar Pichai said in his keynote that users love their new Android phones."
},
"encodingType": "UTF8"
}
-
使用 curl 指令將要求 (以及在工作 1 儲存的 API 金鑰環境變數) 傳遞至 Natural Language API,或使用 gcloud ML 指令分析語法。
-
將回應儲存至名為 analyze-response.txt 的檔案。
點選「Check my progress」,確認目標已達成。
使用 Natural Language API 分析語法和詞性
工作 4:執行多語言自然語言處理
透過 SSH 連線至我們為您佈建的 VM 執行個體 ,以完成這項工作。
- 使用下方程式碼建立名為
multi-nl-request.json 的 JSON 檔案,這段程式碼包含法文句子。
{
"document":{
"type":"PLAIN_TEXT",
"content":"Le bureau japonais de Google est situé à Roppongi Hills, Tokyo."
}
}
-
使用 curl 指令將要求 (以及在工作 1 儲存的 API 金鑰環境變數) 傳遞至 Natural Language API,或使用 gcloud ML 指令分析語法。
-
將輸出內容儲存至名為 multi-response.txt 的檔案。
點選「Check my progress」,確認目標已達成。
執行多語言自然語言處理
恭喜!
恭喜!您已成功呼叫 Natural Language API,並對 Google 文件中的文字執行情緒分析,以及分析語法和詞性。

Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 7 月 17 日
實驗室上次測試日期:2024 年 7 月 17 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。