正则表达式在NLP中的基本应用

正则表达式的作用:

(1)将文档内容从非结构化转为结构化以便后续的文本挖掘

(2)去除“噪声”,在处理大量文本片段的时候,有非常多的文字信息与最终输出的文本无关。这些无关的片段称之为“噪声”。

1. 匹配字符串

在Python中会使用re模块来实现正则表达式。

re.search(regres,string)

该方法可也检查这个string字符串是否匹配正则表达式regex。如果表达式匹配则会返回一个match对象,如果没有匹配,则返回None。

例1:获取包含“爬虫”这个关键字的句子

查找哪些语句包含“爬虫”这个关键字,python的代码实现如下:

import re

text_string = "文本最重要的涞源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。" \

"利用一个爬虫抓取到网络中的信息。爬取的策略有广度爬取和深度爬取。" \

"根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分。"

regrex = "爬虫"

p_string = text_string.split("。") # 以句号为分隔符,通过split切分

for line in p_string:

if re.search(regrex,line) is not None: # search方法是用来查找匹配当前行是否匹配这个regrex,返回的是一个match对象

print(line) # 如果匹配到,打印这行信息

上述代码的运行结果:

利用一个爬虫抓取到网络中的信息

根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分

同理,查找哪些语句包含“文本”这个关键字,python的代码实现如下:

import re

text_string = "文本最重要的涞源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。" \

"利用一个爬虫抓取到网络中的信息。爬取的策略有广度爬取和深度爬取。" \

"根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分。"

regrex = "文本"

p_string = text_string.split("。") # 以句号为分隔符,通过split切分

for line in p_string:

if re.search(regrex,line) is not None: # search方法是用来查找匹配当前行是否匹配这个regrex,返回的是一个match对象

print(line) # 如果匹配到,打印这行信息

代码运行结果如下:

文本最重要的涞源无疑是网络

我们要把网络中的文本获取形成一个文本数据库

例2: 匹配任意一个字符

正则表达式中,有一些保留的特殊符号可以帮助我们处理一些常用逻辑。

符号

含义

.

匹配任意一个字符

举例:

正则表达式

可以匹配的例子

不能匹配的例子

“a.c”

“abc”,“branch”

“add”,“crash”

“…t”

“bat”,“oat”

“it”,“table”

提示:"."代替任何单个字符(换行符除外)

现在演示,如何查找包含“爬”+任意一个字的句子,代码如下:

import re

text_string = "文本最重要的涞源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。" \

"利用一个爬虫抓取到网络中的信息。爬取的策略有广度爬取和深度爬取。" \

"根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分。"

regrex = "爬."

p_string = text_string.split("。") # 以句号为分隔符,通过split切分

for line in p_string:

if re.search(regrex,line) is not None: # search方法是用来查找匹配当前行是否匹配这个regrex,返回的是一个match对象

print(line) # 如果匹配到,打印这行信息

运行结果如下:

利用一个爬虫抓取到网络中的信息

爬取的策略有广度爬取和深度爬取

根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分

同理,查找包含“用户”+任意一个字的句子,代码如下:

import re

text_string = "文本最重要的涞源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。" \

"利用一个爬虫抓取到网络中的信息。爬取的策略有广度爬取和深度爬取。" \

"根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分。"

regrex = "用户."

p_string = text_string.split("。") # 以句号为分隔符,通过split切分

for line in p_string:

if re.search(regrex,line) is not None: # search方法是用来查找匹配当前行是否匹配这个regrex,返回的是一个match对象

print(line) # 如果匹配到,打印这行信息

代码运行结果如下:

根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分

例3:匹配起始和结尾字符串

符号

含义

[ ]

匹配多个字符

举例:

“[bcr]at” 代表的是匹配"bat" "cat"以及 “rat”

以下文字,句子和句子之间以逗号分隔

​ [重要的]今年第七号台风23日登陆广东东部沿海地区。

​ 上海发布车库销售监管通知:违规者暂停网签资格。

​ [紧要的]中国对连发强硬信息,印度急切需要结束对峙。

