如何分割纯英文单词
如何分割純英文單詞
假如有一段英文I'm a boy with passion of writing code.,現在讓你寫一個程序來統計這句話有幾個單詞,每個單詞是什么,你會怎么做呢?讓我猜一猜,有些人應該會使用字符串的split方法,比如sentence = '...', split_words = sentence.split(' '),這樣分割貌似做到了大部分分解的要求,但是這種方法有很多問題,因為英文字符串的分割并不是總用空格分割的,比如用,分割單詞或者其他符號分割,那你又該怎么辦呢?
所以,用split分割單詞并不能每次都正確。要找到一個正確的方法就要明白一個單詞的構成,一個英文單詞包含26個英文字母,大小寫不限,其中可能含有'和-,單詞兩邊會碰到多個分割符,這些分割符總結一下有' '、','、'.'、'!'、'?'、':'、'"'、';'。現在讓我們再來想一想如何分割單詞,給定一句英文,可以一個字符一個字符地判斷,字符如果是單詞自身構成,那還屬于單詞范疇,記錄下來,字符如果是分割符,那標志這個單詞結束,字符如果不屬于單詞構成和分割符,拋出異常。
源碼如下:
""" 分割純英文字符串為單詞單詞集合 [a-z][A-Z][-] 分割符集合 [ ,:;.?!'"]分辨當前字符的狀態來判斷單詞的所屬范圍the statistics of this file: lines(count) understand_level(h/m/l) classes(count) functions(count) fields(count) 000000000070 ----------------------m 00000000000000 0000000000000001 ~~~~~~~~~~~~2 """import time import string__author__ = '與C同行' english_word_set = set(string.ascii_letters+'\'-') english_separator_set = set(' ,".!?:;')def split_words(words):""" 分割給定的字符串為單詞:param words: 給定的字符串:return: 分割之后的單詞列表和單詞個數"""# 給字符串加一個空格結束標志words += ' 'split_words_list = []new_word = ''for english_chr in words:if english_chr in english_word_set:new_word += english_chrelif english_chr in english_separator_set:if new_word == '':passelse:split_words_list.append(new_word)new_word = ''else:raise ValueError('字符串中的值超出了判斷范圍')return split_words_list, len(split_words_list)if __name__ == '__main__':print(f'當前時間:{time.ctime()}')print()print('測試第一組字符串:')first_words = ' I want to say:"hello, you are a beautiful-girl!".'first_split_word_list, first_words_len = split_words(first_words)print('first_words分割之后的單詞列表:')print(first_split_word_list)print(f'first_words分割之后單詞個數:{first_words_len}')print()print('測試第二組字符串:')second_words = 'ABCD,EFGHI:JKLMNO;PQRSTUVWXYZ abc\'def"ghijk.lmnopq?rstuv!wxyz -'second_split_word_list, second_words_len = split_words(second_words)print('second_words分割之后的單詞列表:')print(second_split_word_list)print(f'second_words分割之后單詞個數:{second_words_len}')print()print('測試非規定范圍中的字符串,將拋出錯誤:')invalid_words = 'I want go 家.'split_word_list, words_len = split_words(invalid_words)print('invalid_words分割之后的單詞列表:')print(split_word_list)print(f'invalid_words分割之后單詞個數:{words_len}')結果如下:
有兩點要說一下:第一,該程序用到了標準模塊string,這個模塊定義了很多字符集,該程序用到了其中的26個英文字符;第二,這個程序只是按照一定的規則分割英文單詞,所以無法識別單詞的拼寫錯誤。
喜歡python的朋友可以關注微信公眾號“與C同行”:
總結
- 上一篇: Google登录及获取Calendar信
- 下一篇: 打开我的计算机我的文档不见,我电脑桌面上