正則表達式

1.小寫化

將文本轉換為小寫?text.lower()

2.去除標點符號

使用正則表達式去除文本中的標點符號。

3.去除多余空格

將多個空格替換為單個空格囊卜,并去除首尾空格 ' '.join(text.split())

4.去除數(shù)字

用正則表達式去除文本中的數(shù)字半火。

5.替換縮寫

將常見的縮寫替換為完整形式越妈。text = text.replace("I'm","I am")

結合以上方法,對文本進行系統(tǒng)的正則化處理钮糖。

import re

from nltk.corpus import stopwords

from nltk.tokenize import word_tokenize

from nltk.stem import WordNetLemmatizer

from bs4 import BeautifulSoup

def normalize_text(text):

? ? # 移除HTML標簽

? ? soup = BeautifulSoup(text, "html.parser")

? ? text = soup.get_text()

? ? # 轉換為小寫

? ? text = text.lower()

? ? # 去除標點符號

? ? text = re.sub(r'[^\w\s]', ' ', text)

? ? # 去除多余空格

? ? text = ' '.join(text.split())

? ? # 去除數(shù)字

? ? text = re.sub(r'\d+', '', text)

? ? # 去除停用詞

? ? stop_words = set(stopwords.words('english'))

? ? word_tokens = word_tokenize(text)

? ? text = ' '.join(word for word in word_tokens if word not in stop_words)

? ? # 詞形還原

? ? lemmatizer = WordNetLemmatizer()

? ? word_tokens = word_tokenize(text)

? ? text = ' '.join(lemmatizer.lemmatize(word) for word in word_tokens)

? ? return text

# 示例文本

text = "<html><body><h1>Example Title</h1><p>This is an example sentence, with numbers 123 and HTML tags!</p></body></html>"

normalized_text = normalize_text(text)

print(normalized_text)? # 輸出: "example title example sentence number html tag"


正則表達式的常見用法

#### 1. 匹配任意字符

`.`: 匹配任意單個字符(除了換行符)梅掠。

import re

result = re.findall(r'a.b', 'aab abb acb adb')

print(result)? # 輸出: ['aab', 'abb', 'acb', 'adb']

#### 2. 字符類

- `[abc]`: 匹配字符 'a', 'b' 或 'c'。

- `[a-z]`: 匹配任何小寫字母店归。

- `[A-Z]`: 匹配任何大寫字母阎抒。

- `[0-9]`: 匹配任何數(shù)字。

- `[^abc]`: 匹配除 'a', 'b', 'c' 之外的任意字符消痛。

result = re.findall(r'[a-c]', 'abcxyz')

print(result)? # 輸出: ['a', 'b', 'c']

#### 3. 預定義字符類

- `\d`: 匹配任何數(shù)字且叁,等價于 `[0-9]`。

- `\D`: 匹配任何非數(shù)字字符秩伞。

- `\w`: 匹配任何字母逞带、數(shù)字或下劃線,等價于 `[a-zA-Z0-9_]`纱新。

- `\W`: 匹配任何非字母展氓、數(shù)字、下劃線字符脸爱。

- `\s`: 匹配任何空白字符(空格遇汞、制表符、換行符)簿废。

- `\S`: 匹配任何非空白字符空入。

result = re.findall(r'\d+', 'There are 123 apples and 45 bananas')

print(result)? # 輸出: ['123', '45']

#### 4. 邊界匹配

- `^`: 匹配字符串的開頭。

- `$`: 匹配字符串的結尾族檬。

- `\b`: 匹配單詞邊界执庐。

- `\B`: 匹配非單詞邊界。

```python

result = re.findall(r'\bword\b', 'a word in a sentence')

print(result)? # 輸出: ['word']

#### 5. 量詞

- `*`: 匹配前面的字符零次或多次导梆。

- `+`: 匹配前面的字符一次或多次。

- `?`: 匹配前面的字符零次或一次迂烁。

- `{n}`: 匹配前面的字符恰好 n 次看尼。

- `{n,}`: 匹配前面的字符至少 n 次。

- `{n,m}`: 匹配前面的字符至少 n 次盟步,但不超過 m 次藏斩。

result = re.findall(r'\d{2,4}', '123 1234 12345')

print(result)? # 輸出: ['123', '1234', '1234']

#### 6. 分組和捕獲

- `()`: 用于分組和捕獲匹配的子字符串。

result = re.findall(r'(\d+)-(\d+)-(\d+)', '123-456-7890')

print(result)? # 輸出: [('123', '456', '7890')]

#### 7. 或運算

- `|`: 表示“或”運算却盘,匹配符號前后任意一個正則表達式狰域。

result = re.findall(r'apple|orange', 'I like apple and orange')

print(result)? # 輸出: ['apple', 'orange']

#### 8. 轉義字符

- `\`: 用于轉義元字符媳拴,使其作為普通字符使用。

result = re.findall(r'\$[0-9]+', 'The price is $100')

print(result)? # 輸出: ['$100']

### 綜合示例

結合多個正則表達式操作來處理文本兆览。

import re

text = "Hello, World! This is a test. 123-456-7890. Email: test@example.com"

# 1. 小寫化

text = text.lower()

# 2. 去除標點符號

text = re.sub(r'[^\w\s]', ' ', text)

# 3. 去除多余空格

text = ' '.join(text.split())

# 4. 去除數(shù)字

text = re.sub(r'\d+', '', text)

# 5. 找出所有單詞

words = re.findall(r'\b\w+\b', text)

print(text)? # 輸出: "hello world this is a test email test example com"

print(words)? # 輸出: ['hello', 'world', 'this', 'is', 'a', 'test', 'email', 'test', 'example', 'com']

通過掌握這些常見的正則表達式操作屈溉,您可以有效地處理和規(guī)范化文本數(shù)據(jù)。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抬探,一起剝皮案震驚了整個濱河市子巾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌小压,老刑警劉巖线梗,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怠益,居然都是意外死亡仪搔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門蜻牢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘾带,“玉大人芦劣,你說我怎么就攤上這事。” “怎么了酒贬?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缨历。 經(jīng)常有香客問我赞草,道長,這世上最難降的妖魔是什么梯码? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任宝泵,我火速辦了婚禮,結果婚禮上轩娶,老公的妹妹穿的比我還像新娘儿奶。我一直安慰自己,他們只是感情好鳄抒,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布闯捎。 她就那樣靜靜地躺著,像睡著了一般许溅。 火紅的嫁衣襯著肌膚如雪瓤鼻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天贤重,我揣著相機與錄音茬祷,去河邊找鬼。 笑死并蝗,一個胖子當著我的面吹牛祭犯,可吹牛的內(nèi)容都是我干的秸妥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沃粗,長吁一口氣:“原來是場噩夢啊……” “哼粥惧!你這毒婦竟也來了?” 一聲冷哼從身側響起陪每,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤影晓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后檩禾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挂签,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年盼产,在試婚紗的時候發(fā)現(xiàn)自己被綠了饵婆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡戏售,死狀恐怖侨核,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灌灾,我是刑警寧澤搓译,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站锋喜,受9級特大地震影響些己,放射性物質發(fā)生泄漏。R本人自食惡果不足惜嘿般,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一段标、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炉奴,春花似錦逼庞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砸逊,卻和暖如春虑灰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痹兜。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颤诀,地道東北人字旭。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓对湃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遗淳。 傳聞我的和親對象是個殘疾皇子拍柒,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容