iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
AI & Data

ㄧ個八卦的時間也能了解AI最新趨勢系列 第 7

Day 7 NLP 資料預處理第二步! -- 斷詞(上)

  • 分享至 

  • xImage
  •  

各位早安~ 昨天我們介紹了在自然語言處理中必要的第一步,就是對對資料進行預處理,
並跟各位說了如何用正規表達處理我們資料中想留或不想留的東西,
我相信正規表達式可能對沒接觸過的朋友來說相對比較複雜一點,不過沒關係!熟能生巧,只要多多練習,一定會越來越上手滴~

那今天要來介紹的是另一個在資料預處理時也是不可缺少的步驟,那就是對資料進行「斷詞」(segmentation)

什麼是斷詞?

那什麼是斷詞勒?
其實說白一點,就是根據你的任務,將句子拆分成有意義的單位,將資料中的「詞」給分出來,

什麼意思呢?
假設今天我們有一個句子" He likes to eat apple ",對我們人類來說,我們一眼就能看出這句話由
He / likes / to / eat / apple 這五個詞組成。
但對電腦來說,原始資料只是一長串字元: He likes to eat apple

想一下另一個中文句子:結婚的和尚未結婚的人
這句話應該不只有一個意思吧xd, 他可以是

  1. 結婚的/和尚/未結婚的人
  2. 結婚的/和/尚未結婚的人

有沒有發現!因為語言通常是「帶有歧異的」,如果我們總是將整句話、整串資料餵給電腦,他會非常難消化,很難去抓取其中的資訊,也因此會影響到後續模型的訓練結果,所以一般我們幾乎都會先斷詞拉!
那中文跟英文在自然語言處理中處理斷詞的方法,使用的套件會不太一樣,英文我們同常會用NLTK 套件來幫忙
中文目前最常使用的是jiebaCKIP
英文相對比中文好斷詞,因為英文在詞跟詞中間通常會有空格去斷開,但中文不會有(中文真的是一個很複雜的語言🤯),所以中文在斷詞上一直是個值得研究的課題喔!

那就廢話不多說,先來看看英文斷詞我們會如何實作吧!

英文斷詞

假設我們今天有一個句子
sentence = "He likes to eat apples."
我們想根據空格,將這段文字進行斷詞,可以用nltk 中 的 word_tokenize

import nltk
from nltk.tokenize import word_tokenize
# 第一次使用需要先下載斷詞模型:
nltk.download('punkt')
print(word_tokenize(sentence))

輸出結果

['He', 'likes', 'to', 'eat', 'apples', '.']

word_tokenize 會自動把句子依照空白和標點拆開,
讓我們得到一個個英文單詞和標點符號。

可能有些人會問,那為何不用 split() 就好,有這個疑問的朋,可以試試看用NLTK 套件跟split() 斷"I'm pretty beautiful" 看看會發生什麼事🙂‍↕️

除了斷詞外,NLTK 還有非~~~常多的功能,畢竟他的全名就是 Natural Language Toolkit,是一個工具箱碼xd 所以裡面還有非常多的功能,像是他也可以算詞頻:

# 斷詞
words = word_tokenize(sentence)

# 計算詞頻
from nltk import FreqDist
freq = FreqDist(words)

print(freq.most_common())

輸出結果

[('He', 1), ('likes', 1), ('to', 1), ('eat', 1), ('apples', 1), ('.', 1)]

FreqDist() 會自動計算每個單字出現的次數,
most_common() 會依出現次數排序並回傳結果。

如果只想看出現次數,也可以這樣取值:

print(freq['apples'])   
print(freq['likes'])   

輸出結果

1
1

大家也可以讀自己的檔案然後去玩玩看!
好拉今天就先介紹英文斷詞,明天我們會講中文斷詞常用的工具jieba 還有停用詞(stop words)是什麼!
我們就明天見拉~


上一篇
Day 6 NLP 資料預處理第一步!正規表達 -- 把你想要跟不想要的都找出來!
下一篇
Day 8 NLP 資料預處理第二步! -- 斷詞(中)
系列文
ㄧ個八卦的時間也能了解AI最新趨勢8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言