精华内容
下载资源
问答
  • 尽管您可以在CGI之上运行Python Web框架,但我不希望这样做:Web框架为您提供了许多额外的功能,使您的编码更加容易,但是为此付出的部分代价是框架具有许多额外的代码来提供该功能-每次Web应用程序启动时,都需要加载该...

    尽管您可以在CGI之上运行Python Web框架,但我不希望这样做:Web框架为您提供了许多额外的功能,使您的编码更加容易,但是为此付出的部分代价是框架具有许多额外的代码来提供该功能-每次Web应用程序启动时,都需要加载该代码,并执行其初始化部分.

    每次访问相应的URL时,CGI都会为您的代码启动一个新的过程,并且该过程在完成对单个访问的响应后终止.因此,您确实希望尽可能少地执行初始化工作,以避免对用户请求的响应非常缓慢.

    因此,如果您的所有托管服务提供商都允许您使用CGI,则您可能希望对“裸露的CGI接口”进行编程,以最大程度地减少启动/关闭的开销.

    您可以在Marek Kubica的howto“如何在网络中使用Python”中很好地概述问题和可能性. WSGI(可以与底层Web服务器交互的许多其他方式)可以在CGI之上运行,因此从理论上讲,您可以使用任何支持WSGI的Python Web框架(这意味着几乎所有现代的框架)-重点是,除非您只做学习和“玩转”,否则您不希望在您实际服务的页面上一遍又一遍地产生启动开销. (如果您只是在学习和玩耍,则可以在自己的计算机上运行Web服务器供自己专用,因此托管服务提供商的限制是无关紧要的;-).

    如果您确实决定以“裸CGI”级别进行编程,则可以从this page开始-确保您遵循从它到有用教程以及指向Python CGI脚本的有用和有趣示例的voidspace集合的各种链接.

    要调查许多可用的Python Web应用程序框架中的一些,可以启动here

    对于涵盖的每个框架,您都会在其中找到一些信息和链接.

    最后但并非最不重要的一点是,您不应该忽略在Google App Engine上开发Web应用程序的可能性-尽管它具有其自身的特性和局限性,但它确实提供了WSGI兼容的环境,即使是非常密集的使用也可以免费使用.有一些专门开发来利用App Engine的有趣的轻量级框架,例如出色的tipfy(tipfy Wiki的本页也链接到其他页面),但尤其是,您可以在那里运行流行的django框架(具有特殊性和局限性,因为我说过-特别是下面没有关系数据库-但尽管如此,它仍然是最受欢迎的选择.

    在App Engine成立之初,有些人担心使用它可能导致“锁定”-由于它与其他托管环境不同,因此开发Web应用程序是否难于在需要时以及何时将其移植到其他地方?幸运的是,诸如appscale和typhoonae之类的开源软件消除了任何此类担忧.

    展开全文
  • Flask框架:Flask诞生于2010年,Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证...

    在python语言中,有着特别厉害的三大框架。

    这三个框架分别为:Flask框架,Tornado框架,Django框架。

    Flask框架:Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。

    Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

    Flask常用扩展包: Flask-SQLalchemy:操作数据库;Flask-script:插入脚本; Flask-migrate:管理迁移数据库; Flask-Session:Session存储方式指定; Flask-WTF:表单; Flask-Mail:邮件; Flask-Bable:提供国际化和本地化支持,翻译; Flask-Login:认证用户状态; Flask-OpenID:认证; Flask-RESTful:开发REST API的工具; Flask-Bootstrap:集成前端Twitter Bootstrap框架; Flask-Moment:本地化日期和时间; Flask-Admin:简单而可扩展的管理接口的框架or

    Tornado框架:

    我们在创建tornado.web.Application的对象时,传⼊了第⼀ 个参数——路由映射列表。实际上Application类的构造函数还接收很多关于 tornado web应⽤的配置参数,在后⾯的学习中我们⽤到的地⽅会为⼤家介 绍。 我们先来学习⼀个参数: debug,设置tornado是否⼯作在调试模式,默认为False即⼯作在⽣产模 式。当设置debug=True 后,tornado会⼯作在调试/开发模式,在此种模式 下,tornado为⽅便我们开发⽽提供了⼏种特性: 1.⾃动重启,tornado应⽤会监控我们的源代码⽂件,当有改动保存后便会 2.重启程序,这可以减少我们⼿动重启程序的次数。需要注意的是,⼀旦 我们保存的更改有错误,⾃动重启会导致程序报错⽽退出,从⽽需要我 们保存修正错误后⼿动启动程序。这⼀特性也可单独通过 autoreload=True设置; 3.取消缓存编译的模板,可以单独通过compiled_template_cache=False来 设置; 4.取消缓存静态⽂件hash值,可以单独通过static_hash_cache=False来设 置; 5.提供追踪信息,当RequestHandler或者其⼦类抛出⼀个异常⽽未被捕获 后,会⽣成⼀个包含追踪信息的⻚⾯,可以单独通过 serve_traceback=True来设置。

    Django框架:Django框架是一个重量级框架,相比上边那两个框架都要重要的很多。

    Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。由于Django在近年来的迅速发展,应用越来越广泛,被著名IT开发杂志SDTimes评选为2013SDTimes100,位列"API、库和框架"分类第6位,被认为是该领域的佼佼者。

    对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。

    展开全文
  • 利用Python机器学习框架scikit-learn,我们自己做一个分类模型,对中文评论信息做情感分析。其中还会介绍中文停用词的处理方法。疑惑前些日子,我在微信后台收到了一则读者的留言。我一下子有些懵——这怎么还带点播...

    利用Python机器学习框架scikit-learn,我们自己做一个分类模型,对中文评论信息做情感分析。其中还会介绍中文停用词的处理方法。

    疑惑

    前些日子,我在微信后台收到了一则读者的留言。

    我一下子有些懵——这怎么还带点播了呢?

    但是旋即我醒悟过来,好像是我自己之前挖了个坑。

    之前我写过《 如何用Python从海量文本抽取主题? 》一文,其中有这么一段:

    为了演示的流畅,我们这里忽略了许多细节。很多内容使用的是预置默认参数,而且完全忽略了中文停用词设置环节,因此“这个”、“如果”、“可能”、“就是”这样的停用词才会大摇大摆地出现在结果中。不过没有关系,完成比完美重要得多。知道了问题所在,后面改进起来很容易。有机会我会写文章介绍如何加入中文停用词的去除环节。

    根据“自己挖坑自己填”的法则,我决定把这一部分写出来。

    我可以使用偷懒的办法。

    例如在原先的教程里,更新中文停用词处理部分,打个补丁。

    但是,最近我发现,好像至今为止,我们的教程从来没有介绍过如何用机器学习做情感分析。

    你可能说,不对吧?

    情感分析不是讲过了吗?老师你好像讲过《 如何用Python做情感分析? 》,《 如何用Python做舆情时间序列可视化? 》和《 如何用Python和R对《权力的游戏》故事情节做情绪分析? 》。

    你记得真清楚,提出表扬。

    但是请注意,之前这几篇文章中,并没有使用机器学习方法。我们只不过调用了第三方提供的文本情感分析工具而已。

    但是问题来了,这些第三方工具是在别的数据集上面训练出来的,未必适合你的应用场景。

    例如有些情感分析工具更适合分析新闻,有的更善于处理微博数据……你拿过来,却是要对店铺评论信息做分析。

    这就如同你自己笔记本电脑里的网页浏览器,和图书馆电子阅览室的网页浏览器,可能类型、版本完全一样。但是你用起自己的浏览器,就是比公用电脑上的舒服、高效——因为你已经根据偏好,对自己浏览器上的“书签”、“密码存储”、“稍后阅读”都做了个性化设置。

    咱们这篇文章,就给你讲讲如何利用Python和机器学习,自己训练模型,对中文评论数据做情感分类。

    # 数据

    我的一个学生,利用爬虫抓取了大众点评网站上的数万条餐厅评论数据。

    这些数据在爬取时,包含了丰富的元数据类型。

    我从中抽取了评论文本和评星(1-5星),用于本文的演示。

    从这些数据里,我们随机筛选评星为1,2,4,5的,各500条评论数据。一共2000条。

    为什么只甩下评星数量为3的没有选择?

    你先思考10秒钟,然后往下看,核对答案。

    答案是这样的:

    因为我们只希望对情感做出(正和负)二元分类,4和5星可以看作正向情感,1和2是负向情感……3怎么算?

    所以,为了避免这种边界不清晰造成的混淆,咱们只好把标为3星的内容丢弃掉了。

    整理好之后的评论数据,如下图所示。

    我已经把数据放到了演示文件夹压缩包里面。后文会给你提供下载路径。

    模型

    使用机器学习的时候,你会遇到模型的选择问题。

    例如,许多模型都可以用来处理分类问题。逻辑回归、决策树、SVM、朴素贝叶斯……具体到咱们的评论信息情感分类问题,该用哪一种呢?

    幸好,Python上的机器学习工具包 scikit-learn 不仅给我们提供了方便的接口,供我们调用,而且还非常贴心地帮我们做了小抄(cheat-sheet)。

    这张图看似密密麻麻,非常混乱,实际上是一个非常好的迷宫指南。其中绿色的方框,是各种机器学习模型。而蓝色的圆圈,是你做判断的地方。

    你看,咱们要处理类别问题,对吧?

    顺着往下看,会要求你判断数据是否有标记。我们有啊。

    继续往下走,数据小于100K吗?

    考虑一下,我们的数据有2000条,小于这个阈值。

    接下来问是不是文本数据?是啊。

    于是路径到了终点。

    Scikit-learn告诉我们:用朴素贝叶斯模型好了。

    小抄都做得如此照顾用户需求,你对scikit-learn的品质应该有个预期了吧?如果你需要使用经典机器学习模型(你可以理解成深度学习之外的所有模型),我推荐你先尝试scikit-learn 。

    向量化

    《 如何用Python从海量文本抽取主题? 》一文里,我们讲过自然语言处理时的向量化。

    忘了?

    没关系。

    子曰:

    学而时习之,不亦乐乎?

    这里咱们复习一下。

    对自然语言文本做向量化(vectorization)的主要原因,是计算机看不懂自然语言。

    计算机,顾名思义,就是用来算数的。文本对于它(至少到今天)没有真正的意义。

    但是自然语言的处理,是一个重要问题,也需要自动化的支持。因此人就得想办法,让机器能尽量理解和表示人类的语言。

    假如这里有两句话:

    I love the game.

    I hate the game.

    那么我们就可以简单粗暴地抽取出以下特征(其实就是把所有的单词都罗列一遍):

    I

    love

    hate

    the

    game

    对每一句话,都分别计算特征出现个数。于是上面两句话就转换为以下表格:

    按照句子为单位,从左到右读数字,第一句表示为[1, 1, 0, 1, 1],第二句就成了[1, 0, 1, 1, 1]。

    这就叫向量化。

    这个例子里面,特征的数量叫做维度。于是向量化之后的这两句话,都有5个维度。

    你一定要记住,此时机器依然不能理解两句话的具体含义。但是它已经尽量在用一种有意义的方式来表达它们。

    注意这里我们使用的,叫做“一袋子词”(bag of words)模型。

    下面这张图(来自 ~https://goo.gl/2jJ9Kp~ ),形象化表示出这个模型的含义。

    一袋子词模型不考虑词语的出现顺序,也不考虑词语和前后词语之间的连接。每个词都被当作一个独立的特征来看待。

    你可能会问:“这样不是很不精确吗?充分考虑顺序和上下文联系,不是更好吗?”

    没错,你对文本的顺序、结构考虑得越周全,模型可以获得的信息就越多。

    但是,凡事都有成本。只需要用基础的排列组合知识,你就能计算出独立考虑单词,和考虑连续n个词语(称作 n-gram),造成的模型维度差异了。

    为了简单起见,咱们这里还是先用一袋子词吧。有空我再给你讲讲……

    打住,不能再挖坑了。

    中文

    上一节咱们介绍的,是自然语言向量化处理的通则。

    处理中文的时候,要更加麻烦一些。

    因为不同于英文、法文等拉丁语系文字,中文天然没有空格作为词语之间的分割符号。

    我们要先将中文分割成空格连接的词语。

    例如把:

    “我喜欢这个游戏”

    变成:

    “我 喜欢 这个 游戏”

    这样一来,就可以仿照英文句子的向量化,来做中文的向量化了。

    你可能担心计算机处理起中文的词语,跟处理英文词语有所不同。

    这种担心没必要。

    因为咱们前面讲过,计算机其实连英文单词也看不懂。

    在它眼里,不论什么自然语言的词汇,都只是某种特定组合的字符串而已。

    不论处理中文还是英文,都需要处理的一种词汇,叫做停用词。

    中文维基百科里,是这么定义停用词的:

    在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。

    咱们做的,不是信息检索,而已文本分类。

    对咱们来说,你不打算拿它做特征的单词,就可以当作停用词。

    还是举刚才英文的例子,下面两句话:

    I love the game.

    I hate the game.

    告诉我,哪些是停用词?

    直觉会告诉你,定冠词 the 应该是。

    没错,它是虚词,没有什么特殊意义。

    它在哪儿出现,都是一个意思。

    一段文字里,出现很多次定冠词都很正常。把它和那些包含信息更丰富的词汇(例如love, hate)放在一起统计,就容易干扰我们把握文本的特征。

    所以,咱们把它当作停用词,从特征里面剔除出去。

    举一反三,你会发现分词后的中文语句:

    “我 喜欢 这个 游戏”

    其中的“这个”应该也是停用词吧?

    答对了!

    要处理停用词,怎么办呢?当然你可以一个个手工来寻找,但是那显然效率太低。

    有的机构或者团队处理过许多停用词。他们会发现,某种语言里,停用词是有规律的。

    他们把常见的停用词总结出来,汇集成表格。以后只需要查表格,做处理,就可以利用先前的经验和知识,提升效率,节约时间。

    在scikit-learn中,英语停用词是自带的。只需要指定语言为英文,机器会帮助你自动处理它们。

    但是中文……

    scikit-learn开发团队里,大概缺少足够多的中文使用者吧。

    好消息是,你可以使用第三方共享的停用词表。

    这种停用词表到哪里下载呢?

    我已经帮你找到了 一个 github 项目 ,里面包含了4种停用词表,来自哈工大、四川大学和百度等自然语言处理方面的权威单位。

    这几个停用词表文件长度不同,内容也差异很大。为了演示的方便与一致性,咱们统一先用哈工大这个停用词表吧。

    我已经将其一并存储到了演示目录压缩包中,供你下载。

    # 环境

    请你先到 这个网址 下载本教程配套的压缩包。

    下载后解压,你会在生成的目录里面看到以下4个文件。

    下文中,我们会把这个目录称为“演示目录”。

    请一定注意记好它的位置哦。

    要装Python,最简便办法是安装Anaconda套装。

    请到 这个网址 下载Anaconda的最新版本。

    请选择左侧的 Python 3.6 版本下载安装。

    如果你需要具体的步骤指导,或者想知道Windows平台如何安装并运行Anaconda命令,请参考我为你准备的 视频教程 。

    打开终端,用cd命令进入演示目录。如果你不了解具体使用方法,也可以参考 视频教程 。

    我们需要使用许多软件包。如果每一个都手动安装,会非常麻烦。

    我帮你做了个虚拟环境的配置文件,叫做environment.yaml ,也放在演示目录中。

    请你首先执行以下命令:

    conda env create -f environment.yaml

    这样,所需的软件包就一次性安装完毕了。

    之后执行,

    source activate datapy3

    进入这个虚拟环境。

    注意一定要执行下面这句:

    python -m ipykernel install --user --name=datapy3

    只有这样,当前的Python环境才会作为核心(kernel)在系统中注册。

    确认你的电脑上已经安装了 Google Chrome 浏览器。如果没有安装请到这里 下载 安装。

    之后,在演示目录中,我们执行:

    jupyter notebook

    Google Chrome会开启,并启动 Jupyter 笔记本界面:

    你可以直接点击文件列表中的demo.ipynb文件,可以看到本教程的全部示例代码。

    你可以一边看教程的讲解,一边依次执行这些代码。

    但是,我建议的方法,是回到主界面下,新建一个新的空白 Python 3 (显示名称为datapy3的那个)笔记本。

    请跟着教程,一个个字符输入相应的内容。这可以帮助你更为深刻地理解代码的含义,更高效地把技能内化。

    准备工作结束,下面我们开始正式输入代码。

    代码

    我们读入数据框处理工具pandas。

    import pandas as pd

    利用pandas的csv读取功能,把数据读入。

    注意为了与Excel和系统环境设置的兼容性,该csv数据文件采用的编码为GB18030。这里需要显式指定,否则会报错。

    df = pd.read_csv('data.csv', encoding='gb18030')

    我们看看读入是否正确。

    df.head()

    前5行内容如下:

    看看数据框整体的形状是怎么样的:

    df.shape

    (2000, 2)

    我们的数据一共2000行,2列。完整读入。

    我们并不准备把情感分析的结果分成4个类别。我们只打算分成正向和负向。

    这里我们用一个无名函数来把评星数量>3的,当成正向情感,取值为1;反之视作负向情感,取值为0。

    def make_label(df): df["sentiment"] = df["star"].apply(lambda x: 1 if x>3 else 0)

    编制好函数之后,我们实际运行在数据框上面。

    make_label(df)

    看看结果:

    df.head()

    从前5行看来,情感取值就是根据我们设定的规则,从评星数量转化而来。

    下面我们把特征和标签拆开。

    X = df[['comment']]y = df.sentiment

    X 是我们的全部特征。因为我们只用文本判断情感,所以X实际上只有1列。

    X.shape

    (2000, 1)

    而y是对应的标记数据。它也是只有1列。

    y.shape

    (2000,)

    我们来看看 X 的前几行数据。

    X.head()

    注意这里评论数据还是原始信息。词语没有进行拆分。

    为了做特征向量化,下面我们利用结巴分词工具来拆分句子为词语。

    import jieba

    我们建立一个辅助函数,把结巴分词的结果用空格连接。

    这样分词后的结果就如同一个英文句子一样,单次之间依靠空格分割。

    def chinese_word_cut(mytext): return " ".join(jieba.cut(mytext))

    有了这个函数,我们就可以使用 apply 命令,把每一行的评论数据都进行分词。

    X['cutted_comment'] = Xment.apply(chinese_word_cut)

    我们看看分词后的效果:

    X.cutted_comment[:5]

    单词和标点之间都用空格分割,�...

    展开全文
  • 利用Python机器学习框架scikit-learn,我们自己做一个分类模型,对中文评论信息做情感分析。其中还会介绍中文停用词的处理方法。疑惑前些日子,我在微信后台收到了一则读者的留言。我一下子有些懵——这怎么还带点播...

    利用Python机器学习框架scikit-learn,我们自己做一个分类模型,对中文评论信息做情感分析。其中还会介绍中文停用词的处理方法。

    疑惑

    前些日子,我在微信后台收到了一则读者的留言。

    我一下子有些懵——这怎么还带点播了呢?

    但是旋即我醒悟过来,好像是我自己之前挖了个坑。

    之前我写过《 如何用Python从海量文本抽取主题? 》一文,其中有这么一段:

    为了演示的流畅,我们这里忽略了许多细节。很多内容使用的是预置默认参数,而且完全忽略了中文停用词设置环节,因此"这个”、"如果”、"可能”、"就是”这样的停用词才会大摇大摆地出现在结果中。不过没有关系,完成比完美重要得多。知道了问题所在,后面改进起来很容易。有机会我会写文章介绍如何加入中文停用词的去除环节。

    根据"自己挖坑自己填”的法则,我决定把这一部分写出来。

    我可以使用偷懒的办法。

    例如在原先的教程里,更新中文停用词处理部分,打个补丁。

    但是,最近我发现,好像至今为止,我们的教程从来没有介绍过如何用机器学习做情感分析。

    你可能说,不对吧?

    情感分析不是讲过了吗?老师你好像讲过《 如何用Python做情感分析? 》,《 如何用Python做舆情时间序列可视化? 》和《 如何用Python和R对《权力的游戏》故事情节做情绪分析? 》。

    你记得真清楚,提出表扬。

    但是请注意,之前这几篇文章中,并没有使用机器学习方法。我们只不过调用了第三方提供的文本情感分析工具而已。

    但是问题来了,这些第三方工具是在别的数据集上面训练出来的,未必适合你的应用场景。

    例如有些情感分析工具更适合分析新闻,有的更善于处理微博数据……你拿过来,却是要对店铺评论信息做分析。

    这就如同你自己笔记本电脑里的网页浏览器,和图书馆电子阅览室的网页浏览器,可能类型、版本完全一样。但是你用起自己的浏览器,就是比公用电脑上的舒服、高效——因为你已经根据偏好,对自己浏览器上的"书签”、"密码存储”、"稍后阅读”都做了个性化设置。

    咱们这篇文章,就给你讲讲如何利用Python和机器学习,自己训练模型,对中文评论数据做情感分类。

    # 数据

    我的一个学生,利用爬虫抓取了大众点评网站上的数万条餐厅评论数据。

    这些数据在爬取时,包含了丰富的元数据类型。

    我从中抽取了评论文本和评星(1-5星),用于本文的演示。

    从这些数据里,我们随机筛选评星为1,2,4,5的,各500条评论数据。一共2000条。

    为什么只甩下评星数量为3的没有选择?

    你先思考10秒钟,然后往下看,核对答案。

    答案是这样的:

    因为我们只希望对情感做出(正和负)二元分类,4和5星可以看作正向情感,1和2是负向情感……3怎么算?

    所以,为了避免这种边界不清晰造成的混淆,咱们只好把标为3星的内容丢弃掉了。

    整理好之后的评论数据,如下图所示。

    我已经把数据放到了演示文件夹压缩包里面。后文会给你提供下载路径。

    模型

    使用机器学习的时候,你会遇到模型的选择问题。

    例如,许多模型都可以用来处理分类问题。逻辑回归、决策树、SVM、朴素贝叶斯……具体到咱们的评论信息情感分类问题,该用哪一种呢?

    幸好,Python上的机器学习工具包 scikit-learn 不仅给我们提供了方便的接口,供我们调用,而且还非常贴心地帮我们做了小抄(cheat-sheet)。

    这张图看似密密麻麻,非常混乱,实际上是一个非常好的迷宫指南。其中绿色的方框,是各种机器学习模型。而蓝色的圆圈,是你做判断的地方。

    你看,咱们要处理类别问题,对吧?

    顺着往下看,会要求你判断数据是否有标记。我们有啊。

    继续往下走,数据小于100K吗?

    考虑一下,我们的数据有2000条,小于这个阈值。

    接下来问是不是文本数据?是啊。

    于是路径到了终点。

    Scikit-learn告诉我们:用朴素贝叶斯模型好了。

    小抄都做得如此照顾用户需求,你对scikit-learn的品质应该有个预期了吧?如果你需要使用经典机器学习模型(你可以理解成深度学习之外的所有模型),我推荐你先尝试scikit-learn 。

    向量化

    《 如何用Python从海量文本抽取主题? 》一文里,我们讲过自然语言处理时的向量化。

    忘了?

    没关系。

    子曰:

    学而时习之,不亦乐乎?

    这里咱们复习一下。

    对自然语言文本做向量化(vectorization)的主要原因,是计算机看不懂自然语言。

    计算机,顾名思义,就是用来算数的。文本对于它(至少到今天)没有真正的意义。

    但是自然语言的处理,是一个重要问题,也需要自动化的支持。因此人就得想办法,让机器能尽量理解和表示人类的语言。

    假如这里有两句话:

    I love the game.

    I hate the game.

    那么我们就可以简单粗暴地抽取出以下特征(其实就是把所有的单词都罗列一遍):

    I

    love

    hate

    the

    game

    对每一句话,都分别计算特征出现个数。于是上面两句话就转换为以下表格:

    按照句子为单位,从左到右读数字,第一句表示为[1, 1, 0, 1, 1],第二句就成了[1, 0, 1, 1, 1]。

    这就叫向量化。

    这个例子里面,特征的数量叫做维度。于是向量化之后的这两句话,都有5个维度。

    你一定要记住,此时机器依然不能理解两句话的具体含义。但是它已经尽量在用一种有意义的方式来表达它们。

    注意这里我们使用的,叫做"一袋子词”(bag of words)模型。

    下面这张图(来自 ~https://goo.gl/2jJ9Kp~ ),形象化表示出这个模型的含义。

    一袋子词模型不考虑词语的出现顺序,也不考虑词语和前后词语之间的连接。每个词都被当作一个独立的特征来看待。

    你可能会问:"这样不是很不精确吗?充分考虑顺序和上下文联系,不是更好吗?”

    没错,你对文本的顺序、结构考虑得越周全,模型可以获得的信息就越多。

    但是,凡事都有成本。只需要用基础的排列组合知识,你就能计算出独立考虑单词,和考虑连续n个词语(称作 n-gram),造成的模型维度差异了。

    为了简单起见,咱们这里还是先用一袋子词吧。有空我再给你讲讲……

    打住,不能再挖坑了。

    中文

    上一节咱们介绍的,是自然语言向量化处理的通则。

    处理中文的时候,要更加麻烦一些。

    因为不同于英文、法文等拉丁语系文字,中文天然没有空格作为词语之间的分割符号。

    我们要先将中文分割成空格连接的词语。

    例如把:

    "我喜欢这个游戏”

    变成:

    "我 喜欢 这个 游戏”

    这样一来,就可以仿照英文句子的向量化,来做中文的向量化了。

    你可能担心计算机处理起中文的词语,跟处理英文词语有所不同。

    这种担心没必要。

    因为咱们前面讲过,计算机其实连英文单词也看不懂。

    在它眼里,不论什么自然语言的词汇,都只是某种特定组合的字符串而已。

    不论处理中文还是英文,都需要处理的一种词汇,叫做停用词。

    中文维基百科里,是这么定义停用词的:

    在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。

    咱们做的,不是信息检索,而已文本分类。

    对咱们来说,你不打算拿它做特征的单词,就可以当作停用词。

    还是举刚才英文的例子,下面两句话:

    I love the game.

    I hate the game.

    告诉我,哪些是停用词?

    直觉会告诉你,定冠词 the 应该是。

    没错,它是虚词,没有什么特殊意义。

    它在哪儿出现,都是一个意思。

    一段文字里,出现很多次定冠词都很正常。把它和那些包含信息更丰富的词汇(例如love, hate)放在一起统计,就容易干扰我们把握文本的特征。

    所以,咱们把它当作停用词,从特征里面剔除出去。

    举一反三,你会发现分词后的中文语句:

    "我 喜欢 这个 游戏”

    其中的"这个”应该也是停用词吧?

    答对了!

    要处理停用词,怎么办呢?当然你可以一个个手工来寻找,但是那显然效率太低。

    有的机构或者团队处理过许多停用词。他们会发现,某种语言里,停用词是有规律的。

    他们把常见的停用词总结出来,汇集成表格。以后只需要查表格,做处理,就可以利用先前的经验和知识,提升效率,节约时间。

    在scikit-learn中,英语停用词是自带的。只需要指定语言为英文,机器会帮助你自动处理它们。

    但是中文……

    scikit-learn开发团队里,大概缺少足够多的中文使用者吧。

    好消息是,你可以使用第三方共享的停用词表。

    这种停用词表到哪里下载呢?

    我已经帮你找到了 一个 github 项目 ,里面包含了4种停用词表,来自哈工大、四川大学和百度等自然语言处理方面的权威单位。

    这几个停用词表文件长度不同,内容也差异很大。为了演示的方便与一致性,咱们统一先用哈工大这个停用词表吧。

    我已经将其一并存储到了演示目录压缩包中,供你下载。

    # 环境

    请你先到 这个网址 下载本教程配套的压缩包。

    下载后解压,你会在生成的目录里面看到以下4个文件。

    下文中,我们会把这个目录称为"演示目录”。

    请一定注意记好它的位置哦。

    要装Python,最简便办法是安装Anaconda套装。

    请到 这个网址 下载Anaconda的最新版本。

    请选择左侧的 Python 3.6 版本下载安装。

    如果你需要具体的步骤指导,或者想知道Windows平台如何安装并运行Anaconda命令,请参考我为你准备的 视频教程 。

    打开终端,用cd命令进入演示目录。如果你不了解具体使用方法,也可以参考 视频教程 。

    我们需要使用许多软件包。如果每一个都手动安装,会非常麻烦。

    我帮你做了个虚拟环境的配置文件,叫做environment.yaml ,也放在演示目录中。

    请你首先执行以下命令:

    conda env create -f environment.yaml

    这样,所需的软件包就一次性安装完毕了。

    之后执行,

    source activate datapy3

    进入这个虚拟环境。

    注意一定要执行下面这句:

    python -m ipykernel install --user --name=datapy3

    只有这样,当前的Python环境才会作为核心(kernel)在系统中注册。

    确认你的电脑上已经安装了 Google Chrome 浏览器。如果没有安装请到这里 下载 安装。

    之后,在演示目录中,我们执行:

    jupyter notebook

    Google Chrome会开启,并启动 Jupyter 笔记本界面:

    你可以直接点击文件列表中的demo.ipynb文件,可以看到本教程的全部示例代码。

    你可以一边看教程的讲解,一边依次执行这些代码。

    但是,我建议的方法,是回到主界面下,新建一个新的空白 Python 3 (显示名称为datapy3的那个)笔记本。

    请跟着教程,一个个字符输入相应的内容。这可以帮助你更为深刻地理解代码的含义,更高效地把技能内化。

    准备工作结束,下面我们开始正式输入代码。

    代码

    我们读入数据框处理工具pandas。

    import pandas as pd

    利用pandas的csv读取功能,把数据读入。

    注意为了与Excel和系统环境设置的兼容性,该csv数据文件采用的编码为GB18030。这里需要显式指定,否则会报错。

    df = pd.read_csv('data.csv', encoding='gb18030')

    我们看看读入是否正确。

    df.head()

    前5行内容如下:

    看看数据框整体的形状是怎么样的:

    df.shape

    (2000, 2)

    我们的数据一共2000行,2列。完整读入。

    我们并不准备把情感分析的结果分成4个类别。我们只打算分成正向和负向。

    这里我们用一个无名函数来把评星数量>3的,当成正向情感,取值为1;反之视作负向情感,取值为0。

    def make_label(df): df["sentiment"] = df["star"].apply(lambda x: 1 if x>3 else 0)

    编制好函数之后,我们实际运行在数据框上面。

    make_label(df)

    看看结果:

    df.head()

    从前5行看来,情感取值就是根据我们设定的规则,从评星数量转化而来。

    下面我们把特征和标签拆开。

    X = df[['comment']]y = df.sentiment

    X 是我们的全部特征。因为我们只用文本判断情感,所以X实际上只有1列。

    X.shape

    (2000, 1)

    而y是对应的标记数据。它也是只有1列。

    y.shape

    (2000,)

    我们来看看 X 的前几行数据。

    X.head()

    注意这里评论数据还是原始信息。词语没有进行拆分。

    为了做特征向量化,下面我们利用结巴分词工具来拆分句子为词语。

    import jieba

    我们建立一个辅助函数,把结巴分词的结果用空格连接。

    这样分词后的结果就如同一个英文句子一样,单次之间依靠空格分割。

    def chinese_word_cut(mytext): return " ".join(jieba.cut(mytext))

    有了这个函数,我们就可以使用 apply 命令,把每一行的评论数据都进行分词。

    X['cutted_comment'] = Xment.apply(chinese_word_cut)

    我们看看分词后的效果:

    X.cutted_comment[:5]

    单词和标点之间都用空格分割,?...

    展开全文
  • 前面我们介绍了Python中的单元测试框架unittest,以后我们所有的测试类文件,都采用unittest来辅助我们进行debug和脚本开发。搞定了debug机制和确定了... POM,中文字母意思是,页面对象模型,POM一种最近几...
  • Python+Selenium框架设计篇之3-什么是POM

    万次阅读 多人点赞 2017-04-19 12:23:06
    前面我们介绍了Python中的单元测试框架unittest,以后我们所有的测试类文件,都采用unittest来辅助我们进行debug和脚本开发。搞定了debug机制和确定了... POM,中文字母意思是,页面对象模型,POM一种最近几年非
  • 是什么意思Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 ...
  • Person类很明显能够看出区别,不继承object对象,只拥有了__doc__ , module ...对于不太了解python类的同学来说,这些高级特性基本上没用处,但是对于那些要着手写框架或者写大型项目的高手来说,这些特性就比较有用了
  • 对于不太了解python类的同学来说,这些高级特性基本上没用处,但是对于那些要着手写框架或者写大型项目的高手来说,这些特性就比较有用了,比如说tornado里面的异常捕获时就有用到__class__来定位类的名称,还有高度...
  • python能做什么

    2020-02-26 23:58:31
    学一门语言首先我们要知道它能够做什么。...快速开发,快速开发这个应该都比较熟悉,就是用相对成熟的框架,和相对较少的代码来开发网站,Python在网站前后台都有不少成熟的框架,如flask、bottle、tornado等...
  • 昨天简单介绍了SQLAlchemy的使用,但是没有能够涉及其最精彩的ORM部分,今天我将简单说明一下,当然主要还是讲解官方文档的内容,由于是学习笔记,有...这段话是什么意思呢?简单来说吧,SQLAlchemy分为Classic (经典
  • unittest核心工作原理 unittest中最核心的四个概念:test case, test suite, test runner, test fixture。下面我们分别来解释这四个...什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(se...
  • python接口自动化测试框架结构 ( 第一章) 点击跳转到第一章,你可以知道代码思维逻辑和框架结构,别再迷茫了,不日进,则日退,学习才你应该做的事情。我会用最简单的方式让你理解框架的思想和代码的意思,废话不...
  • 什么是mock? mock翻译过来有模拟的意思。这里介绍的mock辅助单元测试的一个模块。它允许你用模拟对象替换你的系统的部分,并对它们已使用的方式进行断言。 什么时候使用mock? 场景1:比如有A和B两个模块,A...
  • werkzeug使用Python语言编写的一个web后端工具包,提供了相当多的功能,并且基于PEP 333:WSGI标准的,因此易于扩展。现如今许多的服务器端框架使用werkzeug的,比如flask。 标准:WSGI WSGIweb server ...
  • 无状态的意思是每次请求都独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。 一句有意思的话来描述就是人生只如初见,...
  • 什么是 LTS 呢?LTS ,long-term support,也就是长期技术支持版的意思。长期技术支持版意味着资料的丰富程度和稳定性会比其他版本的要好。可以看到,目前的长期技术 1.11,而上一个长期技术支持版 1.8 ,我们...
  • Python 里 {% %} 代表什么? 举个例子: {% for feed in list %} {% item feed %} {% endfor %} 这个一个WEB框架页面端写的代码: 这样写代表的意思是在{% %}内可以写代码,该代码在页面内生效,可以编译执行,...
  • 一定要记录下来,百度或者搜索资料,不要遇见代码就觉得看不懂,我写的也不是特别的详细,包含的知识点也很多,一点一点积累~这一章节我们需要学习一下在header中的键值对都一些什么意思,不一定要全部都懂,但是...
  • 搞定了debug机制和确定了unittest来进行创建和管理我们的自动化测试脚本,接下来我们来考虑下,框架设计中一种很普遍的设计思想-POM(Page Object Model) POM,中文字母意思是,页面对象模型,POM一种最近几年...
  • python的unittest模块提供了一个测试框架,只要我们写一个继承unittest.TestCase的类,类中用setUp做初始化,用tearDown做清理。主要用到的函数有:failedinfo表示不成立打印信息failedinfo,为可选参数self.fail(...
  • python轻量级前端Flask

    千次阅读 2017-10-18 10:55:38
    做代理池用到的一个Flask,他是一個使用Python编写的轻量级Web应用...“微” 是什么意思? “微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺
  • 技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152 应用程序框架产生的消息映射函数 例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg为消息标志,它向系统声明:有消息映射到函数实现体;而在map...
  • python 装饰器

    2021-03-16 21:15:37
    很多核心的用法(像参数化)都通过@开头的帽子来实现的,看起来很高端的样子,它就是python中的一个重难点:装饰器。 闭包 想要理解装饰器,必须先了解什么是闭包(closure)。 这段代码的意思:定义了一个...
  • codelearn_python

    2021-04-16 15:01:54
    学习目标: ...学习隐藏所谓urgent头隐藏是什么意思 学习时间: 预估学习时间:4.16日下午到4.17号一整天 4.16日16.00开始 4.16日22.00结束 ## 学习要求: 不要看tim 不要分心 带着电脑 ...
  • RPC框架是什么? RPC 框架说白了就是让你可以像调用本地方法一样调用远程服务提供的方法,而不需要关心底层的通信细节。简单地说就让远程服务调用更加简单、透明。 RPC包含了客户端(Client)和服务端(Server) ...
  • python在语法上采用缩进表达程序的格式框架,这说的是什么意思呢? 咱们先来看下面的代码,下面是2个for循环,我们主要看它的结构,每个for循环的首行没有任何缩进,第二行开始有4格缩进(可以按4个空格键,也可以按...
  • python之单元测试

    2019-05-31 20:10:01
    什么是mock? mock在翻译过来有模拟的意思。这里要介绍的mock辅助单元测试的一个模块。它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言。 在Python2.x 中 mock一个单独模块,需要单独安装...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

python框架是什么意思

python 订阅