运用python探求谷歌自然言语API

图灵汇官网

谷歌如何利用API分类网站及优化搜索结果?

通过对谷歌开放API的研究,我们可以了解到一些关于其如何分类网站和优化搜索结果的线索。作为一名技术爱好者,我一直致力于探索如何利用数据来了解谷歌是如何对网站进行分级的。最近,我对谷歌的自然语言API进行了研究,看看它是否能更好地揭示网站内容的分类方式。

尽管有许多开源的自然语言处理工具,但我更关注谷歌的工具,因为这些工具可能在其他产品中使用相同的技术,比如搜索引擎。本文将介绍谷歌的自然语言API,并探讨一般自然语言处理任务的应用,以及如何利用这些工具来指导网站内容的创建。

了解数据类型

在深入了解之前,我们需要了解谷歌NLP API返回的数据类型。

实体

实体是指在现实生活中可以找到的文字组合。命名实体识别是自然语言处理中的一项挑战,因为有些工具需要查看整个内容才能理解词语的用途。例如,“铅”这个词可以指金属铅,也可以指引导的意思。谷歌的实体类型分为12种,还有第13种类型用于未分类的情况,称为“未知”。一些实体与维基百科的文章相关联,表明知识图谱对数据有影响。每个实体都附带一个显著性评分,反映其与提供的文本的相关性。

情感

情感指的是文档中对某些事物的态度和观点。情感评分范围从-1到1,数值越大代表情感强度越高。

语法

语法解析包括词形还原、词性标注和依存树分析,这些都是自然语言处理的基础部分。

分类

分类任务旨在将内容归类到具体的行业或主题类别,每个类别的置信度评分在0到1之间。这些类别与谷歌广告和其他工具使用的受众和网站类别相似。

数据采集

为了获取样本数据,我使用了Google的Search Console API,收集了特定时间段内的搜索查询和对应的网址。Search Console是一个报告工具,可以显示人们在使用Google搜索时访问的网站页面。这个开源的Jupyter笔记本允许提取关于网站的类似数据。在这个案例中,我从2019年1月1日至6月1日期间生成的数据中提取了信息。

数据集包含了2,969个页面和7,144个查询的信息,这些查询在Google搜索结果中展示了网站的页面。大多数页面只收到了少量点击,因为该网站主要专注于长尾关键词(更具体,通常更长的关键词),而非短尾关键词(更普遍,搜索量更高的关键词)。

为了减少数据集的大小并只保留表现良好的页面,我将数据集限制为在此期间至少获得20次展示的网页。以下是经过筛选后的723个页面的点击分布情况。

使用Google自然语言API

为了测试API,我编写了一个Python脚本,使用google-cloud-language库。以下是一些基本步骤:

  1. 创建一个新的虚拟环境并安装必要的库。
  2. 使用API客户端从URL中提取HTML。
  3. 将HTML传递给自然语言API,获取情感、实体和分类信息。

以下是一个简单的Python脚本示例:

```python

导入所需库

import requests import json from google.cloud import language from google.oauth2 import service_account from google.cloud.language import enums from google.cloud.language import types

初始化语言API客户端

client = language.LanguageServiceClient.fromserviceaccount_json('services.json')

定义函数

def pullgooglenlp(client, url, invalidtypes=['OTHER']): html = loadtextfrom_url(url) if not html: return None

document = types.Document(content=html, type=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

result = {}
result['sentiment'] = []
result['entities'] = []
result['categories'] = []

if sentiment:
    result['sentiment'] = [{'magnitude': sentiment.magnitude, 'score': sentiment.score}]

for entity in entities:
    if entity.type_ not in [enums.Entity.Type[type_] for type_ in invalid_types]:
        result['entities'].append({
            'name': entity.name,
            'type': enums.Entity.Type(entity.type_).name,
            'salience': entity.salience,
            'wikipedia_url': entity.metadata.get('wikipedia_url', '-')
        })

return result

def loadtextfromurl(url): try: print(f"Extracting text from: {url}") response = requests.get(url, timeout=20) text = response.text if response.statuscode == 200 and len(text) > 0: return text return None except Exception as e: print(f'Problem with url: {url}') return None

调用API

url = "https://news.ifeng.com/c/7omapIrZobG" result = pull_googlenlp(client, url) print(result) ```

分析数据

利用这些功能,可以从给定页面的HTML中提取数据并传递给自然语言API。我可以在723个URL中运行一些分析。首先,查看所有页面返回的顶级类别数量,了解与网站相关的类别。

分类

以下是一些页面的分类结果: - URL1:最高类别为法律与政府/法律(0.5099999904632568) - URL3:最高类别为互联网和电信/移动和无线(0.6100000143051147) - URL4:最高类别为计算机和电子/软件(0.5799999833106995) - URL5:最高类别为互联网和电信/移动和无线/移动应用和附件(0.75) - URL7:最高类别为计算机/电子/软件/商业和生产力软件(0.7099999785423279) - URL8:最高类别为法律与政府/法律(0.8999999761581421) - URL9:最高类别为参考/通用参考/表格指南和模板(0.6399999856948853)

这些数字表示谷歌对页面内容与该类别相关性的信心程度。第八个结果的置信度高于第一个结果,但这似乎并不是决定排名的主要因素。此外,类别过于宽泛,无法用于特定的搜索主题。

通过查看排名位置来评估平均置信度,发现两者之间没有明显的相关性。这种方法有助于大规模审查网站,确保内容类别看起来合适,避免样板或销售内容导致页面与次要专业领域相关联。

情感

情感分析显示,所有页面的情感评分集中在0.1和0.2之间,几乎处于中性状态。根据直方图,情感评分并没有提供太多价值。对于新闻或观点类网站,衡量特定页面的情感与中位数的相关性可能会更有意义。

实体

实体是API中最有趣的部分。以下是所有页面中顶级实体的选择,按显著性排序。Google能够区分不同上下文中的术语,有时会出现错误。

查看每个实体类型,发现一些实体类型始终返回零显著性。以下是显著性和页面最佳排名之间的相关性分析结果:

  • “消费品”实体类型的显著性相关系数最高,为0.15854。
  • “人”实体的相关系数为-0.15483,排名靠后的页面效果最好。

实体数据中另一个有趣的部分是,被标记为“消费品”的实体通常出现在知识结果中,即谷歌搜索结果右侧的块。在我们的数据集中,5.8%的消费品实体名称与谷歌的知识结果一致。这意味着,如果在谷歌中搜索某个术语或短语,页面左侧的块可能会提供一个很好的机会来优化页面,使其在搜索结果中脱颖而出。

总结

本文介绍了谷歌的自然语言API,并探讨了其对网站所有者的价值。关键内容包括: - 利用Python和Jupyter笔记本快速提取和测试API值的假设。 - 使用分类API检查网站内容是否属于正确的主题类别。 - 竞争对手网站上的分类分析可以帮助调整或创建内容。 - 对于示例网站,谷歌的情感评分似乎不太有趣,但对于新闻或观点类网站,这可能是一个有价值的指标。 - 实体数据提供了更细粒度的主题级别的网站整体视图,有助于竞争内容分析。 - 实体可以帮助定义内容与谷歌知识块或发现结果的对齐机会。5.8%的实体名称与谷歌的知识结果一致,为优化页面提供了机会,使其在搜索结果中更加突出。

希望这些信息对你有所帮助!

本文来源: 图灵汇 文章作者: