
赞
踩
python的c语言api
作为技术搜索引擎优化器,我一直在寻找新颖的方式使用数据,以更好地了解Google如何对网站进行排名。 我最近调查了Google的自然语言API是否可以更好地告知Google如何对网站内容进行分类。
尽管有开放源代码的NLP工具 ,但我想在Google可能在其他产品(例如Search)中使用相同技术的前提下探索Google的工具。 本文介绍了Google的自然语言API,并探讨了常见的自然语言处理(NLP)任务以及如何将其用于通知网站内容的创建。
首先,了解Google自然语言API返回的数据类型非常重要。
实体是可以绑定到物理世界中某些事物的文本短语。 命名实体识别(NER)是NLP的难点,因为工具通常需要查看单词周围的完整上下文才能理解其用法。 例如,同形异义字拼写相同,但是具有多种含义。 句子中的“铅”是指导致某人移动的金属(名词)(动词)还是剧本中的主要角色(也是名词)? Google有12种不同类型的实体,还有第13个综合类别,称为“未知”。 一些实体与Wikipedia文章相关,暗示了知识图谱对数据的影响。 每个实体都返回一个显着性分数,这是其与所提供文本的整体相关性。
在文档和句子级别以及文档中发现的单个实体中,对情感,事物的看法或态度进行了衡量。 情绪的得分范围从-1.0(负)到1.0(正)。 大小代表情感的非标准化强度; 它的范围是0.0到无穷大。
语法分析包含在更好的库中发现的大多数常见NLP活动,例如lemmatization , 词性标记和依赖树分析 。 NLP主要涉及帮助机器理解文本和单词之间的关系。 语法分析是大多数语言处理或理解任务的基础部分。
类别将整个给定内容分配给特定行业或主题类别,其置信度得分为0.0到1.0。 这些类别似乎与其他Google工具(例如AdWords)使用的受众群体和网站类别相同。
该数据集包含有关2969页和7144条查询的信息,这些查询在Google搜索结果中显示了网站的页面。 下表显示,绝大多数页面获得的点击很少,因为该网站侧重于所谓的长尾(更具体,通常更长)而不是短尾(非常普遍,搜索量更大)搜索查询。
为了减少数据集的大小并仅获得效果最好的页面,我将数据集限制为在此期间至少获得20次展示的页面。 这是此精炼数据集的按页点击的直方图,其中包括723页:
要测试该API,请创建一个利用Python中的google-cloud-language库的小脚本。 以下代码是Python 3.5+。
首先,激活新的虚拟环境并安装库。 将<your-env>替换为环境的唯一名称。
-
-
-
-
-
-
- virtualenv
-
- < your-env
-
- >
-
-
- source
-
- < your-env
-
- > /bin/activate
-
-
- pip install --upgrade google-cloud-language
-
-
- pip install --upgrade requests
-
-
-

该脚本从URL提取HTML,并将HTML馈送到自然语言API。 它返回一个感言 , 实体和类别的字典,其中这些键的值都是列表。 我使用Jupyter笔记本来运行此代码,因为它使使用同一内核的批注和重试代码更加容易。
-
-
-
-
-
-
- # Import needed libraries
-
-
-
-
- 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
-
-
-
-
-
-
-
- # Build language API client (requires service account key)
-
-
- client
-
- = language.
-
- LanguageServiceClient .
-
- from_service_account_json
-
- (
-
- 'services.json'
-
- )
-
-
-
-
-
-
-
- # Define functions
-
-
-
-
- def 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 Cloud Console中创建项目,启用API并下载服务帐户密钥。 之后,您应该拥有一个类似于以下内容的JSON文件:
将其上载到名称为services.json的项目文件夹中。
然后,您可以通过运行以下命令为任何URL(例如Opensource.com)提取API数据:
-
-
-
-
-
-
- url
-
- =
-
- "https://opensource.com/article/19/6/how-ssh-running-container"
-
-
- pull_googlenlp
-
- ( client
-
- , url
-
- )
-
-
-
-

