返回介绍

5.1 使用 Pocket 应用程序,创建一个监督训练的集合

发布于 2024-01-26 22:17:32 字数 5633 浏览 0 评论 0 收藏 0

在我们可以创建自己对新闻稿的喜好模型之前,需要用于训练的数据。这些训练数据将被输入到我们的模型中,以教导该模型区分我们感兴趣的和不感兴趣的文章。为了构建这个语料库,我们需要标注大量与这些兴趣相关的文章。对于每篇文章,我们将其标记为“y”或“n”。这将指示该文章是否应该出现在发送给我们的每日摘要中。

为了简化这个过程,我们将使用Pocket应用程序。Pocket是一个允许你保存故事以供稍后阅读的应用程序。你只需安装浏览器扩展插件,然后当希望保存故事的时候,单击浏览器工具栏中的Pocket图标。这篇文章就被保存到了你的个人资料库。对于我们的目的而言,Pocket一个强大的功能是它还能够保存你所选择的标签。我们将使用此功能,将感兴趣的文章标记为“y”,而不感兴趣的文章标记为“n”。

5.1.1 安装Pocket的Chrome扩展程序

我们在这里使用Google Chrome,其他浏览器应该类似。对于Chrome,进入Google App Store,然后查找Extensions部分,如图5-1所示。

图5-1

单击蓝色的Add to Chrome按钮。如果你已经有一个Pocket账户了,那么请登录,如果你还没有账户,请继续注册(免费)。一旦完成,你应该可以看到浏览器右上角的Pocket图标。图标将变灰,不过一旦有你想要保存的文章,就可以单击它。文章保存之后,它就会变成红色。

如图5-2所示,在右上角可以看到灰色的图标。当图标被单击时,它变为红色,表示文章已经被保存。

图5-2

现在有趣的部分开始了!开始保存所有你看到的文章。对于有趣的那些打上“y”的标签,对于无趣的那些打上“n”的标签。这需要一点工作量。监督学习最终结果的好坏取决于你的训练集,所以你需要标记数百篇文章来获得好的效果。如果在保存某篇文章时你忘记给它打标签了,那么你可以去这个网站对其进行标记:http://www.get.pocket.com。

5.1.2 使用Pocket API来检索故事

现在你已经很勤奋地将文章都保存到了Pocket,下一步是检索它们。为了实现这一点,我们将使用Pocket API。你可以在https://getpocket.com/developer/apps/new注册一个新账户[1]。如图5-3所示,单击左上角的Create New App并填写详细信息以获取你的API密钥。请务必选择所有的权限,这样你才可以添加、更改和检索文章。

图5-3

一旦填写完毕并提交,你将收到CONSUMER KEY。你可以在左上角的My Apps下到它。看上去就如图5-4的截屏所示,不过显然你会得到一个真正的密钥。

图5-4 

一旦设置完毕,你就可以进入到下一步,进行授权的设置。我们现在就开始。它要求你输入用户密钥和重定向的网址。重定向网址可以是任何链接。这里我使用自己的Twitter账户。

import requests 
auth_params = {'consumer_key': 'MY_CONSUMER_KEY', 'redirect_uri': 
    'https://www.twitter.com/acombs'} 
    tkn = requests.post('https://getpocket.com/v3/oauth/request', 
    data=auth_params) 
tkn.content

这将产生如图5-5的输出。 

图5-5

该输出将包含你下一步所需的编码[2]。将以下内容放在浏览器的地址栏中。

https://getpocket.com/auth/authorize?request_token=some_long_code&redirect_uri=https%3A//www.twitter.com/acombs[3]

如果你将重定向的URL更改为你自己的网址,请务必对其进行编码。对于此有一些可用的资源。一个选择是使用Python的urllib库,另一个选择是使用免费的在线资源。

此时,你应该会看到一个授权屏幕。继续并批准授权,然后我们就可以进入下一步。

usr_params = {'consumer_key':'my_consumer_key', 'code':
    'some_long_code'} 
    usr = requests.post('https://getpocket.com/v3/oauth/authorize', 
    data= usr_params) 
usr.content

这里我们将使用图5-6的输出编码[4]进入检索故事的环节。

图5-6

首先,我们检索标记为“n”的故事。

no_params = {'consumer_key':'my_consumer_key', 'access_token': 
    'some_super_long_code', 
    'tag': 'n'} 
    no_result = requests.post('https://getpocket.com/v3/get', 
    data=no_params) 
no_result.text

上述代码生成图5-7的输出。

图5-7

注意在这里,我们通过所有标记为“n”的文章获得了一个很长的JSON字符串。其中有若干个主键,不过现在我们只对URL感兴趣。我们将依据此,继续创建一个URL的列表。

no_jf = json.loads(no_result.text) 
no_jd = no_jf['list'] 
no_urls=[] 
for i in no_jd.values(): 
     no_urls.append(i.get('resolved_url')) 
no_urls

上述代码生成图5-8的输出。

图5-8

这个列表包含所有我们不感兴趣的故事的URL。现在,让我们将它放入一个DataFrame对象并将其如此标记。

import pandas 
no_uf = pd.DataFrame(no_urls, columns=['urls']) 
no_uf = no_uf.assign(wanted = lambda x: 'n') 
no_uf

上述代码生成图5-9的输出。

图5-9

现在,不想要的故事已经就绪了。让我们对感兴趣的故事进行同样的处理。

ye_params = {'consumer_key': 'my_consumer_key', 'access_token': 
    'some_super_long_token', 
    'tag': 'y'} 
yes_result = requests.post('https://getpocket.com/v3/get', 
data=yes_params) 
yes_jf = json.loads(yes_result.text) 
yes_jd = yes_jf['list'] 
yes_urls=[] 
for i in yes_jd.values(): 
     yes_urls.append(i.get('resolved_url')) 
yes_uf = pd.DataFrame(yes_urls, columns=['urls']) 
yes_uf = yes_uf.assign(wanted = lambda x: 'y') 
yes_uf

上述代码生成图5-10的输出。

图5-10

现在我们有两种类型的故事作为训练的数据,将它们连接到同一个DataFrame。

df = pd.concat([yes_uf, no_uf]) 
df.dropna(inplace=1) 
df

上述代码生成图5-11的输出。

图5-11

现在,我们已经将所有的网址和相应的标签都放入同一个数据框中,接下来要下载每篇文章的HTML内容。我们将使用另一个称为embed.ly的免费服务。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文