怎么用 Python 学习 Google 的自然语言 API

发布时间:2021-06-17 18:08:14 作者:chen
来源:亿速云 阅读:132

这篇文章主要讲解了“怎么用 Python 学习 Google 的自然语言 API”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用 Python 学习 Google 的自然语言 API”吧!


作为一名技术性的搜索引擎优化人员,我一直在寻找以新颖的方式使用数据的方法,以更好地了解 Google 如何对网站进行排名。我最近研究了 Google 的 自然语言 API 能否更好地揭示 Google 是如何分类网站内容的。

尽管有 开源 NLP 工具,但我想探索谷歌的工具,前提是它可能在其他产品中使用同样的技术,比如搜索。本文介绍了 Google 的自然语言 API,并探究了常见的自然语言处理(NLP)任务,以及如何使用它们来为网站内容创建提供信息。

了解数据类型

首先,了解 Google 自然语言 API 返回的数据类型非常重要。

实体

实体Entities是可以与物理世界中的某些事物联系在一起的文本短语。命名实体识别Named Entity Recognition(NER)是 NLP 的难点,因为工具通常需要查看关键字的完整上下文才能理解其用法。例如,同形异义字homographs拼写相同,但是具有多种含义。句子中的  “lead” 是指一种金属:“铅”(名词),使某人移动:“牵领”(动词),还可能是剧本中的主要角色(也是名词)?Google 有 12  种不同类型的实体,还有第 13 个名为 “UNKNOWN”(未知)的统称类别。一些实体与维基百科的文章相关,这表明 知识图谱 对数据的影响。每个实体都会返回一个显著性分数,即其与所提供文本的整体相关性。

怎么用 Python 学习 Google 的自然语言 API

实体

情感

情感Sentiment,即对某事的看法或态度,是在文件和句子层面以及文件中发现的单个实体上进行衡量。情感的得分score范围从 -1.0(消极)到 1.0(积极)。幅度magnitude代表情感的非归一化non-normalized强度;它的范围是 0.0 到无穷大。

怎么用 Python 学习 Google 的自然语言 API

情感

语法

语法Syntax解析包含了大多数在较好的库中常见的 NLP 活动,例如 词形演变lemmatization词性标记part-of-speech tagging 和 依赖树解析dependency-tree parsing。NLP 主要处理帮助机器理解文本和关键字之间的关系。语法解析是大多数语言处理或理解任务的基础部分。

怎么用 Python 学习 Google 的自然语言 API

语法

分类

分类Categories是将整个给定内容分配给特定行业或主题类别,其置信度confidence得分从 0.0 到 1.0。这些分类似乎与其他 Google 工具使用的受众群体和网站类别相同,如 AdWords。

怎么用 Python 学习 Google 的自然语言 API

分类

提取数据

现在,我将提取一些示例数据进行处理。我使用 Google 的 搜索控制台 API 收集了一些搜索查询及其相应的网址。Google 搜索控制台是一个报告人们使用 Google Search 查找网站页面的术语的工具。这个 开源的 Jupyter 笔记本 可以让你提取有关网站的类似数据。在此示例中,我在 2019 年 1 月 1 日至 6 月 1 日期间生成的一个网站(我没有提及名字)上提取了 Google 搜索控制台数据,并将其限制为至少获得一次点击(而不只是曝光impressions)的查询。

该数据集包含 2969 个页面和在 Google Search 的结果中显示了该网站网页的 7144 条查询的信息。下表显示,绝大多数页面获得的点击很少,因为该网站侧重于所谓的长尾(越特殊通常就更长尾)而不是短尾(非常笼统,搜索量更大)搜索查询。

怎么用 Python 学习 Google 的自然语言 API

所有页面的点击次数柱状图

为了减少数据集的大小并仅获得效果最好的页面,我将数据集限制为在此期间至少获得 20 次曝光的页面。这是精炼数据集的按页点击的柱状图,其中包括 723 个页面:

怎么用 Python 学习 Google 的自然语言 API

部分网页的点击次数柱状图

在 Python 中使用 Google 自然语言 API 库

要测试 API,在 Python 中创建一个利用 google-cloud-language 库的小脚本。以下代码基于 Python 3.5+。

首先,激活一个新的虚拟环境并安装库。用环境的唯一名称替换 <your-env> 。

virtualenv <your-env>source <your-env>/bin/activatepip install --upgrade google-cloud-languagepip install --upgrade requests