希望提取以[重要的]或者[紧要的]为起始的新闻标题。代码如下:

import re

text_string = ["[重要的]今年第七号台风23日登陆广东东部沿海地区。","上海发布车库销售监管通知:违规者暂停网签资格。","[紧要的]中国对连发强硬信息,印度急切需要结束对峙。"]

regrex = "^\[[重紧]..\]"

for line in text_string:

if re.search(regrex,line) is not None:

print(line)

else:

print('not match')

运行结果如下:

[重要的]今年第七号台风23日登陆广东东部沿海地区。

not match

[紧要的]中国对连发强硬信息,印度急切需要结束对峙。

观察数据,我们发现一些新闻标题是以"[重要的]" “[紧急的]“为起始,所以需要添加”^“特殊符号代表起始,之后因为存在"重"或"紧”,所以我们使用”[ ]“匹配多个字符,然后以”." “.” 代表之后的任意两个字符。

2.使用转义符

上述代码中,使用

"\"

为转义符,因为"[ ]"在正则表达式中是特殊符号。

如果需要匹配文本中的字符

"\"

,那么使用编程语言表示的正则表达式里将需要4个反斜杠

"\\\\"

:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。在Python中可使用

r"\\"

表示。匹配一个数字的

"\\d"

可以写成

r"\d"

。有了原生字符串,表达式更为直观。

举例:匹配字符串中的反斜杠"nee\dle"。

import re

if re.search("\\\\","I have one nee\dle"):

print("match it")

else:

print("not match")

运行结果:match it

另一种写法:

if re.search(r"\\", "I have one nee\dle"):

print("match it")

else:

print("not match")

3. 抽取文本中的数字

(1)通过正则表达式匹配年份

"[0-9]“代表的是从0到9的所有数字,相对的”[a-z]"代表的是从a到z的所有小写字母。

例:首先定义一个list分配一个变量strings,匹配年份是1000年~2999年之间。代码如下:

import re

year_strings = []

strings = ['war of 1812','There are 5280 feet to a mile','Happy New Year 2016!']

for string in strings:

# print(string)

if re.search("[1-2][0-9]{3}",string):

year_strings.append(string)

print(year_strings)

上述代码中

"[1-2][0-9]{3}"

表示的是:字符串有英文有数字,匹配其中的数字部分,并且是在1000~2999之间,{3}代表的是重复之前的[0-9]三次,是

[0-9][0-9][0-9]

的简化写法。

(2)抽取所有的年份

使用Python中的re模块的另一个方法findall()来返回匹配带正则表达式的那部分字符串。

re.findall("[a-z]","abc1234")

得到的结果是

["a","b","c"]

例:定义一个字符串years_string,其中的内容是"2015 was a good year, but 2016 will be better!"。现在抽取一下所有的年份。代码如下:

import re

years_string = "2016 was a good year, but 2017 will be better!"

years = re.findall('[2][0-9]{3}',years_string)

print(years)

运行结果:[‘2016’, ‘2017’]

