日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/2 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实践心得体会_“Python自然语言实践”——总结(一),实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正則表達式在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自然语言实践”——总结(一),实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。