热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

03机器学习_(贝叶斯分类算法与应用)

机器学习算法day02_贝叶斯分类算法及应用课程大纲

机器学习算法day02_贝叶斯分类算法及应用

课程大纲



























朴素贝叶斯算法原理

Bayes算法概述

Bayes算法思想

Bayes算法要点

朴素贝叶斯算法案例1

需求

Python实现

朴素贝叶斯算法案例2

需求

Python实现

 

 

 

 

课程目标:

1、理解朴素贝叶斯算法的核心思想

2、理解朴素贝叶斯算法的代码实现

3、掌握朴素贝叶斯算法的应用步骤:数据处理、建模、运算和结果判定

4、

1. 朴素贝叶斯分类算法原理

1.1 概述

贝叶斯分类算法是一大类分类算法的总称

贝叶斯分类算法以样本可能属于某类的概率来作为分类依据

朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一种

注:朴素的意思是条件概率独立性

 

1.2 算法思想

朴素贝叶斯的思想是这样的:

如果一个事物在一些属性条件发生的情况下,事物属于A的概率>属于B的概率,则判定事物属于A

 

 

通俗来说比如,你在街上看到一个黑人,我让你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?

在你的脑海中,有这么一个判断流程:

1、这个人的肤色是黑色 <特征>

2、黑色人种是非洲人的概率最高 <条件概率:黑色条件下是非洲人的概率>

3、没有其他辅助信息的情况下,最好的判断就是非洲人

这就是朴素贝叶斯的思想基础。

&#160;

再扩展一下,假如在街上看到一个黑人讲英语,那我们是怎么去判断他来自于哪里?

提取特征:

肤色:&#160;黑

语言: 英语

&#160;

黑色人种来自非洲的概率: 80%

黑色人种来自于美国的概率:20%

&#160;

讲英语的人来自于非洲的概率:10%

讲英语的人来自于美国的概率:90%

&#160;

在我们的自然思维方式中,就会这样判断:

这个人来自非洲的概率:80% * 10% = 0.08

这个人来自美国的概率:20% * 90% =0.18

我们的判断结果就是:此人来自美国!

&#160;

其蕴含的数学原理如下:

p(A|xy)=p(Axy)/p(xy)=p(Axy)/p(x)p(y)=p(A)/p(x)*p(A)/p(y)* p(xy)/p(xy)=p(A|x)p(A|y)







朴素贝叶斯分类器

  朴素贝叶斯分类器的表示形式:

&#160;

  当特征为为x时,计算所有类别的条件概率,选取条件概率最大的类别作为待分类的类别。由于上公式的分母对每个类别都是一样的,因此计算时可以不考虑分母,即

&#160;

  朴素贝叶斯的朴素体现在其对各个条件的独立性假设上,加上独立假设后,大大减少了参数假设空间。  

&#160;

&#160;

&#160;

&#160;

&#160;

&#160;

&#160;

&#160;

1.3 算法要点


1.3.1 算法步骤

1、分解各类先验样本数据中的特征

2、计算各类数据中,各特征的条件概率

(比如:特征1出现的情况下,属于A类的概率p(A|特征1),属于B类的概率p(B|特征1),属于C类的概率p(C|特征1)......)

3、分解待分类数据中的特征(特征1、特征2、特征3、特征4......)

4、计算各特征的各条件概率的乘积,如下所示:

判断为A类的概率:p(A|特征1)*p(A|特征2)*p(A|特征3)*p(A|特征4).....

判断为B类的概率:p(B|特征1)*p(B|特征2)*p(B|特征3)*p(B|特征4).....

判断为C类的概率:p(C|特征1)*p(C|特征2)*p(C|特征3)*p(C|特征4).....

......

5、结果中的最大值就是该样本所属的类别

&#160;

1.3.2 算法应用举例

大众点评、淘宝等电商上都会有大量的用户评论,比如:








1、衣服质量太差了!!!!颜色根本不纯!!!

2、我有一有种上当受骗的感觉!!!!

3、质量太差,衣服拿到手感觉像旧货!!!

4、上身漂亮,合身,很帅,给卖家点赞

5、穿上衣服帅呆了,给点一万个赞

6、我在他家买了三件衣服!!!!质量都很差!

0

0

0

1

1

0

&#160;

其中1/2/3/6是差评,4/5是好评

