爬虫及SA和分词

2018.8.2 星期四 11:34

python简单爬图片,查看了爬去微博/招聘/微信 数据,及情感分析;
也用脚本-插件批量下载文本-小说

爬虫 不只python,node和php等也可以

Ⅰ 爬虫选择

比较后,并没有多大选择,也查了 情感分析和中文分词,选择node:
1. 没有那么多需求。只是爬个数据玩,自己需要的数据,可以的话简单分析。不会去爬各大网站内容,自己再做一个内容系统,或者提供什么服务
2. js语法——ES 比较熟悉,最基本/简单的需求node都可以满足。python毕竟也是一门语言,需要仔细学习。选node不光写了js,也加强了node。
3. node也可以查找一些资料及库

Ⅱ 情感分析

# A [Twitter是怎么做情感分析的?长文解读!]
https://yq.aliyun.com/articles/65239

1 引言
1.1 情感分析的应用
情感分析可应用于众多领域。;A. 电子商务 ;B. 市场呼声(Voice of the Market,VOM);C. 消费者呼声(Voice of the Customer,VOC);D. 品牌声誉管理;E. 政府
1.2 推文的特症
从情感分析的角度,我们讨论Twitter的以下几点特征:推文长度、使用的语言、数据可用性、话题范围、

2 相关工作
3 方法
我们使用了不同的特征集和机器学习分类器来确定适用于Twitter情感分析的最佳组合。 我们还尝试了各种预处理操作,处理文本中的标点符号、表情符号、Twitter特定术语以及词干。我们对以下特征进行了研究——一元词串、二元词串、三元词串、否定检测。最后,我们使用不同机器学习算法——朴素贝叶斯、决策树和最大熵模型,来训练我们的分类器。
3.1 数据集
Twitter情感分析面临的主要挑战之一便是标记数据的采集。研究者们公开了以下数据集用于分类器的训练和测试。
3.1.1 Twitter情感语料库 3.1.2 斯坦福Twitter语料库

3.2 预处理
3.2.1 话题标签 3.2.2 用户句柄 3.2.3 链接 3.2.4 表情符号 3.2.5 标点符号 3.2.6 重复字符

3.3 词干提取算法
所有的词干提取算法都属于以下几种主要类型——基于词缀去除的、基于统计的以及混合型的。
第一种类型,即词缀去除算法,是最基本一种词干提取算法。这些词干提取算法应用一组转换规则,试图剥离每个词的前缀和/或后缀[8]。普通的词干提取算法在单词的第N个字符处进行截断。但这很明显在实际场景下并不适用。

另一种广泛使用的著名词干分析器将在下一节介绍。
3.3.1 Porter词干提取算法 3.3.2 词形还原算法

3.4 特征
3.4.1 一元词串 3.4.2 n元词串 3.4.3 否定处理

4 实验
4.1 朴素贝叶斯 4.2 最大熵分类器

5 未来展望
研究支持向量机,为印地语推文构造分类器,使用语义分析改进结果

6 结论
我们使用标注数据集,为Twitter构建了一个情感分类器。同时,为了进行情感分析,我们还探讨了使用两步分类器与否定检测间的相关性。

我们的基准分类器仅使用一元词串特征,达到了约80.00%的准确率。如果使用否定检测或引入二元词串和三元词串,准确率会有所增长。因此,我们可以得出结论,否定检测和高阶n元词串都可用于文本分类。然而,如果我们同时使用否定检测和n元词串,准确率会略微下降。我们还注意到,单步分类器相比两步分类器效果更为突出。而且,一般来说,朴素贝叶斯分类器的性能优于最大熵分类器。

以一元词串+二元词串+三元词串为特征并使用朴素贝叶斯分类器进行训练,我们达到了最佳的分类效果,准确率为86.68%。

# B [自然语言处理]
http://www.cnblogs.com/en-heng/category/882183.html