如果设置正确,您将看到以下输出:
为了使入门更加容易,我创建了一个Jupyter笔记本 ,您可以下载该笔记本并用于测试提取网页的实体,类别和情感。 我更喜欢使用JupyterLab ,它是Jupyter Notebook的扩展,其中包括文件查看器和其他增强的用户体验功能。 如果您不熟悉这些工具,我认为Anaconda是开始使用Python和Jupyter的最简单方法。 它使安装和设置Python以及公共库变得非常容易,尤其是在Windows上。
有了这些刮取给定页面HTML并将其传递给Natural Language API的函数,我可以对723个URL进行一些分析。 首先,我将通过查看所有页面中返回的顶级类别的数量来查看与网站相关的类别。
这似乎是该特定站点关键主题的相当准确的表示。 通过查看性能最高的页面之一进行排名的单个查询,我可以比较同一查询在Google结果中的其他排名页面。
上方括号中的数字表示Google对页面内容与该类别相关的信心。 对于相同类别,第八个结果比第一个结果具有更高的置信度,因此,这对于定义排名相关性似乎不是灵丹妙药。 此外,类别太宽泛,无法满足特定搜索主题的需要。
通过排名排名查看平均置信度,这两个指标之间似乎没有相关性,至少对于此数据集而言:
这两种方法都可以对网站进行大规模审查,以确保内容类别看起来合适,并且样板或销售内容不会使您的页面与您的主要专业知识领域无关。 考虑一下您是否出售工业用品,但是您的页面将“ 营销”作为主要类别。 似乎没有强烈的建议,即类别相关性至少与您在页面级别上的排名无关。
我不会花很多时间在情绪上。 在所有从API返回情感的页面上,它们分为两个区域:0.1和0.2,这几乎是中立的。 根据直方图,很容易看出情绪没有太大价值。 对于新闻或舆论网站而言,测量特定页面的情绪与排名中位数之间的相关性将是一个更加有趣的指标。
我认为,实体是API中最有趣的部分。 这是根据显着性(或与页面的相关性)在所有页面上选择的顶级实体。 请注意,Google针对相同的条款(销售清单)推断出不同的类型,这可能是错误的。 这是由于这些术语出现在内容的不同上下文中引起的。
然后,我分别查看了每种实体类型,并一起查看了该实体的显着性与页面的最佳排名位置之间是否存在任何关联。 对于每种类型,我都将匹配按显着性排序(降序)的该类型的顶部实体的显着性(与页面的整体相关性)相匹配。
在所有示例中,某些实体类型的显着性返回零,因此我从下面的图表中省略了那些结果。
Consumer Good实体类型具有最高的正相关,与Pearson相关为0.15854,尽管由于编号较低的排名更好,所以Person实体的最佳结果具有-0.15483的相关性。 这是一个非常小的样本集,尤其是对于单个实体类型,因此我不能处理太多数据。 我没有发现任何具有强相关性的值,但是Person实体最有意义。 网站通常都有关于其首席执行官和其他主要雇员的页面,这些页面很可能在这些查询的搜索结果中表现出色。
继续,当整体地查看站点时,基于实体 名称和实体类型出现以下主题。
我模糊了一些看起来过于具体而无法掩盖网站身份的结果。 从主题上讲,名称信息是在您的(或竞争对手的)网站上局部查看其核心主题的一种好方法。 这样做仅基于示例网站的排名网址,而不是基于所有网站的可能网址(因为Search Console数据仅报告在Google中获得展示次数的页面上的报告),但是结果会很有趣,尤其是当您要拉动网站的主网址时使用Ahrefs之类的工具对网址进行排名,该工具可以跟踪许多查询以及这些查询的Google结果。
实体数据中另一个有趣的部分是,标记为CONSUMER_GOOD的实体倾向于“看起来”像我在“知识结果”中看到的结果,即页面右侧的Google搜索结果。
在我们的数据集中具有三个或三个以上单词的Consumer Good实体名称中,有5.8%的知识结果与Google对该实体名称的结果相同。 这意味着,如果您在Google中搜索术语或短语,则右侧的框(例如,上面显示Linux的Knowledge Results)将显示在搜索结果页面中。 由于Google会“挑选”代表实体的示例网页,因此这是一个很好的机会,可以识别出在搜索结果中唯一显示的机会。 同样有趣的是,在Google中显示这些知识结果的5.8%名称中,没有一个实体具有从Natural Language API返回的Wikipedia URL。 这足够有趣,可以进行其他分析。 这将是非常有用的,特别是对于像Ahrefs这样的传统全球排名跟踪工具在其数据库中没有的更深奥的话题。
如前所述,知识结果对于希望在Google中展示其内容的网站所有者而言非常重要,因为它们在桌面搜索中会被突出显示。 假设它们还很可能与Google Discover的知识库主题保持一致,后者是针对Android和iOS的产品,可根据用户感兴趣但未明确搜索的主题为用户显示内容。
本文介绍了Google的自然语言API,共享了一些代码,并研究了该API对网站所有者可能有用的方式。 关键要点是:
翻译自: https://opensource.com/article/19/7/python-google-natural-language-api
python的c语言api
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。