内容分类教程

受众群体

本教程旨在让您快速开始通过 Cloud Natural Language API 探索和开发应用。它专为熟悉基本编程的人设计,但即使没有太多编程知识,您也应该能够按照说明操作。阅读完本教程后,您应该能够根据参考文档创建您自己的基本应用。

本教程介绍使用 Python 代码的 Natural Language 应用。但我们的目的不是解说 Python 客户端库,而是说明如何调用 Natural Language API。Java 和 Node.js 中的应用本质上是相似的。请参阅 Natural Language API 示例,获取其他语言的示例(包括本教程中的示例)。

前提条件

本教程有几个前提条件:

概览

本教程引导您使用 classifyText 请求完成一个基本的 Natural Language 应用,该应用将内容归入带有置信度分数的各个类别,例如:

category: "/Internet & Telecom/Mobile & Wireless/Mobile Apps & Add-Ons"
confidence: 0.6499999761581421

如需查看所有可用类别标签的列表,请参阅类别

在本教程中,您将创建一个应用来执行以下任务:

  • 分类多个文本文件并将结果写入索引文件。
  • 处理输入查询文本以查找类似的文本文件。
  • 处理输入查询类别标签以查找类似的文本文件。

本教程使用维基百科的内容。您可以创建一个类似的应用来处理新闻文章,在线评论等内容。

源文件

您可以在 GitHub 上的 Python 客户端库示例中找到教程源代码。

本教程使用维基百科的示例源文本。您可以在 GitHub 项目的 resources/texts 文件夹中找到示例文本文件。

导入库

如需使用 Cloud Natural Language API,您必须从 google-cloud-language 库中导入 language 模块。language.types 模块包含创建请求所需的类。language.enums 模块用于指定输入文本的类型。本教程对纯文本内容 (language.enums.Document.Type.PLAIN_TEXT) 进行分类。

为了根据产生的内容分类计算文本之间的相似度,本教程使用 numpy 进行向量计算。

Python

如需了解如何安装和使用 Natural Language 的客户端库,请参阅 Natural Language 客户端库。 如需了解详情,请参阅 Natural Language Python API 参考文档

如需向 Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

import argparse
import json
import os

from google.cloud import language_v1
import numpy

第 1 步:内容分类

您可以使用 Python 客户端库向 Natural Language API 发出内容分类请求。Python 客户端库囊括了向 Natural Language API 请求及响应的详情。

本教程中的 classify 函数通过以下方式调用 Natural Language API classifyText 方法:首先创建 LanguageServiceClient 类的实例,然后调用 LanguageServiceClient 实例的 classify_text 方法。

本例中,教程中的 classify 函数仅对文本内容进行分类。您还可以通过以下方式对网页的内容进行分类:将网页的源 HTML 作为 text 传递,并将 type 参数设置为 language.enums.Document.Type.HTML

有关详情,请参阅分类内容。 如需详细了解 Natural Language 请求的结构,请参阅 Natural Language 参考文档

Python

如需了解如何安装和使用 Natural Language 的客户端库,请参阅 Natural Language 客户端库。 如需了解详情,请参阅 Natural Language Python API 参考文档

如需向 Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

def classify(text, verbose=True):
    """Classify the input text into categories."""

    language_client = language_v1.LanguageServiceClient()

    document = language_v1.Document(
        content=text, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    response = language_client.classify_text(request={"document": document})
    categories = response.categories

    result = {}

    for category in categories:
        # Turn the categories into a dictionary of the form:
        # {category.name: category.confidence}, so that they can
        # be treated as a sparse vector.
        result[category.name] = category.confidence

    if verbose:
        print(text)
        for category in categories:
            print("=" * 20)
            print("{:<16}: {}".format("category", category.name))
            print("{:<16}: {}"