现在需要使用朴素贝叶斯分类算法来自动分类其他的评论,比如:







a、这么差的衣服以后再也不买了

b、帅,有逼格

……

&#160;

&#160;

1.3.3 算法应用流程

1、分解出先验数据中的各特征

(即分词,比如“衣服”“质量太差”“差”“不纯”“帅”“漂亮”,“赞”……)

2、计算各类别(好评、差评)中,各特征的条件概率

(比如 p(“衣服”|差评)、p(“衣服”|好评)、p(“差”|好评) 、p(“差”|差评)……)

3、分解出待分类样本的各特征

(比如分解a: “差” “衣服” ……)

4、计算类别概率

P(好评) = p(好评|“差”) *p(好评|“衣服”)*……

P(差评) = p(差评|“差”) *p(差评|“衣服”)*……

5、显然P(差评)的结果值更大,因此a被判别为“差评”

&#160;

&#160;

2. 朴素贝叶斯分类算法案例1

2.1 需求

客户评论分类:

以在线社区的留言板为例。为了不影响社区的发展,我们要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。过滤这类内容是一个很常见的需求。对此问题建立两个类别:侮辱类和非侮辱类,使用1和0分别标识。

有以下先验数据,使用bayes算法对未知类别数据分类
































帖子内容

类别

&#39;my&#39;,&#39;dog&#39;,&#39;has&#39;,&#39;flea&#39;,&#39;problems&#39;,&#39;help&#39;,&#39;please&#39;

0

&#39;maybe&#39;,&#39;not&#39;,&#39;take&#39;,&#39;him&#39;,&#39;to&#39;,&#39;dog&#39;,&#39;park&#39;,&#39;stupid&#39;

1

&#39;my&#39;,&#39;dalmation&#39;,&#39;is&#39;,&#39;so&#39;,&#39;cute&#39;,&#39;I&#39;,&#39;love&#39;,&#39;him&#39;

0

&#39;stop&#39;,&#39;posting&#39;,&#39;stupid&#39;,&#39;worthless&#39;,&#39;garbage&#39;

1

&#39;mr&#39;,&#39;licks&#39;,&#39;ate&#39;,&#39;my&#39;,&#39;steak&#39;,&#39;how&#39;,&#39;to&#39;,&#39;stop&#39;,&#39;him&#39;

0

&#39;quit&#39;,&#39;buying&#39;,&#39;worthless&#39;,&#39;dog&#39;,&#39;food&#39;,&#39;stupid&#39;

1

&#160;

待分类数据:












&#39;love&#39;,&#39;my&#39;,&#39;dalmation&#39;

?

&#39;stupid&#39;,&#39;garbage&#39;

?

&#160;

&#160;

2.2 模型分析

参见1.3.2

跟1.3.2节中的举例基本一致,中文换成英文即可

&#160;

2.2 Python实现


(1) 词表到词向量的转换函数








from numpy import *

#过滤网站的恶意留言

# 创建一个实验样本

def loadDataSet():