# C [利用深度学习方法进行情感分析以及在海航舆情云平台的实践]
https://blog.csdn.net/javastart/article/details/56292109
原理解析
1.文本的预处理
由网络爬虫爬取到的原始语料,通常都会带有我们不需要的信息,比如额外的Html标签,所以需要对语料进行预处理。这里的预处理工作主要是为了提取完整的句子,去掉一些多余的标记符号。处理之后我们需要对原始语料进行情感标注,我们可以用-1标记消极情感评论,1标记积极情感评论。

2.分词
为了判断句子中是否存在情感词典中相应的词语,我们需要把句子准确切割为一个个词语,即分词。现有可选择的分词工具有很多,我们可以研读各分词工具的测试报告,根据自己的需求选择合适的分词工具。

3.构建情感词典
情感词典可分为四个部分:积极情感词典、消极情感词典、否定词典以及程度副词词典。为了得到更加完整的情感词典,我们可以收集多个情感词典,对它们进行整合去重,同时需要对部分词语进行调整,以达到尽可能高的准确率。

此外,我们需要根据需求加入某些行业词汇,以增加分类中的命中率。不同行业某些词语的词频会有比较大的差别,而这些词有可能是情感分类的关键词之一。比如手机行业,“耐摔”和“防水”就是在这个领域有积极情绪的词。因此,有必要将这些因素考虑进模型之中。

4.分类
为了简单起见,我们将每个积极情感词语赋予权重1,将每个消极情感词语赋予权重-1,并且假设情感值满足线性叠加原理;我们已经将句子进行分词,如果分词后的词语向量包含相应的词语,就加上其对应的权值,其中,否定词和程度副词会有特殊的判别规则,否定词会导致权值取反,而程度副词则让权值加倍。最后,根据总权值的正负性来判断句子的情感。基本的规则如图所示。

Ⅱ-Ⅱ 中文情感分析

# A [中文情感分类方法简介]
http://ir.hit.edu.cn/~zkli/report/Brief%20Intro%20to%20Sentiment%20Analysis(share).pdf

1. 情感分类有什么用
1. 情感分类的任务有哪些
1. 情感分类的主要方法
1. 使用分词&朴素贝叶斯做实验
1. 几点思考

# B 中文情感分析 (Sentiment Analysis) 的难点在哪?现在做得比较好的有哪几家?
https://www.zhihu.com/question/20700012

# C 中文文本情感分析:基于机器学习方法的思路
https://blog.csdn.net/u013737526/article/details/73201572
1.常用步骤

2.中文分词
1)这是相对于英文文本情感分析,中文独有的预处理。
2)常用方法:基于词典、基于规则、基于统计、基于字标注、基于人工智能。
3)常用工具:哈工大—语言云、东北大学NiuTrans统计机器翻译系统、中科院张华平博士ICTCLAS、波森科技、结巴分词、Ansj分词,HanLP。

3.特征提取
1)文本中拿什么作为特征。
2)常用方法:根据词性(adj、adv、v)、单词进行组合(unigram、bigram)、位置。
3)使用词的组合表示文本,两种方式:词出现与否、词出现的次数。

4.特征选择
1)选择哪些特征,如果把所有的特征都作为特征计算,那计算量非常大,高维稀疏矩阵。
2)常用方法:去停用词,卡方,互信息。
3)常用工具:word2vector ,doc2vec

5.分类模型
1)训练、测试。
1) 常用方法:朴素贝叶斯、最大熵、svm。

6.评价指标
1)准确率
Accuracy = (TP + TN)/(TP + FN + FP + TN) 反映了分类器统对整个样本的判定能力——能将正的判定为正,负的判定为负 。
2)精确率
Precision = TP/(TP+FP) 反映了被分类器判定的正例中真正的正例样本的比重
3)召回率
Recall = TP/(TP+FN) 反映了被正确判定的正例占总的正例的比重

# D sentiment, 基于AFINN的node.js 情感分析
https://www.helplib.com/GitHub/article_135674
https://github.com/thisandagain/sentiment

工作原理
AFINN
AFINN是一个单词列表,它的价格为整数,减五( 负片) 和五( 正) 。 情绪分析是通过交叉检查 string tokens(words, emojis) 和AFINN列表并获得它们各自的分数来执行的。 比较评分是简单的: sum of each token/number of tokens 例如让我们执行以下操作:

返回的对象
得分: 通过添加recongnized单词的情绪值来计算得分。
比较: 输入字符串的比较分数。
标记: 输入字符串中的单词或者符号等所有符号。
单词: 从AFINN列表中找到的输入字符串中的单词列表。
正数: AFINN列表中找到的输入字符串中肯定单词的列表。
负: 在AFINN列表中找到的输入字符串中的否定单词列表。
在这种情况下,爱值值为 3,敏感度为 -2,它的余标记为中性值为 0. 因为字符串有 9个标记,因此结果比较得分如下所示: (3 + -2)/9 = 0.111111111

这种方法使你具有 0个中点,上下界约束为正和负 5 ( 与每个标记相同) 。

$_PS: sentiment-zh_cn :https://github.com/omegacoleman/sentiment-zh_cn

# E Popular NPM sentiment analysis Projects - Libraries.io
https://libraries.io/search?keywords=sentiment+analysis&platforms=NPM

Ⅲ 分词/中文分词

# A [中文分词十年又回顾: 2007-2017]
http://bcmi.sjtu.edu.cn/~zhaohai/pubs/CWS-10Year-Review-2.pdf

# B [中文分词算法总结]
https://www.jianshu.com/p/e978053b0b95

中文分词和搜索引擎
中文分词技术
现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。

# C [有哪些比较好的中文分词方案?]
https://www.zhihu.com/question/19578687

# D 专栏 | 中文分词工具测评
http://www.sohu.com/a/120375125_465975
## 中文分词工具
本文选择了4个常见的分词工具,分别是:哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba,为了对比分词速度,选择了这四个工具的c++版本进行评测。

1、LTP
2、NLPIR
3、THULAC
4、jieba
## 测试数据集
1、SIGHAN Bakeoff 2005 MSR, 560KB
2、SIGHAN Bakeoff 2005 PKU, 510KB
3、人民日报 2014, 65MB

前两个数据集是SIGHAN于2005年组织的中文分词比赛所用的数据集,也是学术界测试分词工具的标准数据集,本文用于测试各大分词工具的准确性,而最后一个数据集规模较大,用于测试分词速度。

$_PS: jieba python
友情链接
https://github.com/baidu/lac 百度中文词法分析(分词+词性+专名)系统
https://github.com/baidu/AnyQ 百度FAQ自动问答系统
https://github.com/baidu/Senta 百度情感识别系统
$_PS: end

nodejs中文分词

# A 3大Node.js中文分词模块对比
http://geek100.com/2945.html
node-segment
nodejieba
node-analyzer

# B Node.JS 中文分词模块
## 1 mmseg-node
一个基于 libmmseg 的 NodeJS 驱动。
Github:https://github.com/zzdhidden/mmseg-node

## 2 nseg
基于 MMSG 中文分词算法。
GitHub:https://github.com/mountain/nseg

## 3 node-segment
node-segment 模块以盘古分词组件中的词库为基础,算法设计也部分参考了盘古分词组件中的算法。
Github:https://github.com/leizongmin/node-segment

# C natural 用 node.js 进行自然语言处理
我们曾经介绍过用Python的TextBlob模块对文本进行情感分析,node.js同样可以进行自然预言处理。natural模块已经支持词法分析、词干分析、分类、语音、反比文档频数权重评价、WordNet、字符串相似度等处理。

目前为止,大多数算法还仅限于英文,以后会逐渐增加多语言支持。现在已支持俄语和西班牙语的词干分析。

python 中文分词

# [中文分词原理及工具]
https://cuiqingcai.com/5844.html

基于规则的分词方法
基于统计的分词方法
基于语义的分词方法
基于理解的分词方法