该脚本从 URL 提取 HTML,并将 HTML 提供给自然语言 API。返回一个包含 sentiment、 entities 和 categories 的字典,其中这些键的值都是列表。我使用 Jupyter 笔记本运行此代码,因为使用同一内核注释和重试代码更加容易。

# Import needed librariesimport requestsimport json from google.cloud import languagefrom google.oauth3 import service_accountfrom google.cloud.language import enumsfrom google.cloud.language import types # Build language API client (requires service account key)client = language.LanguageServiceClient.from_service_account_json('services.json') # Define functionsdef pull_googlenlp(client, url, invalid_types = ['OTHER'], **data):           html = load_text_from_url(url, **data)           if not html:        return None           document = types.Document(        content=html,        type=language.enums.Document.Type.HTML )         features = {'extract_syntax': True,                'extract_entities': True,                'extract_document_sentiment': True,                'extract_entity_sentiment': True,                'classify_text': False                }           response = client.annotate_text(document=document, features=features)        sentiment = response.document_sentiment        entities = response.entities           response = client.classify_text(document)        categories = response.categories                 def get_type(type):        return client.enums.Entity.Type(entity.type).name           result = {}           result['sentiment'] = []            result['entities'] = []        result['categories'] = []         if sentiment:        result['sentiment'] = [{ 'magnitude': sentiment.magnitude, 'score':sentiment.score }]                 for entity in entities:        if get_type(entity.type) not in invalid_types:                result['entities'].append({'name': entity.name, 'type': get_type(entity.type), 'salience': entity.salience, 'wikipedia_url': entity.metadata.get('wikipedia_url', '-')  })                 for category in categories:        result['categories'].append({'name':category.name, 'confidence': category.confidence})                          return result  def load_text_from_url(url, **data):         timeout = data.get('timeout', 20)           results = []           try:                 print("Extracting text from: {}".format(url))        response = requests.get(url, timeout=timeout)         text = response.text        status = response.status_code         if status == 200 and len(text) > 0:                return text                 return None                  except Exception as e:        print('Problem with url: {0}.'.format(url))        return None

要访问该 API,请按照 Google 的 快速入门说明 在 Google 云主控台中创建一个项目,启用该 API 并下载服务帐户密钥。之后,你应该拥有一个类似于以下内容的 JSON 文件:

怎么用 Python 学习 Google 的自然语言 API

services.json 文件

命名为 services.json,并上传到项目文件夹。

然后,你可以通过运行以下程序来提取任何 URL(例如 Opensource.com)的 API 数据:

url = "https://opensource.com/article/19/6/how-ssh-running-container"pull_googlenlp(client,url)

如果设置正确,你将看到以下输出:

怎么用 Python 学习 Google 的自然语言 API

拉取 API 数据的输出

为了使入门更加容易,我创建了一个 Jupyter 笔记本,你可以下载并使用它来测试提取网页的实体、类别和情感。我更喜欢使用 JupyterLab,它是 Jupyter 笔记本的扩展,其中包括文件查看器和其他增强的用户体验功能。如果你不熟悉这些工具,我认为利用 Anaconda 是开始使用 Python 和 Jupyter 的最简单途径。它使安装和设置 Python 以及常用库变得非常容易,尤其是在 Windows 上。

处理数据

使用这些函数,可抓取给定页面的 HTML 并将其传递给自然语言 API,我可以对 723 个 URL 进行一些分析。首先,我将通过查看所有页面中返回的顶级分类的数量来查看与网站相关的分类。

分类

怎么用 Python 学习 Google 的自然语言 API

来自示例站点的分类数据

这似乎是该特定站点的关键主题的相当准确的代表。通过查看一个效果最好的页面进行排名的单个查询,我可以比较同一查询在 Google 搜索结果中的其他排名页面。

上方括号中的数字表示 Google 对页面内容与该分类相关的置信度。对于相同分类,第八个结果比第一个结果具有更高的置信度,因此,这似乎不是定义排名相关性的灵丹妙药。此外,分类太宽泛导致无法满足特定搜索主题的需要。

通过排名查看平均置信度,这两个指标之间似乎没有相关性,至少对于此数据集而言如此:

怎么用 Python 学习 Google 的自然语言 API

平均置信度排名分布图

这两种方法对网站进行规模审查是有意义的,以确保内容类别易于理解,并且样板或销售内容不会使你的页面与你的主要专业知识领域无关。想一想,如果你出售工业用品,但是你的页面返回  “Marketing(销售)” 作为主要分类。似乎没有一个强烈的迹象表明,分类相关性与你的排名有什么关系,至少在页面级别如此。

