- Day 1: Bower - 管理你的客户端依赖关系
- Day 2: AngularJS - 对 AngularJS 的初步认识
- Day 3: Flask - 使用 Python 和 OpenShift 进行即时 Web 开发
- Day 4:PredictionIO - 如何创建一个博客推荐器
- Day 5: GruntJS - 重复乏味的工作总会有人做(反正我不做)
- Day 6:在 Java 虚拟机上使用 Grails 进行快速 Web 开发
- Day 7: GruntJS 在线重载 提升生产率至新境界
- Day 8: Harp.JS - 现代静态 web 服务器
- Day 9: TextBlob - 对文本进行情感分析
- Day 10: PhoneGap - 开发手机应用如此简单
- Day 11: AeroGear 推送服务器:使应用的通知推送变得简单
- Day 12: OpenCV - Java 开发者的人脸检测
- Day 13: Dropwizard - 非常棒的 Java REST 服务器栈
- Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器(Named Entity Recognition,NER)
- Day 15:Meteor - 从零开始创建一个 Web 应用
- Day 16: Goose Extractor - 好用的文章提取工具
- Day 17: 使用 JBoss Forge 和 OpenShift 构建部署 JAVA EE 6 应用
- Day 18: BoilerPipe - Java 开发者的文章提取工具
- Day 19: EmberJS 入门指南
- Day 20: 斯坦福 CoreNLP - 用 Java 给 Twitter 进行情感分析
- Day 21:Docker 入门教程
- Day 22: 使用 Spring、MongoDB 和 AngularJS 开发单页面应用
- Day 23:使用 TimelineJS 构建精美的时间轴
- Day 24: 使用 Yeoman 自动构建 Ember 项目
- Day 25: 联合 Tornado、MongoDB 和 AngularJS 进行应用开发
- Day 26: TogetherJS - 让我们一起来编程!
- Day 27: Restify - 在 Node.js 中构建正确的 REST Web 服务
- Day 28: OpenShift 的 Eclipse 集成
- Day 29:编写你的第一个 Google Chrome 扩展程序
- Day 30: Play Framework - Java 开发者的梦想框架
Day 9: TextBlob - 对文本进行情感分析
又是 “30 天学习 30 种新技术” 的一天,我打算暂时把 JavaScript 放一放,然后学下用 Python 进行文本处理。本文的重点是情感分析。我在几年前就对情感分析产生了兴趣,当时我想写一个分析与电影有关的推的应用。这个应用将帮助我决定是否看某部电影。
我 google 了一番,最后发现 [Naive Bayes classifier]( Naive Bayes classifier) 可以解决这个问题。当时我只会 Java 语言,所以我写了一个定制的实现,用过一段时间这个应用。我太懒了,没有提交代码,所以我的机子挂掉之后,代码和应用丢失了。现在我把我所有的代码都提交到 github ,我有大概 200 个公开的仓库 :)
这里我打算介绍下 Python 的 TextBlob。我们首先讲一些基础知识,然后开发一个使用 TextBlob API 的 Flask 应用。
TextBlob 是什么?
TextBlob 是一个用 Python 编写的开源的文本处理库。它可以用来执行很多自然语言处理的任务,比如,词性标注,名词性成分提取,情感分析,文本翻译,等等。你可以在官方 文档 阅读 TextBlog 的所有特性。
为什么我要关心 TextBlob?
我学习 TextBlob 的原因如下:
- 我想开发需要进行文本处理的应用。我们给应用添加文本处理功能之后,应用能更好地理解人们的行为,因而显得更加人性化。文本处理很难做对。TextBlob 站在巨人的肩膀上( NTLK ),NLTK 是创建处理自然语言的 Python 程序的最佳选择。
- 我想学习下如何用 Python 进行文本处理。
安装 TextBlob
开始 TextBlob 之前,我们首先需要安装 Python 和 virtualenv 。本文中使用 Python 2.7。
官方文档 里提到了很多安装 TextBlob 的方法。 我们将使用 pip install
。给不知道 pip
的开发者, pip
是 Python 的包管理器。我们可以从 官网 安装 pip。
运行如下命令可以安装 TextBlob:
mkdir myapp
cd myapp
virtualenv venv --python=python2.7
. venv/bin/activate
pip install textblob
curl https://raw.github.com/sloria/TextBlob/master/download_corpora.py | python
以上命令将创建 myapp
目录,并通过 virtualenv
激活 Python 2.7,然后安装 textblob 包,最后下载必需的 NLTK 语料库。
GitHub 仓库
今天的 demo 应用的代码可从 github 取得。
应用
demo 应用跑在 OpenShift 上 http://showmesentiments-t20.rhcloud.com/ 它是一个非常简单的使用 TextBlob 情感分析 API 的例子。当用户输入的时候,他将看到他输入的内容是正面的(绿色)、负面的(红色),还是中性的(橙色)。
https://www.openshift.com/sites/default/files/images/Sentiment%20Analysis%20Demo.png
我们将开发一个使用 REST API 的简单的 Flask 应用。如果你不了解 Flask,你可以参考 我以前写的关于 Flask 的文章 。
接着我们将安装 Flask 框架。首先我们激活 virtualenv
,然后使用 pip 安装 Flask。
. venv/bin/activate
pip install flask
在我以前写的关于 Flask 的文章里已经提到,用 Flask 写基于 REST 的 web 服务相当方便。在 myapp
目录下创建一个 app.py
文件。内容如下:
from flask import Flask , jsonify, render_template
from textblob import TextBlob
app = Flask(__name__)
@app.route('/')
@app.route('/index')
def index():
return render_template('index.html')
@app.route('/api/v1/sentiment/<message>')
def sentiment(message):
text = TextBlob(message)
response = {'polarity' : text.polarity , 'subjectivity' : text.subjectivity}
return jsonify(response)
if __name__ == "__main__":
app.run(debug=True)
以上的代码做了这些事:
- 从 flask 包导入了 Flask 类和 jsonify、 render_template 函数。
- 从 textblob 包导入了 TextBlob 类。
- 定义了
/
和index
的路由。因此,如果用户向/
和/index
发出 GET 请求,index.html
将渲染。 - 定义了
/api/v1/sentiment/
。这是预留位置,其中将包括用户需要运行情感分析的文本。我们创建了一个 TextBlob 实例,并将其传递给消息。然后我们得到消息的对立性和主体性,然后创建一个 json 对象并返回该对象。 - 最后,我们使用
python app.py
命令启动一个开发服务器。我们同时开启了调试Debug=True
。这样当意料之外的情况出现时,浏览器就可以提供一个交互式的调试器。开启调试的另一个好处是,改动文件 之后,服务会自动重新加载。我们可以让调试器在后台运行,然后继续在我们的应用上工作。这提供了高效的开发环境。
index()
函数渲染 html 文件。 在 myapp
目录下创建一个名为模板的新文件夹,然后创建 index.html
mkdir templates
touch templates/index.html
将下面代码复制到 index.html
中。这段代码使用 Twitter Bootstrap 来增加样式。我们同时使用了 jQuery,在 keyup
事件时进行 REST 调用。如果键值为退格、制表符、回车、左、右、上、下,那么不进行 REST 调用。
<html>
<head>
<title>Do sentiment analysis on the text</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="static/css/bootstrap.css">
<style type="text/css">
body {
padding-top:60px;
padding-bottom: 60px;
}
</style>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Run Sentiment Analysis</a>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-6">
<textarea class="form-control" rows="3" placeholder="Write your text. Minimum length 10 characters"></textarea>
</div>
<div class="col-md-6">
<p id="result"></p>
</div>
</div>
</div>
<script type="text/javascript" src="static/js/jquery.js"></script>
<script type="text/javascript">
$("textarea").keyup(function(e){
console.log('keycode '+e.keyCode);
switch (e.keyCode) {
case 8: // Backspace
console.log('backspace'+e);
case 9: // Tab
console.log('Tab');
case 13: // Enter
console.log('Enter');
case 37: // Left
console.log('Left');
case 38: // Up
console.log('Up');
case 39: // Right
console.log('Right');
case 40: // Down
console.log('Down');
break;
default:
var input = $('textarea').val();
$('#result').removeClass("alert alert-warning");
$('#result').removeClass("alert alert-danger");
$('#result').removeClass("alert alert-success");
if (input.length > 10){
$.get('/api/v1/sentiment/'+input,function(result){
if(result.polarity < 0.0){
$('#result').addClass("alert alert-danger") .text(input);
} else if( result.polarity >= 0.0 && result.polarity <= 0.5){
$('#result').addClass("alert alert-warning").text(input);
}else{
$('#result').addClass("alert alert-success").text(input);
}
})
}
}
});
</script>
</body>
</html>
你可以从我的 github 仓库 中取得 js 和 css 文件。
部署到云端
部署到云端前,先要完成一些配置工作。
- 注册一个 OpenShift 账号 。注册是完全免费的,Red Hat 给每个用户三枚免费的 Gear,可以用 Gear 运行你的应用。在写作此文的时候,每个用户能免费使用总共 1.5 GB 内存和 3 GB 硬盘空间。
- 安装 rhc 客户端工具 。
rhc
是 ruby gem,因此你的机子上需要装有 ruby 1.8.7 以上版本。 只需输入sudo gem install rhc
即可安装 rhc 。如果你已经安装过了,确保是最新版。运行sudo gem update rhc
即可升级。关于配置 rhc 命令行工具的详细信息,请参考: https://openshift.redhat.com/community/developers/rhc-client-tools-install - 使用 rhc 的 setup 命令配置你的 OpenShift 账号。这个命令会帮助你创建一个命名空间,同时将你的 ssh 公钥上传至 OpenShift 服务器。
输入如下命令即可将应用部署到 OpenShift:
; rhc create-app day9demo python-2.7 --from-code
https://github.com/shekhargulati/day9-textblob-demo-openshift.git --timeout 180
这个命令将创建应用,设置公开的 DNS,创建私有 git 仓库,最后利用你的 Github 仓库中的代码来部署应用。应用将被部署到 http://day9demo- {domain-name}.rhcloud.com 。请用你的账户下的域名替换 {domain-name}
. 本文中的应用跑在 http://showmesentiments-t20.rhcloud.com/
今天到此为止。多回馈撒~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论