正則表達式在NLP中有廣泛的運用,一般用在文本清洗和過濾中,可以把我們的關注的文本內容選取出來再利用機器學習的技術。
否則我們一股腦未經篩選,將所有的文本丟到模型中,模型會被大量的噪聲干擾。
示例:
import re
text_string = "文本最重要的來源無疑是網絡。我們要把網絡中的文本獲取形成一個文本數據庫。利用一個爬蟲抓取到網絡中的信息。爬取的策略有廣度爬取和深度爬取。根據用戶的需求,爬蟲可以有主題爬蟲和通用爬蟲之分。"
1、獲取文本中是否包含某個詞
# 我們需要找到哪句話 包含 ‘爬蟲’這個詞,需要先斷句再搜索
regex = '爬蟲'
#用句號斷句形成列表
p_string = text_string.split("。")
print(p_string)
>>>
['文本最重要的來源無疑是網絡', '我們要把網絡中的文本獲取形成一個文本數據庫', '利用一個爬蟲抓取到網絡中的信息', '爬取的策略有廣度爬取和深度爬取', '根據用戶的需求,爬蟲可以有主題爬蟲和通用爬蟲之分', '']
# 對列表中的每句話進行正則表達式匹配,搜索每句話中是否能查到‘爬蟲’這個詞
for line in p_string:
# 如果能查找到則返回line,查找不到結果會爲None
if re.search(regex,line) is not None:
print(line)
>>>
利用一個爬蟲抓取到網絡中的信息
根據用戶的需求,爬蟲可以有主題爬蟲和通用爬蟲之分
2、匹配任意一個字符
在正則表達式中 '.' 代表匹配任意字符,'a.c' 代表a加上任意字符再加上c
# 匹配爬+任意字符的內容
regex = '爬.'
for line in p_string:
if re.search(regex,line) is not None:
print(line)
>>>
利用一個爬蟲抓取到網絡中的信息
爬取的策略有廣度爬取和深度爬取
根據用戶的需求,爬蟲可以有主題爬蟲和通用爬蟲之分
3、匹配起始和結尾的字符串
'^' 代表以某個字符串開頭,'$' 代表以某個字符串結尾
# 匹配以文本兩個字開頭的句子
regex = '^文本'
for line in p_string:
if re.search(regex,line) is not None:
print(line)
>>>
文本最重要的來源無疑是網絡
4、利用中括號匹配多個字符
'[abc]at' 代表匹配 'aat', 'bat', 'cat'這三種字符串
# 匹配包含多個字符的句子
regex = '爬[蟲取]'
#包含爬蟲或者爬取的句子
for line in p_string:
if re.search(regex,line) is not None:
print(line)
>>>
利用一個爬蟲抓取到網絡中的信息
爬取的策略有廣度爬取和深度爬取
根據用戶的需求,爬蟲可以有主題爬蟲和通用爬蟲之分
5 轉義符 \
由於正則表達式中有許多符號都有特殊的意義
如.表示任意字符串,但是我們真的想匹配 . 這個字符就需要在前面加上轉義符 \
即匹配 . 是用 \.
# 轉義符
if re.search('\\\\', 'I have one nee\dle') is not None:
print("match it")
else:
print("not match")
>>>
match it
這裏爲什麼用四個反斜槓呢?
用r來表示原生字符,就可以忽略大量的反斜槓了
if re.search(r'\\', 'I have one nee\dle') is not None:
print("match it")
else:
print("not match")
>>>
match it
6 數字和字母匹配
[0-9]表示0-9的所有數字
[a-z]表示a到z的小寫字母
總結:
正則表達式在文本清洗中有非常重要的作用。
以上只是簡單的正則表達式基礎知識
掌握這些之後可以去了解正則表達式的分組,python中用group,貪婪模式和非貪婪模式,前向匹配和後向匹配。
但是這些高深的用法都離不開這些基礎