系列内容:
此内容是该系列 2 部分中的第 # 部分: 使用 Bluemix 服务创建一个基于浏览器的 PDF 存储和搜索应用程序,第 1 部分
http://www.ibm.com/developerworks/cn/views/cognitive/libraryview.jsp?search_by=%E4%BD%BF%E7%94%A8+Bluemix+%E6%9C%8D%E5%8A%A1%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%9F%BA%E4%BA%8E%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%84+PDF+%E5%AD%98%E5%82%A8%E5%92%8C%E6%90%9C%E7%B4%A2%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F
敬请期待该系列的后续内容。
此内容是该系列的一部分: 使用 Bluemix 服务创建一个基于浏览器的 PDF 存储和搜索应用程序,第 1 部分
敬请期待该系列的后续内容。
如果您像我一样,您的计算机上现在可能有数以百计的文档。这些文档包括您已经创建的文档、要求您审阅的文档、作为各种项目的组成部分而被复制的文档……这样的例子举不胜举。您通过电子邮件获得了这些文档,在 Slack 对话中获得,以及从网站下载文档……您拥有的文档越多,聚集的文档堆就会越大,也就越难在您需要的时候找到您所需的文档。
“ 借助现有的 Watson 和 Bluemix 服务,您可以将一个很有用的文件存储应用程序与功能完全的关键词搜索支持组合在一起使用。 ”
这就是本文所要解决的问题。在这个由两部分组成的文章系列的第 1 部分中,将向您展示如何创建一个强大的、基于浏览器的文档存储和检索应用程序,它会让搜索文档中的相关内容变得更快更容易。在这个过程中,我还会介绍一些来自 IBM® Watson 的有趣的新服务,并引导您完成在 IBM Bluemix? 上托管最终的应用程序的过程。第 2 部分将展示如何上传和存储已转换的文件。
听起来很有趣?那就请继续阅读!
本文中介绍的示例应用程序允许用户从其计算机中选择 PDF 文档,并将这些文档上传到一个在线文档存储中。在上传每个文件时,会自动和智能扫描关键词,这些关键词将根据需要被提取和存储在数据库中。用户以后可通过关键词进行搜索,以便快速确定并下载能满足其需求的文档。更不用说,应用程序是针对移动优化的(mobile-optimized),在智能手机和台式电脑上都适用。
在幕后,应用程序通过编排各种服务完成其工作,其中一些服务可直接通过 IBM Bluemix 进行使用,其他服务可作为第三方服务进行使用。以下是一个快速列表:
- Watson Document Conversion 服务 :将上传的文档转换为 HTML 或文本格式,以便对它们进行分析
- AlchemyAPI 服务 (也是 Watson Developer Cloud 的一部分):分析非结构化文本内容的关键词
- Watson Object Storage 服务 :为上传的文档提供了一个安全的存储区域
对于客户端而言,我使用 Bootstrap 为应用程序创建了一个移动友好的用户界面。在服务器上,我将使用 Slim PHP 微框架(micro-
先决条件
这里会用到许多技术,因此,在这里您需要:
- 基本熟悉 Bootstrap 、 PHP 和 MongoDB 。
- 一个带有 Apache (以及 mod_rewrite 和 .htaccess 文件支持)的本地 PHP 开发环境。
- 一个在本地或远程部署好的 MongoDB,并且配置好数据库、用户和密码。您可以通过 注册一个 MongoLab 帐户 获得免费或付费的 MongoDB 部署。
- 一个 Bluemix 帐户 。
- 一个 AlchemyAPI API 密钥 。
- Composer ,一个 PHP 依赖关系管理器。
- CloudFoundry 命令行工具 。
- 一个类似 Postman 的 REST 客户端。
- 一个文本编辑器或 IDE。
备注:使用 AlchemyAPI 服务的任何应用程序都必须遵从 AlchemyAPI 条款和条件 。同样,使用 Document Conversion and Object Storage 服务的任何应用程序都必须遵从每个服务的使用条款,如服务目录页中所述。在开始您的项目之前,花几分钟阅读一下这些要求,确保您的应用程序满足这些要求。
1
创建裸板应用程序
第一步是创建包含 Slim PHP 微框架和其他各种依赖关系的裸板应用程序,这些依赖关系包括针对 SDK 和 Guzzle HTTP 客户端的 OpenStack SDK,二者是与先前描述的各种服务进行交互所必需的。可以使用 Composer(PHP 依赖关系管理器)轻松下载和安装这些组件。使用以下 Composer 配置文件,而且您应将它保存到 $APP_ROOT/composer.json,$APP_ROOT 在此处中会引用您的项目目录。
{ "require": { "php-opencloud/openstack": "*", "slim/slim": "*", "slim/php-view": "*", "guzzlehttp/guzzle": "~6.0" }, "minimum-stability": "dev", "prefer-stable": true }
通过以下命令,使用 Composer 安装 Slim 和其他所需的组件:
shell> php composer.phar install
接下来,为所有可通过网络访问的文件创建目录 $APP_ROOT/public,为所有视图创建目录 $APP_ROOT/views,并为配置信息创建目录 $APP_ROOT/config.php。您会最后获得一个如下所示的目录结构:
图 1. 应用程序文件结构
您还应该将您的 MongoDB 连接信息添加到 $APP_ROOT/config.php 文件中,如下面例子所示:
<?php $config['settings']['db']['uri'] = "mongodb://USERNAME:PASSWORD@HOST:PORT/DATABASE";
为了让访问应用程序变得更加容易,您还可以在开发环境中定义一个新的虚拟主机,并将其根目录指定为 $APP_ROOT。推荐执行此步骤(可选),因为这一步在 Bluemix 上创建了一个更接近目标部署环境的复制品。
要在 Apache 中为应用程序设置一个指定的虚拟主机,请打开 Apache 配置文件(httpd.conf 或 httpd-vhosts.conf)并添加以下代码行:
NameVirtualHost 127.0.0.1 <VirtualHost 127.0.0.1> DocumentRoot "/var/www/pdf-keyword-search/public" ServerName pdf-keyword-search.localhost </VirtualHost>
这些代码行定义了一个新的虚拟主机 http://pdf-keyword-search.localhost/,它的文档根目录对应于 $APP_ROOT(请记得更新它,以反映您自己的本地设置)。重新启动 Web 服务器来激活这些新设置。请注意,您可能需要更新网络的本地 DNS 服务器,告诉它关于新主机的信息。
然后,将使用包含以下设置的 .htaccess 文件添加到 $APP_ROOT/public 目录中:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [QSA,L]
接下来,设置应用程序的主控制脚本。该脚本会加载 Slim 框架并初始化 Slim 应用程序。它还包含对每个应用程序路由的回调,并在路由与传入请求相匹配时,借助每个回调定义了所要执行的代码。
在 $APP_ROOT/public/index.php 下使用以下内容创建脚本:
<?php use \Psr\Http\Message\ServerRequestInterface as Request; use \Psr\Http\Message\ResponseInterface as Response; use GuzzleHttp\Psr7\Stream; use GuzzleHttp\Client; // set a long time limit to account // for large file uploads and processing time set_time_limit(6000); // include autoloader and configuration require '../vendor/autoload.php'; require '../config.php'; // initialize application $app = new \Slim\App($config); // initialize dependency injection container $container = $app->getContainer(); // add view renderer $container['view'] = function ($container) { return new \Slim\Views\PhpRenderer("../views/"); }; $app->run();
该脚本将会加载所有必要的类和配置文件。然后,它会初始化一个新的 Slim 应用程序对象和一个依赖关系注入(dependency injection,DI)容器,并将 PHP 视图渲染器添加到 DI 容器。
您还需要创建一个可用于通过应用程序渲染各种视图的基本用户界面。下面是一个示例,可用于后续代码清单中所示的所有应用程序视图:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Documents</title> <link rel="stylesheet" href=http://www.tuicool.com/articles/"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css" >Documents