&#160;&#160;&#160;&#160;postingList = [[&#39;my&#39;,&#39;dog&#39;,&#39;has&#39;,&#39;flea&#39;,&#39;problems&#39;,&#39;help&#39;,&#39;please&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;maybe&#39;,&#39;not&#39;,&#39;take&#39;,&#39;him&#39;,&#39;to&#39;,&#39;dog&#39;,&#39;park&#39;,&#39;stupid&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;my&#39;,&#39;dalmation&#39;,&#39;is&#39;,&#39;so&#39;,&#39;cute&#39;,&#39;I&#39;,&#39;love&#39;,&#39;him&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;stop&#39;,&#39;posting&#39;,&#39;stupid&#39;,&#39;worthless&#39;,&#39;garbage&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;mr&#39;,&#39;licks&#39;,&#39;ate&#39;,&#39;my&#39;,&#39;steak&#39;,&#39;how&#39;,&#39;to&#39;,&#39;stop&#39;,&#39;him&#39;],

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[&#39;quit&#39;,&#39;buying&#39;,&#39;worthless&#39;,&#39;dog&#39;,&#39;food&#39;,&#39;stupid&#39;]]

&#160;&#160;&#160;&#160;classVec = [0,1,0,1,0,1]

&#160;&#160;&#160;&#160;return postingList, classVec

# 创建一个包含在所有文档中出现的不重复词的列表

def createVocabList(dataSet):

&#160;&#160;&#160;&#160;vocabSet = set([]) &#160;&#160;&#160;&#160;&#160;#创建一个空集

&#160;&#160;&#160;&#160;for document in dataSet:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;vocabSet = vocabSet | set(document) &#160;&#160;#创建两个集合的并集

&#160;&#160;&#160;&#160;return list(vocabSet)

&#160;

#将文档词条转换成词向量

def setOfWords2Vec(vocabList, inputSet):

&#160;&#160;&#160;&#160;returnVec = [0]*len(vocabList) &#160;&#160;&#160;&#160;&#160;&#160;&#160;#创建一个其中所含元素都为0的向量

&#160;&#160;&#160;&#160;for word in inputSet:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if word in vocabList:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#returnVec[vocabList.index(word)] = 1 &#160;&#160;&#160;&#160;#index函数在字符串里找到字符第一次出现的位置 &#160;词集模型

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;returnVec[vocabList.index(word)] += 1 &#160;&#160;&#160;&#160;&#160;#文档的词袋模型 &#160;&#160;&#160;每个单词可以出现多次

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else: print "the word: %s is not in my Vocabulary!" % word

&#160;&#160;&#160;&#160;return returnVec

&#160;

(2)&#160;从词向量计算概率








#朴素贝叶斯分类器训练函数 &#160;&#160;从词向量计算概率

def trainNB0(trainMatrix, trainCategory):

&#160;&#160;&#160;&#160;numTrainDocs = len(trainMatrix)

&#160;&#160;&#160;&#160;numWords = len(trainMatrix[0])

&#160;&#160;&#160;&#160;pAbusive = sum(trainCategory)/float(numTrainDocs)

&#160;&#160;&#160;# p0Num = zeros(numWords); p1Num = zeros(numWords)

&#160;&#160;&#160;&#160;#p0Denom = 0.0; p1Denom = 0.0

p0Num = ones(numWords); &#160;&#160;#避免一个概率值为0,最后的乘积也为0

p1Num = ones(numWords); &#160;&#160;#用来统计两类数据中,各词的词频 &#160;&#160;&#160;&#160;

p0Denom = 2.0; &#160;#用于统计0类中的总数

p1Denom = 2.0 &#160;#用于统计1类中的总数

&#160;&#160;&#160;&#160;for i in range(numTrainDocs):

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if trainCategory[i] == 1:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p1Num += trainMatrix[i]

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p1Denom += sum(trainMatrix[i])

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p0Num += trainMatrix[i]

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p0Denom += sum(trainMatrix[i])

&#160;&#160;&#160;# p1Vect = p1Num / p1Denom

&#160;&#160;&#160;&#160;#p0Vect = p0Num / p0Denom

&#160;&#160;&#160;&#160;p1Vect = log(p1Num / p1Denom) &#160;&#160;&#160;#在类1中,每个次的发生概率

&#160;&#160;&#160;&#160;p0Vect = log(p0Num / p0Denom) &#160;&#160;&#160;&#160;&#160;#避免下溢出或者浮点数舍入导致的错误 &#160;&#160;下溢出是由太多很小的数相乘得到的

&#160;&#160;&#160;&#160;return p0Vect, p1Vect, pAbusive

&#160;

(3)&#160;根据现实情况修改分类器

注意:主要从以下两点对分类器进行修改

① 贝叶斯概率需要计算多个概率的乘积以获得文档属于某个类别的概率,即计算p(w0|1)p(w1|1)p(w2|1)。如果其中一个概率值为0,那么最后的乘积也为0

② 第二个问题就是下溢出,这是由于太多过小的数相乘造成的。由于大部分因子都非常小,所以程序会下溢出或者得不到正确的答案。解决办法是对乘积取自然对数这样可以避免下溢出或者浮点数舍入导致的错误。

③ 每个单词的出现与否作为一个特征,被称为词集模型;在词袋模型中,每个单词可以出现多次。







#朴素贝叶斯分类器

def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):

&#160;&#160;&#160;&#160;p1 = sum(vec2Classify*p1Vec) + log(pClass1)

&#160;&#160;&#160;&#160;p0 = sum(vec2Classify*p0Vec) + log(1.0-pClass1)

