你在高中教英文,學生都把英文當成外語來學。
你決定整份課程大綱都以電視節目為基礎。 你需要分析節目裡用到了哪些單字,以及這些單字重複出現的頻率有多高。
這樣一來,你就能挑出最簡單的節目作為起點,再隨著時間慢慢提高難度。
你的任務是計算某部戲劇字幕中每個單字出現的次數。
這些戲劇的字幕只使用 ASCII 字元。
角色們常常用隨性的英文說話,並使用 they're 或 it's 這類縮寫。雖然這些縮寫來自兩個單字(例如 we are),但縮寫本身(we're)會被視為一個單字。
單字之間可以用任何形式的標點符號(例如 ":"、"!" 或 "?")或空白(例如 "\t"、"\n" 或 " ")分隔。唯一不會分隔單字的標點符號,是縮寫裡的撇號。
數字也算單字。如果字幕寫著 It costs 100 dollars.,那麼 100 就是一個單字。
單字不分大小寫。例如,單字 you 在下面這句話中出現了三次:
You come back, you hear me? DO YOU HEAR ME?
結果中單字計數的順序並不重要。
以下範例涵蓋了上面討論的幾個要素:
"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.
這段字幕的對應結果會是:
123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2
要完成這道練習,你需要實作wordCount這個函式,它會接收一段文字,並回傳每個單字出現的次數。
如果這是你第一次解這道練習,建議先沿用題目提供的函式簽章:
wordCount :: String -> [(String, Int)]
之後,不妨回過頭重新看看這個問題,玩玩其他的資料型態和函式庫:
Text,來自 text 套件。Map,來自 containers 套件。MultiSet,來自 multiset 套件測試套件刻意設計成能接受幾乎任何合理的型別簽章,所以歡迎你找出自己認為最好的那一種。