ARC130

概览
在实验室挑战赛中,我们会为您提供一个场景和一系列任务。您将使用从课程的各个实验中学到的技能自行确定如何完成这些任务,而不是按照分步说明进行操作。自动评分系统(显示在本页面中)会提供有关您是否已正确完成任务的反馈。
在您参加实验室挑战赛期间,我们不会再教授新的 Google Cloud 概念知识。您需要拓展所学的技能,例如通过更改默认值和查看并研究错误消息来更正您自己所犯的错误。
要想获得满分,您必须在该时间段内成功完成所有任务!
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 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 密钥,以便在其他任务中使用。
点击检查我的进度,以验证是否完成了以下目标:
创建 API 密钥
任务 2. 设置 Google 文档并调用 Natural Language API
在本任务中,您需要设置 Google 文档以使用 Natural Language API,识别 Google 文档中选定文本的情感,并根据情感类型突出显示相应部分。
文本以红色突出显示表示负面情感,绿色表示正面情感,黄色表示中性情感。
-
创建一个新的 Google 文档。
-
在 Apps 脚本中使用以下代码。在 retrieveSentiment 函数中,将“your key here”替换为来自 Google Cloud 控制台的实际 API 密钥。
/**
* @OnlyCurrentDoc
*
* 上述注释指示 Apps 脚本将此附加组件的文件访问范围
* 限制为当前文档。它指定该附加组件只会
* 尝试读取或修改使用该附加组件的文档,
* 而不会访问用户的所有文件。向用户显示的授权请求消息
* 将反映这一受限范围。
*/
/**
* 在打开文档时,在 Google Docs 界面中创建一个
* 菜单项。
*
*/
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"; // Replace with your actual API key
var apiEndpoint = "https://language.googleapis.com/v1/documents:analyzeSentiment?key=" + apiKey;
// Create a structure with the text, its language, its type,
// and its encoding
var docDetails = {
language: 'en-us',
type: 'PLAIN_TEXT',
content: line
};
var nlData = {
document: docDetails,
encodingType: 'UTF8'
};
// Package all of the options and the data together for the call
var nlOptions = {
method : 'post',
contentType: 'application/json',
payload : JSON.stringify(nlData)
};
// And make the call
var response = UrlFetchApp.fetch(apiEndpoint, nlOptions);
var data = JSON.parse(response);
var sentiment = 0.0;
// Ensure all pieces were in the returned value
if (data && data.documentSentiment
&& data.documentSentiment.score){
sentiment = data.documentSentiment.score;
}
return sentiment;
}
- 向文档中添加文本。您可以使用来自查尔斯·狄更斯的小说《双城记》中的示例:
点击检查我的进度,以验证是否完成了以下目标:
设置 Google 文档并调用 Natural Language API
任务 3. 使用 Natural Language API 分析语法和词性
要完成本任务,请通过 SSH 连接到已为您预配置的名为 的虚拟机实例。
- 使用以下代码创建一个名为
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 的文件中。
点击检查我的进度,以验证是否完成了以下目标:
使用 Natural Language API 分析语法和词性
任务 4. 执行多语言自然语言处理
要完成本任务,请通过 SSH 连接到已为您预配置的名为 的虚拟机实例。
- 使用以下代码创建一个名为
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 的文件中。
点击检查我的进度,以验证是否完成了以下目标:
执行多语言自然语言处理
恭喜!
恭喜!您已成功调用 Natural Language API,对 Google 文档中的文本进行了情感分析,并分析了语法和词性。

Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 7 月 17 日
上次测试实验的时间:2024 年 7 月 17 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。