情感

我不会在情感上花很多时间。在所有从 API 返回情感的页面中,它们分为两个区间:0.1 和 0.2,这几乎是中立的情感。根据直方图,很容易看出情感没有太大价值。对于新闻或舆论网站而言,测量特定页面的情感到中位数排名之间的相关性将是一个更加有趣的指标。

怎么用 Python 学习 Google 的自然语言 API

独特页面的情感柱状图

实体

在我看来,实体是 API 中最有趣的部分。这是在所有页面中按显著性salience(或与页面的相关性)选择的顶级实体。请注意,对于相同的术语(销售清单),Google 会推断出不同的类型,可能是错误的。这是由于这些术语出现在内容中的不同上下文中引起的。

怎么用 Python 学习 Google 的自然语言 API

示例网站的顶级实体

然后,我分别查看了每个实体类型,并一起查看了该实体的显著性与页面的最佳排名位置之间是否存在任何关联。对于每种类型,我匹配了与该类型匹配的顶级实体的显著性(与页面的整体相关性),按显著性排序(降序)。

有些实体类型在所有示例中返回的显著性为零,因此我从下面的图表中省略了这些结果。

怎么用 Python 学习 Google 的自然语言 API

显著性与最佳排名位置的相关性

“Consumer Good(消费性商品)” 实体类型具有最高的正相关性,皮尔森相关度Pearson correlation为  0.15854,尽管由于较低编号的排名更好,所以 “Person” 实体的结果最好,相关度为  -0.15483。这是一个非常小的样本集,尤其是对于单个实体类型,我不能对数据做太多的判断。我没有发现任何具有强相关性的值,但是  “Person” 实体最有意义。网站通常都有关于其首席执行官和其他主要雇员的页面,这些页面很可能在这些查询的搜索结果方面做得好。

继续,当从整体上看站点,根据实体名称和实体类型,出现了以下主题。

怎么用 Python 学习 Google 的自然语言 API

基于实体名称和实体类型的主题

我模糊了几个看起来过于具体的结果,以掩盖网站的身份。从主题上讲,名称信息是在你(或竞争对手)的网站上局部查看其核心主题的一种好方法。这样做仅基于示例网站的排名网址,而不是基于所有网站的可能网址(因为  Search Console 数据仅记录 Google 中展示的页面),但是结果会很有趣,尤其是当你使用像 Ahrefs 之类的工具提取一个网站的主要排名 URL,该工具会跟踪许多查询以及这些查询的 Google 搜索结果。

实体数据中另一个有趣的部分是标记为 “CONSUMER_GOOD” 的实体倾向于 “看起来” 像我在看到 “知识结果Knowledge Results”的结果,即页面右侧的 Google 搜索结果。

怎么用 Python 学习 Google 的自然语言 API

Google 搜索结果

在我们的数据集中具有三个或三个以上关键字的 “Consumer Good(消费性商品)” 实体名称中,有 5.8% 的知识结果与  Google 对该实体命名的结果相同。这意味着,如果你在 Google 中搜索术语或短语,则右侧的框(例如,上面显示 Linux  的知识结果)将显示在搜索结果页面中。由于 Google 会 “挑选”  代表实体的示例网页,因此这是一个很好的机会,可以在搜索结果中识别出具有唯一特征的机会。同样有趣的是,5.8% 的在 Google  中显示这些知识结果名称中,没有一个实体的维基百科 URL 从自然语言 API  中返回。这很有趣,值得进行额外的分析。这将是非常有用的,特别是对于传统的全球排名跟踪工具(如 Ahrefs)数据库中没有的更深奥的主题。

如前所述,知识结果对于那些希望自己的内容在 Google 中被收录的网站所有者来说是非常重要的,因为它们在桌面搜索中加强高亮显示。假设,它们也很可能与 Google Discover 的知识库主题保持一致,这是一款适用于 Android 和 iOS 的产品,它试图根据用户感兴趣但没有明确搜索的主题为用户浮现内容。

总结

本文介绍了 Google 的自然语言 API,分享了一些代码,并研究了此 API 对网站所有者可能有用的方式。关键要点是:

感谢各位的阅读,以上就是“怎么用 Python 学习 Google 的自然语言 API”的内容了,经过本文的学习后,相信大家对怎么用 Python 学习 Google 的自然语言 API这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. node.js有什么用
  2. 不到20行代码用Python做一个智能聊天机器人

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python api

上一篇:怎么用 Jupyter 学习 Python 字典

下一篇:Python迭代有什么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》