&#160;&#160;&#160;&#160;if p1 > p0:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return 1

&#160;&#160;&#160;&#160;else: return 0

def testingNB():

&#160;&#160;&#160;&#160;listOPosts, listClasses = loadDataSet()

&#160;&#160;&#160;&#160;myVocabList = createVocabList(listOPosts)

&#160;&#160;&#160;&#160;trainMat = []

&#160;&#160;&#160;&#160;for postinDoc in listOPosts:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trainMat.append(setOfWords2Vec(myVocabList, postinDoc))

&#160;&#160;&#160;&#160;p0V, p1V, pAb = trainNB0(array(trainMat), array(listClasses))

&#160;&#160;&#160;&#160;testEntry = [&#39;love&#39;,&#39;my&#39;,&#39;dalmation&#39;]

&#160;&#160;&#160;&#160;thisDoc = array(setOfWords2Vec(myVocabList, testEntry))

&#160;&#160;&#160;&#160;print testEntry, &#39;classified as: &#39;, classifyNB(thisDoc, p0V, p1V, pAb)

&#160;&#160;&#160;&#160;testEntry = [&#39;stupid&#39;,&#39;garbage&#39;]

&#160;&#160;&#160;&#160;thisDoc = array(setOfWords2Vec(myVocabList, testEntry))

&#160;&#160;&#160;&#160;print testEntry, &#39;classified as: &#39;, classifyNB(thisDoc, p0V, p1V, pAb)


(4)&#160;运行测试








>>>reload(bayes)

>>>bayes.testingNB()

[&#39;love&#39;,&#39;my&#39;,&#39;dalmation&#39;] classified as: 0

[&#39;stupid&#39;,&#39;garbage&#39;] classified as: 1


3、朴素贝叶斯分类算法案例2

3.1 需求

利用大量邮件先验数据,使用朴素贝叶斯分类算法来自动识别垃圾邮件

&#160;

3.2 python实现








#过滤垃圾邮件

def textParse(bigString): &#160;&#160;&#160;&#160;&#160;#正则表达式进行文本解析

&#160;&#160;&#160;&#160;import re

&#160;&#160;&#160;&#160;listOfTokens = re.split(r&#39;\W*&#39;,bigString)

&#160;&#160;&#160;&#160;return [tok.lower() for tok in listOfTokens if len(tok) > 2]

&#160;

def spamTest():

&#160;&#160;&#160;&#160;docList = []; classList = []; fullText = []

&#160;&#160;&#160;&#160;for i in range(1,26): &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#导入并解析文本文件

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;wordList = textParse(open(&#39;email/spam/%d.txt&#39; % i).read())

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;docList.append(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fullText.extend(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;classList.append(1)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;wordList = textParse(open(&#39;email/ham/%d.txt&#39; % i).read())

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;docList.append(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fullText.extend(wordList)

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;classList.append(0)

&#160;&#160;&#160;&#160;vocabList = createVocabList(docList)

&#160;&#160;&#160;&#160;trainingSet = range(50);testSet = []

&#160;&#160;&#160;&#160;for i in range(10): &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#随机构建训练集

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;randIndex = int(random.uniform(0,len(trainingSet)))

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;testSet.append(trainingSet[randIndex]) &#160;&#160;&#160;#随机挑选一个文档索引号放入测试集

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;del(trainingSet[randIndex]) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#将该文档索引号从训练集中剔除

&#160;&#160;&#160;&#160;trainMat = []; trainClasses = []

&#160;&#160;&#160;&#160;for docIndex in trainingSet:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trainMat.append(setOfWords2Vec(vocabList, docList[docIndex]))

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trainClasses.append(classList[docIndex])

&#160;&#160;&#160;&#160;p0V, p1V, pSpam = trainNB0(array(trainMat), array(trainClasses))

&#160;&#160;&#160;&#160;errorCount = 0

&#160;&#160;&#160;&#160;for docIndex in testSet: &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#对测试集进行分类

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;wordVector = setOfWords2Vec(vocabList, docList[docIndex])

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if classifyNB(array(wordVector), p0V, p1V, pSpam) != classList[docIndex]:

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;errorCount += 1

&#160;&#160;&#160;&#160;print &#39;the error rate is: &#39;, float(errorCount)/len(testSet)



推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
author-avatar
天雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有