0.NLP基礎之正則表達式

正則表達式在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,貪婪模式和非貪婪模式,前向匹配和後向匹配。

但是這些高深的用法都離不開這些基礎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章