分词工具
在这里介绍几个比较有代表性的支持分词的 Python 库,主要有:

  1. jieba
    专用于分词的 Python 库,GitHub:https://github.com/fxsjy/jieba,分词效果较好。
  2. SnowNLP
    SnowNLP: Simplified Chinese Text Processing,可以方便的处理中文文本内容,是受到了 TextBlob 的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和 TextBlob 不同的是,这里没有用 NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。GitHub地址:https://github.com/isnowfy/snownlp。
  3. THULAC
    THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,GitHub 链接:https://github.com/thunlp/THULAC-Python,具有中文分词和词性标注功能。THULAC具有如下几个特点:
  4. NLPIR
    NLPIR 分词系统,前身为2000年发布的 ICTCLAS 词法分析系统,GitHub 链接:https://github.com/NLPIR-team/NLPIR,是由北京理工大学张华平博士研发的中文分词系统,经过十余年的不断完善,拥有丰富的功能和强大的性能。NLPIR是一整套对原始文本集进行处理和加工的软件,提供了中间件处理效果的可视化展示,也可以作为小规模数据的处理加工工具。主要功能包括:中文分词,词性标注,命名实体识别,用户词典、新词发现与关键词提取等功能。另外对于分词功能,它有 Python 实现的版本,GitHub 链接:https://github.com/tsroten/pynlpir。

$_PS:推荐NLPIR大数据语义智能分析平台

  1. NLTK
    NLTK,Natural Language Toolkit,是一个自然语言处理的包工具,各种多种 NLP 处理相关功能,GitHub 链接:https://github.com/nltk/nltk。

但是 NLTK 对于中文分词是不支持的,

  1. LTP
    语言技术平台(Language Technology Platform,LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口、可视化工具,并且能够以网络服务(Web Service)的形式进行使用。

LTP 有 Python 版本,GitHub地址:https://github.com/HIT-SCIR/pyltp,另外运行的时候需要下载模型,模型还比较大,下载地址:http://ltp.ai/download.html。

Ⅳ 词云图

基于前端:js2wordcloud,d3.js

python还有其他的分析/可视化工具/库

爬虫选择

2019.2.18 星期二 10:48

主要看你定义的“爬虫”干什么用。
1、如果是定向爬取几个页面,做一些简单的页面解析,爬取效率不是核心要求,那么用什么语言差异不大。
当然要是页面结构复杂,正则表达式写得巨复杂,尤其是用过那些支持xpath的类库/爬虫库后,就会发现此种方式虽然入门门槛低,但扩展性、可维护性等都奇差。因此此种情况下还是推荐采用一些现成的爬虫库,诸如xpath、多线程支持还是必须考虑的因素。

2、如果是定向爬取,且主要目标是解析js动态生成的内容 此时候,页面内容是有js/ajax动态生成的,用普通的请求页面->解析的方法就不管用了,需要借助一个类似firefox、chrome浏览器的js引擎来对页面的js代码做动态解析。 此种情况下,推荐考虑casperJS+phantomjs或slimerJS+phantomjs ,当然诸如selenium之类的也可以考虑。

3、如果爬虫是涉及大规模网站爬取,效率、扩展性、可维护性等是必须考虑的因素时候 大规模爬虫爬取涉及诸多问题:多线程并发、I/O机制、分布式爬取、消息通讯、判重机制、任务调度等等,此时候语言和所用框架的选取就具有极大意义了。

PHP对多线程、异步支持较差,不建议采用。

NodeJS:对一些垂直网站爬取倒可以,但由于分布式爬取、消息通讯等支持较弱,根据自己情况判断。

Python:强烈建议,对以上问题都有较好支持。尤其是Scrapy框架值得作为第一选择。
优点诸多:支持xpath;基于twisted,性能不错;有较好的调试工具;
此种情况下,如果还需要做js动态内容的解析,casperjs就不适合了,只有基于诸如chrome V8引擎之类自己做js引擎。

至于C、C++虽然性能不错,但不推荐,尤其是考虑到成本等诸多因素;对于大部分公司还是建议基于一些开源的框架来做,不要自己发明轮子,做一个简单的爬虫容易,但要做一个完备的爬虫挺难的。

像我搭建的微信公众号内容聚合的网站http://lewuxian.com就是基于Scrapy做的,当然还涉及消息队列等。可以参考下图:

scrapy中文网:http://www.scrapyd.cn/doc/147.html
CasperJS:http://casperjs.org/

knowledge is no pay,reward is kindness
0%