自然语言处理—初始自然语言处理技术—自然语言处理的前置技术

(一)正则表达式在NLP中的应用

正则表达式简介

正则表达式是一种定义了搜索模式的特征序列,主要是用于字符串的模式匹配,或是字符的匹配。正则表达式是处理NLP的最基本的手段之一。

正则表达式的作用之一是将文档内容从非结构化转为结构化以便后续的文本挖掘。

正则表达式的另一个作用就是去除“噪声”。在处理大量文本片段的时候有非常多的文字信息与最终输出的文本无关,这些无关的片段称之为“噪声”,比如 URL 或链接、语气助词、标点符号等。

匹配字符串

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

通过使用re.search(regex,string)这个方法,我们可以检查这个string字符串是否匹配正则表达式regex。如果匹配搭配,这个表达式会返回一个match对象,如果没有匹配到则返回None。

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

import re
text_string="文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫抓取到网络中的信息。爬取的策略有广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分"
regex='爬虫'
p_string= text_string.split('。')      # 以句号为分隔符通过split切分
for line in p_string :
  if re.search( regex,line) is not None:     # search方法是用来查找匹配当前行是否匹配这个 regex,返回的是一个 match对象
        print(line)     # 如果匹配到,打印这行信息

输出:

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

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

抽取文本中的数字

“[0-9]”代表的是从0到9的所有数字,那相对的“[a-z]”代表的是从 a 到 z 的所有小写字母。在自然语言处理中,通过使用正则表达式,抽取文本中的数字,可以提取日期、关键性数据等等。

例如:通过正则表达式匹配年份。

import re
year_strings=[]
strings=['War of 1812','There are 5280 feet to a mile',' Happy New Year 2016!']
for string in strings:
    if re.search("[1-2][0-9]{3}", string):#字符串有英文有数字,匹配其中的数字部分,并且是在1000~2999之间,{3}代表的是重复之前的[0-9]三次,是[0-9][0-9][0-9]的简化写法。
        year_strings.append(string)
print(year_strings)

输出:

[‘War of 1812’, ‘ Happy New Year 2016!’]

例题:

  • 抽取文本中的年份:使用正则表达式找出文本中的年份并输出;
  • 匹配包含”文本”的句子:找出文本中包含有“文本”的句子,文本以句号作为分割,将匹配的句子输出。

 测试输入:

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

目前有很多的文本数据库。它们都是十分重要的;

预期输出: [‘2016’, ‘2017’]

import re

# 任务1:抽取years_string中所有的年份并输出
years_string = input()
years=re.findall('[2][0-9]{3}',years_string)
print(years)
# 任务2:匹配text_string中包含“文本”的句子,并使用print输出,以句号作为分隔
text_string = input()
regex = '文本'

p_string=text_string.split('。')
for line in p_string:
    if re.search(regex,line) is not None:
        print(line)

任务1中用了re.findall函数,re.findall(pattern,string,flags=0),findall()函数是逐行匹配的,返回string中所以与pattern相匹配的全部子串,返回形式为数组。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值