OLTP与OLAP
OLTP(On-Line Transaction Processing):联机事务处理过程
也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理。数据量少,DML频繁,并行事务处理多,但是一般都很短。
OLAP(On-Line Analytical Processing):联机分析处理
联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。具有共享多维信息的快速分析的特征。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
技术体系构成
(1)数据获取层
对于互联网大数据而言,数据的获取主要有三类方法,即网络爬虫、网络探针以及ETL(Extract-Transform-Load)工具的方法。
(2)大数据计算与存储层
这个层次上的功能组件最为丰富,实现存储和计算两个功能。这里的计算和“数据挖掘模型与算法”中的计算并非相同的含义。这个层次上的计算是指面向大数据分析的一些底层算法,典型的包括排序、搜索、查找、最短路径、矩阵运算等。
(3) 数据挖掘模型与算法层
这个层次对采集的数据进行处理,根据具体应用需求,运用大数据分析算法进行数据分析,建立相关模型。然后可以利用这些模型进行在线数据流分析,或批量数据分析。由于所处理的互联网大数据类型繁多,因此需要有相应的处理算法。
(4)应用领域技术层
在这个层次,主要涉及到与具体应用领域有关的技术。这些技术通常就与用户UI、系统管理、输出有关。
网络爬虫
网络爬虫是一种计算机自动程序,它能够自动建立到WEB服务器的网络连接,访问服务器上的某个页面或网络资源,获得其的内容,并按照页面上的超链接进行更多页面的获取。
网络爬虫内核技术
网络爬虫内核技术构成:爬虫的基本功能,即获取页面所需要的功能模块构成,是每一种爬虫都需要实现的功能,通常包括建立网络连接、页面请求与解析、链接分析、爬行队列管理等基础性工作。
首先是由Web服务器连接器向指定的Web服务器发起连接请求,在建立爬虫和Web服务器之间的网络连接之后,在该连接上向服务器发送URL页面请求命令,Web服务器反馈页面内容,即HTML编码的文本信息,由页面解析器对HTML文本进行分析,提取其中所包含的URL,对URIL 进行过滤,根据所设定的爬行策略,将每个URL放人到URL队列的适当位置。而当某个URL对应的页面爬行完毕后,连接器从队列中获取下一个URL作为新的爬行起点。上述过程不断地重复下去。
Web服务器连接器
WEB服务器连接器:(连接使用的软件:Apache、tomcat、websocket服务器)WEB服务器是一种带有可执行框架的软件系统,进行连接超时时间和请求超时时间的设置,以确保自身运行的正确性
页面解析器
页面解析器:从爬取的网页提取出有价值的信息。
爬行策略
对爬行过程中从每个页面解析得到的超链接进行合适的安排,即按照什么样的顺序对这些超链接进行爬行,这就是爬行搜索策略。
图的遍历就是解决节点的访问顺序问题。图的遍历算法有两种,即深度优先算法和宽度优先算法。
(*)爬虫陷入
不管是宽度优先策略还是深度优先策略,都可能在页面内部形成某种环状,从而导致蜘蛛爬行在某一个站点陷入死循环。
(*)反爬虫技术
识别爬虫的方法:
(1)通过IP与访问间隔等请求模式的识别。
(2)通过Header内容识别。
(3)通过Cookie信息识别。
(4)通过验证码识别。
(5)通过对客户端是否支持JS的分析来识别。
(6)通过是否遵循Robots协议来识别是否友好。
反制爬虫的技术:
(1)通过非200/304的Response Status 禁止访问
(2)封禁IP的访问权限
(3)使用验证码增加采集难度
(4)使用页面异步加载增加采集难度
(5)动态调整页面难度
(6)设置蜜罐
反反爬虫的技术:
反爬虫技术 | 具体操作 |
---|---|
针对IP与访问间隔限制 | 不使用真实IP地址,利用代理服务器或者使用云主机等方式进行IP的切换。在python中使用request的session.get方法调用proxies实现通过代理进行采集。 |
针对Header的内容验证 | 使用Selenium或其他内嵌浏览器进行浏览器的访问和模拟,同时构造合理的Headers信息,主要包括User Agent和Hosts信息。 |
针对Cookies验证。 | 使用不同的线程来记录访问的信息,如python中的requests, session,为每个线程保存Cookies,每次请求的Header均附上正确的Cookies。 |
针对验证码 | 目前主流的验证码破解主要有两种:机器图像识别与人工打码,此外还可以使用浏览器插件绕过验证码的类似技术。 |
针对页面异步加载与客户端JS支持判断 | 可以使用Selenium或PhantomJS进行JS解析并执行页面内获取所需要的正确的JS方法/请求 |
针对动态调整页面结构 | 采集页面.而后根据采集到的页面再进行分类处理,可以采用Selenium加载浏览器,按照信息的区域进行采集的方式进行尝试采集 |
针对蜜罐方式拦截 | 首先分析蜜罐的结构,判断是使用表单隐藏字段使用隐藏的页面.或者是使用其他方法的蜜罐.分析到异常之后,在提交表单和采集页面时绕过蜜罐 |
(*)PR计算
P R ( u ) = ∑ v ∈ B u P R ( v ) L ( v ) \\PR(u)= \sum_{v\in B _{u}} \frac {PR(v)}{L(v)}\\ PR(u)=v∈Bu∑L(v)PR(v)
该式中,L(v)为页面v所指向的页面个数,因此这个式子相当于把某个页面的重要性平均分配给它所指向的每个页面。
但页面除了可以通过指向它的超链接进人该页面外.还有其他途径可以直接访问该页面,如通过浏览器提供的收藏夹或直接输人网址等,因此页面的重要性应当还有一部分要留给这些直接访问方式,在Page和Brin的原始文章中,就引人了一个参数d,称为阻尼因子。这样对于某个页面u,其PR值就可以改写为:
P
R
(
u
)
=
1
−
d
+
d
∑
v
∈
B
u
P
R
(
v
)
L
(
v
)
\\PR(u)=1-d+d \sum_{v\in B _{u}} \frac {PR(v)}{L(v)}\\
PR(u)=1−d+dv∈Bu∑L(v)PR(v)
d取值一般取值为0.85
后来的学者认为,一个页面被访问的随机性应当来自其他所有页面,因此公式被修正为:
P
R
(
u
)
=
1
−
d
N
+
d
∑
v
∈
B
u
P
R
(
v
)
L
(
v
)
\\PR(u)= \frac{1-d}{N}+d \sum_{v\in B _{u}} \frac {PR(v)}{L(v)}\\
PR(u)=N1−d+dv∈Bu∑L(v)PR(v)
词性识别
分词
(*)基于词典的分词方法,即通过设定词典,按照一定的字符串匹配方法,把存在于词典中的词从句子中切分出来。
• 词典分词三要素:即分词词典、文本扫描顺序和匹配原则。
• 文本的扫描顺序有正向扫描、逆向扫描和双向扫描。
• 匹配原则主要有最大匹配、最小匹配、逐词匹配和最佳匹配。
(*)基于统计的分词方法 其主要思想为:词是稳定的组合。在统计分词中,采用了各种方法来衡量这种稳定性。只要这种稳定性达到一定程度就可以认为一个词,这是该方法区别于前一种方法的主要地方。
• 统计模型是该方法的核心。通常先对给定的训练文本建立对应的统计模型,然后基于该统计模型就可以给任意输入的文本进行词汇切分。
• 分词方法中所应用的统计模型有条件随机场模型CRF 、隐Markov 模型HMM和最大熵模型,同时还有经典的模型N-gram模型,随后的神经网络模型就是基于Ngram模型构造出来的。
词性标注
词性标注基于统计的方法,其基本步骤为:
• 制定词性标志集;
• 选取部分自然语料进行人工词性标注;
• 利用统计理论进行运算建立统计模型;
• 根据统计模型进行词性标注。
(*)新词
新词:即未登录词,指未在词典中出现过的词。新词识别主要包括两项具体任务:
1.候选新词的提取以及垃圾字符串的过滤;
2.新词的词性预测。
(*)停用词
•停用词在不同的文本分析任务中有着不同的定义,在基于词的检索系统中,停用词是指出现频率太高、没有太大检索意义的词。
•去除停用词能够节省存储空间、提高搜索效率。在文本分类任务中,停用词由于出现频率高会导致统计模型选择的特征词难以表示该类别的特征,导致分类结果变差。
• 停用词表有通用停用词表和专用停用词表之分,其生成方法有人工构造和基于统计的方法两种方式。
语义分析技术
词汇级别的语义技术
词汇级别语义分析的基本任务通常包括对两个词汇的语义关系进行判断,对两个词汇语义相关度进行计算。由于词汇本身所能提供的信息量非常少,因此在词汇级别上进行语义分析,通常需要借助一定的语义知识库或语料库。
词向量
词向量(Word Embedding),顾名思义,就是采用向量来表示词。它是一种基于语义的词汇表示方法,是一种词汇语义表示和处理方法。它的特点是将每个词汇表示为一个固定长度的向量,
词向量的常见用法:
(1)直接用于神经网络模型的输入层。
(2)作为辅助特征扩充现有的特征。
(3)用于挖掘词与词之间的关系
(4)用于机器翻译
(5)用于图像理解,将图像与句子关联起来。
词向量的构造方式有两种,即One-hot Representation 和Distributed Representation。
(*)One-hot Representation
• One-hot Representation表示方法是把每个词表示成一个很长的向量.这个向量的维度是整个语料库中词的总数,每一维代表语料库中的一个词,因此每个向量中只有个元素为1.其他的为0。
•One-hot Representation的表示方法存在很多问题,它只能说明词是否出现,而不能表达词与词之间的关系,
•One hotRepresentation还会导致维数灾难”,在语料库规模不断增大的情况下,该语科造的词表就不断增长,从而导致词向量的维度不断增加带来“维数灾难”。
(*)Distributed Representation
采用Distributed Representation表示方法来将词汇表示成为种低维实数向量,避全了稀疏矩阵带来的“维数灾难”,并且可以通过语义生成向量。其基本思想是通过训练将每个词映射成一个固定维度的向量,通过词之间的距离(欧氏距离、余弦相似度)来判断两词之间的语义相似度,一般该向量的维度远小于该语料库词表的大小。
(*)Word2vec
Word2vec是Google在2013年开源的一款将词表示为实数值向量的高效工具,Word2vec能够通过训练,把文本内容的处理转化为向量空间中的向量运算,向量空间上的相似度可以看作文本语义上的相似度。同时,Word2vec采用连续词袋模型和Skip Gram模型,具有高效性。
句子级别的语义技术
在句子级别上的语义分析,要区分句法结构和语义结构。
• 在句子级别上的语义分析,要区分句法结构和语义结构。句法结构关系是从语法的角度出发,对句子中的词与词之间的关系进行概括和分类,句法结构的成分为句法成分。
•语义结构关系是从语 义角度出发,对所要分析的句子 进行构成成分和结构关系的判断。不同于句法结构分析,在语义结构中,构成成分是种语义成分,包括动作行为、性质状态,站事.受事、工具、处所等。
(*)句子级别的语义分析与词汇级别的语义分析的区别
一般来说,词汇级语义分析通过对两个词汇的语义关系进行判断与相似度计算,在词汇级别上进行语义分析,句子级语义分析则试图通过句法与语义结构分析整个句子所表达的语义。
(*)命名实体识别技术
命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指对非结构化得文本信息进行结构化处理,获得结构化要素,即在整段的文字信息中识别出以名称为标识得实体,将其提取出来,主要包括人名、地名、机构名、专有名词等。命名实体识别技术通常包括两部分:(1)实体边界识别;(2) 确定实体类别。
• 基于机器学习两种经典模型( HMM 和 CRF )、四种文本相似度算法( TF-IDF 、基于空间向量的余弦算法、隐形语义标引、主题模型-LDA)
隐马尔可夫模型(HMM) 用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。
条件随机域模型(CRF) 传统机器学习的算法,是一种无向图模型,近年来在分词、词性标注和命名实体识别等序列标注任务中取得了很好的效果。
(*)歧义处理
中文中的歧义问题通常分为三类,即交集型歧义、组合型歧义和真歧义。
• 交集型歧义:汉字字符串具有AJB形式,并且AJ和JB都是一个汉语词汇,此时的汉字子串J称为交集串。
• 组合型歧义:如果汉字字符串AB是一个词汇,但是在文本中至少存在一个前后语境C,使得在语境C的约束下,切分后的A、B在语法和语义上都成立,那么称汉字串AB为多义组合型歧义字段。
• 真歧义:即如果某一歧义字段,不结合其他信息,人也无法判断出其正确的切分方式,则称其为真歧义字段。
歧义消解主要分为两种方法,一种是基于规则的分词消歧,一种是基于统计方法的分词消歧,也可以是这两种方法的组合,即基于规则消歧无效时,使用基于统计的方法进行消歧。
• 基于规则的分词消歧,采用语义、语法或者词性等规则对歧义字段进行消歧。这是一种启发式方法,需要先验知识。
• 基于统计方法的分词消歧,通过求歧义字段中某些词出现的概率,某种切分方式的概率等一些概率值,来对歧义进行划分。
正则表达式的组成
正则表达式由一些普通字符和一些元字符组成。
• 普通字符:包括大小写的字母和数字;
• 元字符:可以匹配某些字符形式的具有特殊含义的字符。元字符从
• 功能上大致分为:限定符、定位符。
• * . + ? $ ( ) [ ] { } \ /如果要当作普通字符,用\转义。
正则表达式—范围
符号 | 含义 | 示例 | 解释 |
---|---|---|---|
\ | 转义符 | * | 符号“*” |
[ ] | 指定了其中一个字符的出现的可能 | [abc] | a、b、c中的任意1个字符 |
[^ ] | 不接收的字符列表 | [^abc] | 除a、b、c之外的任意1个字符 |
- | 连字符 | [0-9a-z] | 匹配0-9的任意数字或a-z任意小写字母 |
+ | 匹配前面的子表达式一次或多次 | ab+ | 匹配“ab”、“abbb…”不能匹配“a” |
正则表达式—定位符
• 符定位符用于规定匹配模式在目标字符串中的出现位置。
符号 | 含义 | 示例 | 解释 |
---|---|---|---|
^ | 匹配模式必须出现一行开头 | ^[0-9]+[a-z]* | 以至少1个数字开头,后接任意个小写字母的字符串 |
$ | 匹配模式必须出现在一行结尾 | ^[0-9]-[a-z]+$ | 以1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串 |
\b | 匹配单词边界 | ab\b | 匹配字符串中的ab |
\B | 匹配对象必须位于单词开头和结尾的两个边界之内 | er\B | 匹配 verb 中的 ‘er’,但不能匹配 never中的 ‘er’ |
符号 | 含义 |
---|---|
\s | 匹配单个空格,包括tab键和换行符 |
\S | 匹配出单个空格符之外的所有字符,\S与\s互为逆运算 |
\d | 匹配从0~9的数字,等效于 [0-9] |
\D | 匹配任意一个非数字字符,等效于 [^0-9],为\d的逆运算。 |
\w | 匹配字母,数字或者下划线字符,等效于 [A-Za-z0-9_] |
\W | 匹配所有与\w不匹配的字符,与\w互为逆运算 |
. | 用于匹配除换行符之外的所有字符 |
正则表达式—量词
符号 | 含义 | 示例 | 解释 |
---|---|---|---|
* | 指定字符重复0次或n次 | (abc)* | 仅包含任意个abc的字符串 |
+ | 指定字符重复1次或n次 | x+(abc)* | 以至少1个x开头,后接若干个abc的字符串 |
? | 指定字符重复0次或1次 | m+abc? | 以至少1个m开头,后接ab或abc的字符串 |
{n} | 只能输入n个字符 | [abcd]{3} | 由abcd中字母组成的任意长度为3的字符串 |
{n,} | 指定至少 n 个匹配 | [abcd]{3,} | 由abcd中字母组成的任意长度不小于3的字符串 |
{n,m} | 指定至少 n 个但不多于m 个匹配[abcd]{3,5} | 由abcd中字母组成的任意长度不小于3,不大于5的字符串 |
正则表达式—优先级
优先级 | 操作符 | 说明 |
---|---|---|
1 | \ | 转义符 |
2 | (),(? : ),(?=),[] | 圆括号和方括号 |
3 | *,+,?,{n},{n,},{n,m} | 限定符 |
4 | ^,$,\anyMatchcharacter | 位置顺序 |
5 | | | 或操作 |
//匹配身份证号码
^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
//匹配邮箱格式
^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$
//匹配电话号码
^1[3|4|5|8][0-9]\d{4,8}$
//手机号码 以 13* 14* 15* 18*的手机开头的11位手机号码
正则表达式—分组
符号 | 含义 | 示例 | 解释 |
---|---|---|---|
| | 匹配“|”之前或之后的表达式 | ab|cd | 匹配ab或者cd |
( ) | 将子表达式分组 ,“()”符号包含的内容必须同时出现在目标对象中 | (abc)[0-9] | abc0、abc1…abc9 |
python的re模式
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符 |
//分组
e="今天是2019-06-01"
re.sub(r"(\d{4})-(\d{2})-(\d{2})","$",e)
'今天是$'
re.sub(r"(\d{4})-(\d{2})-(\d{2})",r"\2/\3/\1",e)
'今天是06/01/2019'