精华内容
下载资源
问答
  • Perl到底是什么意思

    2011-08-16 16:46:00
    学习perl也有一段时间了,如果连perl是什么意思都不知道,那就太汗颜了,听好啦! perl == Practical Exstraction and Report Language,中文叫做实用抽取和报表语言。...

    学习perl也有一段时间了,如果连perl是什么意思都不知道,那就太汗颜了,听好啦!

    perl == Practical Exstraction and Report Language,中文叫做实用抽取和报表语言。

    展开全文
  • 利用Python机器学习框架scikit-learn,我们自己做一个分类模型,对中文评论信息...之前我写过《 如何用Python从海量文本抽取主题? 》一文,其中有这么一段:为了演示的流畅,我们这里忽略了许多细节。很多内容使用...

    利用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]

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

    展开全文
  •      ...1、同一个sql,为什么限制rownum数不同会存在这种情况;10条能查询处来,而20条却查询不出来; 2、究竟是否是因为临时表空间过小?? 还是说时其它因素导致的??
  • 【芝麻IP代理】Python语言有一个特点就是不特别强势,...1、学习Python包并完成根本的爬虫进程大局部网络爬虫是按“发送恳求——取得页面——解析页面——抽取并贮存内容”的操作流程,这是模仿了我们利用阅读器获取...

    【芝麻IP代理】Python语言有一个特点就是不特别强势,可是它能够使用都非常的多范畴,并且效率高的可怕,Python的使用范畴非常多,现在国内越来越多的人学习Python,可是学会后发现仍然爬不了数据,下面芝麻代理告诉大家怎么可以轻松爬取数据。

    1、学习Python包并完成根本的爬虫进程

    大局部网络爬虫是按“发送恳求——取得页面——解析页面——抽取并贮存内容”的操作流程,这是模仿了我们利用阅读器获取网页信息的进程。

    Python中网络爬虫相关的包好多:例如urllib、bs4、scrapy、pyspider等等,建议大家从requests+Xpath开端,requests担任衔接网站,前往网页,Xpath 用于解析网页,便于抽取数据。

    如果你用过BeautifulSoup,就是发现比Xpath要省事很多,一层一层反省元素代,这些流程全都不用。普通静态网站更是不在话下。

    假如你需要爬取异步加载的网站,可以学习阅读器抓包剖析真实恳求或是学习Selenium来完成自动化,这样,知乎、光阴网、猫途鹰这些静态的网站也可以迎刃而解。

    2、学习scrapy,搭建工程化的爬虫

    掌握后面技术普通量级数据和代码根本没有成绩,可是在遇到复杂状况,依然可以力所能及,这个时候,scrapy框架就显得尤为重要了。

    scrapy是一个弱小的爬虫框架,不只能构建request,还可以解析 response,但是最让人惊喜的还是它超高的功能,让你可以将爬虫工程化、模块化。

    3、学会 scrapy,去搭建一些爬虫框架,就具有爬虫工程师的思想

    掌握各种技巧,应对特殊网站的反爬措施。当然,爬虫进程中也会阅历一些绝望,例如被网站封IP、比方各种奇异的验证码、userAgent拜访限制、各种静态加载等等。 遇到这些反爬虫的手腕,当然还需求一些初级的技巧来应对,惯例的比方拜访频率控制、运用代理IP池、抓包、验证码的OCR处置等等。

    芝麻动态换IP软件可以实现一键IP自动切换,千万IP库存,自动去重,支持电脑、手机多端使用,智能加速技术多IP池自动分配,数据优化智能模拟百万IP访问,芝麻代理作为动态IP行业的领导者,旨在为各行业提供最优质的网络服务,我们可以为您提供安全高效的IP服务,为您量身打造行业资讯推荐、软件使用技巧,更有专业人士为您定制IP服务,是您建站维护的首要选择。官网可领取免费试用时长,更多问题请点击官网咨询客服。————芝麻动态ip代理运营管理团队

    芝麻IP代理软件支持电脑客户端,安卓手机、ios手机,模拟器,虚拟机,云手机一键更换全国IP地址,欢迎访问: www.zhimaruanjian.com 。

    展开全文
  • 记不起来是哪次看到有一个这样子的讲法,从POJO中再进行一次抽象,如从User中再使用AbstractUser,这样子做有什么好处呢?是为了序列化的应用吗? 今天在MyEclipse的生成代码中又一次看到了,请帮忙解答一下。 [b]...
  • 利用Python机器学习框架scikit-learn,我们自己做一个分类模型,对中文评论信息...之前我写过《 如何用Python从海量文本抽取主题? 》一文,其中有这么一段:为了演示的流畅,我们这里忽略了许多细节。很多内容使用...

    利用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入门好学吗?学爬虫需要具备一定的基础,有编程...发送请求——获得页面——解析页面——抽取并储存内容”的流程来进行,模拟了我们使用浏览器获取网页信息的过程。向服务器发送请求后,会得到返回的页...
  • 文章目录知识抽取任务定义概念目的数据源子任务面向非结构化数据的知识抽取实体抽取关系抽取事件... 具体是什么意思呢,我们看一个例子。 这是一段关于苹果公司的介绍文字,它是属于非结构化数据,通过知识抽取,我
  • 1 简介 关键词抽取就是从文本里面把跟这篇文档...或者将某段时间内几个人的微博拼成一篇长文本,然后抽取关键词就可以知道他们主要在讨论什么话题。 总之,关键词就是最能够反映出文本主题或者意思的词语。但是网络
  • caffe c++ 抽取图片特征

    万次阅读 热门讨论 2015-01-19 22:47:00
    caffe c++批量抽取特征的方法在[1],但是该方法使用中有几个疑问: 1. 如何转换levelDB 格式为...2. ./build/tools/extract_features mini-batch 是代表什么意思,和imagenet_val.prototxt中的batch_size的关系是什么?
  • caffe c++批量抽取特征

    千次阅读 2015-07-27 21:31:25
    caffe c++批量抽取特征的方法在[1],但是该...2. ./build/tools/extract_features mini-batch 是代表什么意思,和imagenet_val.prototxt中的batch_size的关系是什么? 本文主要解决如上两个问题,具体extract_featur
  •    女朋友要做毕业设计,题目是:基于web的信息抽取的研究与实现。     开始想着做个类似新闻发布的玩意儿...这里的交叉和匹配是什么意思? 4.楼下的做过web信息抽取吗?
  • 关键词是指能反映文本主题或者意思的词语,如论文中的Keyword字段。大多数人写文章的时候,不会像写论文的那样明确的指出文章的关键词是什么,关键词自动标注任务正是在这种背景下产生的。 目前,关键词自动标注...
  • 总体样本方差的无偏估计样本方差为什么除以n-1

    万次阅读 多人点赞 2018-08-01 15:02:22
    1)基本概念 我们先从最基本的一些概念入手。 如下图,脑子里要浮现出总体样本,还有一系列随机选取的样本。只要是样本,脑子里就要浮现出...这里有一个重要的假设,就是随机选取的样本与总体样本同分布,它的意思...
  • 共性抽取就是解决重复代码的意思 举个现实当中的例子: 背景:某大型公司 软件工程师 财务人员 公司员工 这三者有什么关系呢? 从上图我们能看到软件工程师与人员同属于公司员工 公司员工也应该有 姓名...
  • 推挽的英文单词:Push-Pull,顾名思义就是推-拉的意思。所以推挽电路又叫推拉式电路。 推挽电路有很多种,根据用法的不同有所差异,但其本质都是功率放大,增大输入信号的驱动能力,且具有两个特点: ①很强的灌电流...
  • 在Think in Java 中对象是将问题空间中的元素...个人注解:在上面这段话的意思是对象时问题空间中元素的抽象物,以及该抽象物(对象)有其特征和行为。我们可以从这段话中分析出怎么样去抽取对象,以及对象的特征:都
  • 数据仓库之ETL

    2017-08-29 19:26:07
    ETL是Extract Transform Load三个英文单词的缩写 中文意思就是抽取、转换、加载。说到ETL就必须提到数据仓库。 先说下背景知识: 信息是现代企业的重要资源,是企业运用科学管理、决策分析的基础。目前,大多数...
  • 设计模式之bridge模式

    2018-02-01 18:01:53
    Bridge模式主要是解决多维度问题,什么意思呢?类似于n*m这个公式,n种具体实现和m种具体的实现,最多可以有n*m种组合方式。 下面这篇文章对Bridge模式讲解的通俗易懂,于是转了过来。 生活中的一个例子:  就拿...
  • 23种设计模式(6)--Bridge模式

    千次阅读 2016-05-18 10:37:24
    Bridge模式主要是解决多维度问题,什么意思呢?类似于n*m这个公式,n种抽象的接口,m种具体的实现,最多可以有n*m种组合方式。 下面这篇文章对Bridge模式讲解的通俗易懂,于是转了过来。 转: http://www.cnb
  • 面向切面编程及横向重复,纵向抽取,什么意思呢?去掉横向重复代码,纵向抽取公共接口。也就是所说面向接口编程,请看下图 aop结构 PlaceOrder等几个功能,他们都有一段公共代码,日志,缓存,事务控制一定是相同的,不同的...
  • 一、AI工程师必备的核心技能 也就是工程师需要从现实实际问题当中抽取...NLU(nature llanguage understand)一个人先用文本或者语音表达自己的意思,然后对面的那个人来理解这个是什么意思。NLG(nature langua...
  • 2020-11-28

    2020-11-28 16:30:36
    文章目录随机数一、#include是什么意思二、使用步骤实例 随机数 通过对标准库的使用来实现随机抽取一个数 提示:以下是本篇文章正文内容,下面案例可供参考 一、#include是什么意思 所谓bai#include就是把后面的...
  • ETL

    2018-03-07 15:06:00
    ETL是做什么的?ETL是建立数据仓库是数据抽取转换加载的过程。ETL工作的实质就是从各个源数据表中提取数据,对数据进行转换,最终加载填充...三个过程的大致意思:1:抽取(Extract) 数据抽取阶段主要是根据数据仓库的主...
  • kettle简介与安装

    2021-06-04 17:02:16
    1.ETL是什么? ETL分别是“Extract”、“Transform”、“Load”三个单词的首字母缩写也即数据抽取、转换、装载的过程,但我们日常往往简称其为数据抽取。 ETL的工具功能:必须对抽取到的数据能进行灵活计算、合并...
  • spring(三)之aop详解(一... 代理对象(Proxy)什么意思? 意思就是访问对象,不会直接去访问,而是通过访问代理对象,间接的去访问要访问的那个对象。比如,如果一个领导A要找C做一件事,A是公司最大领导,B是...
  • Fine-tune是什么意思,中文译为微调。在transfer learning中,对事先训练好的特征抽取网络,直接拿来用在下游任务上。固定其特征抽取层的网络参数,只在原有的网络上增加少量神经元,做最后的分类任务,而且只更新...
  • caffe提取特征用svm进行分类

    千次阅读 2016-09-15 22:31:19
    caffe c++批量抽取特征的方法在[1],但是该...2. ./build/tools/extract_features mini-batch 是代表什么意思,和imagenet_val.prototxt中的batch_size的关系是什么? 本文主要解决如上两个问题,具体extract_featur
  • abstract 抽象

    2015-12-10 22:01:01
    abstract:抽象的意思 什么叫抽象呢?就是你看不大懂的东西咯 它作为一个修饰符,可以修饰类,方法。 它是怎么来的呢? 其实就是:在继承体系中,当多个类中出现相同功能,但是功能主体不同,这时可以进行向上...

空空如也

空空如也

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

抽取什么意思