python实践心得体会_“Python自然语言实践”——总结(一),实战相关推荐

  1. 做python的心得体会_实训python的心得体会

    如何学习Python的一些总结 C++.Java乃至C#都可以看做是同一类型的语言:C++还算灵活,但纷繁复杂的语法使得生产效率低下,Java提高了生产效率,却损失了灵活性;C#算是在生产效率和灵活性 ...

  2. 大学生python实验心得体会_大学生实训心得体会3篇

    转眼间为期两个星期的实训就结束了,但是安利公司的物流配送.黄埔港.益邦物流公司.南沙港以及学校里面的航海模拟实验中心.轮机实训实验楼这些实训过程仍历历在目.以下是小编整理的大学生实训心得体会,欢迎阅读 ...

  3. python数据分析心得体会_数据分析心得体会

    数据分析心得体会 在数据分析这门课程当中主要学习了 numpy 和 pandas 和数据挖掘的知识,学习过 程很充实,也不是很难. 首先学习了 Numpy, NumPy(Numerical Pytho ...

  4. 大学生python实验心得体会_大学生实验心得体会精选例文【三篇】

    大学生实验心得体会精选例文[三篇] 通过该实验,对所学的知识有了进一步的了解.在实验的过程 中,出现了一些问题,不过最后都得以解决.不过通过这些错误,使 我对这些知识点更加印象深刻. ERP 是一门十 ...

  5. 大学生python实验心得体会_最新大学生实验心得体会范文汇总

    大学生实验心得体会范文汇总 实验讲授有助于培养学生求真务实的科学精神.学习不仅需要智力. 能力 , 更需要求真务实的科学精神.下面给大家分享一些关于学生实 验心得体会 , 方便大家学习. 学生实验心得 ...

  6. 大学生python实验心得体会_大学生实验心得与感悟范文5篇

    实验是检验真理的标准,因此实验所带来的意义不可估量.接下来是小编为大家整理的大学生实验心得与感悟范文5篇,希望大家喜欢! 大学生实验心得与感悟范文1 一直以来都觉得数学是门无用之学.给我的感觉就是好晕 ...

  7. 大学生python实验心得体会_大学生实验心得

    作为一名大一的学生,在学校里做计算机实验,结束后,有哪些感悟呢?下面是由出国留学网小编为大家整理的"大一计算机实验心得",仅供参考,欢迎大家阅读.第一次实验是双绞线的制作,通过这个 ...

  8. 学科实践活动感悟50字_社会实践心得体会50字

    社会实践心得体会 50 字 导语: 这次暑期社会实践, 使我的综合素质得到了进步, 思想更加成熟,希看以后还有这样的机会,让我得到更好. 更全面的锻炼.以下是品才网小编整理的社会实践心得体会 50 字 ...

  9. 组装我的计算机社会实践活动,暑期电脑销售社会实践心得体会

    暑期电脑销售社会实践心得体会 "实践是检验真理的唯一标准",但同时,实践也可以是我们所学知识的试刀石.下面是小编分享给大家的暑期电脑销售社会实践心得体会,希望能给您带来帮助! 暑期 ...

最新文章

  1. java is number_数据类型----Number
  2. SAP修改科目为未清项管理和行项目显示
  3. ie php文件,IE(HTTPS):从php文件生成pdf不起作用
  4. unlegal android,百度地图定位 Cordova 插件 cordova-plugin-baidumaplocation
  5. mysql数据库 auto_increment_mysql数据库 auto_increment
  6. pthread_cleanup_push()/pthread_cleanup_pop()
  7. 用VB产生随机任意大小文件挤满硬盘
  8. universe是什么牌子_【寰宇影视】品牌介绍→寰宇电影_寰宇娱乐_买购网
  9. Nginx主配置文件的优化-nginx主配置文件的优化
  10. 渗透技术——ARP攻击
  11. linux的软件源修改
  12. 计算机电源大小,常见电脑主板和电源尺寸
  13. 路由器网口1一直闪烁正常吗_路由器灯怎么闪才正常
  14. java 代码书写规范_代码书写规范和命名规范
  15. Linux下sqlite3移植与编程
  16. Weston 纹理倒置(render-gl)
  17. html弹性盒子垂直排列,css3弹性盒子布局
  18. 机器学习和特征工程理论与python代码实现 晓物智联
  19. 今天,我看到了中国电影的未来
  20. 计算两个日期相隔的时间

热门文章

  1. Java Web应用程序的反跨站点脚本(XSS)过滤器
  2. MySQL数据库创建用户root@%
  3. Bootstrap的学习
  4. 如何通过 PL/SQL Developer 将 Excel 数据导入 Oracle 对应的表中
  5. java事件编程_java基础 ---Swing事件编程
  6. 为什么说PHP是很糟糕的,也是很好的编程语言
  7. C/C 输入输出缓冲区
  8. action mutation 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
  9. 730阵列卡支持多大硬盘_凯捷月销破2万,配6座头等舱空间,到底有多舒服?试驾了才知道...
  10. linux终止mysql进程_Ubuntu Linux下定时监测MySQL进程终止时自动重启的方法