如何分割純英文單詞

2021-10-07 12:00:53 字數 3047 閱讀 2277

假如有一段英文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_chr

elif english_chr in english_separator_set:

if new_word =='':

pass

else

: new_word =

''else

:raise valueerror(

'字串中的值超出了判斷範圍'

)return split_words_list,

len(split_words_list)

if __name__ ==

'__main__'

:print

)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分割之後單詞個數:'

)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分割之後單詞個數:'

)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分割之後單詞個數:'

)

結果如下:

有兩點要說一下:第一,該程式用到了標準模組string,這個模組定義了很多字符集,該程式用到了其中的26個英文本元;第二,這個程式只是按照一定的規則分割英文單詞,所以無法識別單詞的拼寫錯誤。

java英文單詞

platform pl tf m n.平台 standard edition標準版 enterprise ent praiz n.企業 bytecode n.位元組碼,位元組 verifier n.檢驗機 modifier m difai n.修飾語 attribute tribju t vt.to...

4 1 3 英文單詞的分割符驗證

在英文文字中,各個英文單詞被分隔符所分開。這些分隔符包括英文標點符號 空白字元等。其中,英文標點符號比較多,如,逗號 點號 問號 冒號 分號 單引號 感嘆號 雙引號 連線號 破折號 省略號 小括號 中括號 大括號 所有格符號 等。在英文文字中,有時需要驗證兩個英文單詞是否被標點符號分開,或者是否被指...

python 統計 英文 單詞

import sys,os,re def count words text num char text re.sub w text number text re.sub 0 9 text shrink whitespace text re.sub s text return text.count d...