Part 1 1 基於列舉方法來搭建中文分詞工具

2021-10-12 08:00:22 字數 2888 閱讀 6107

step 1: 對於給定字串:」我們學習人工智慧,人工智慧是未來「, 找出所有可能的分割方式

step 2: 我們也可以計算出每乙個切分之後句子的概率

step 3: 返回第二步中概率最大的結果

def

create_dic

(file_path)

: workbook = xlrd.open_workbook(file_path)

# 開啟乙個xlsx檔案

booksheet = workbook.sheet_by_index(0)

# 定位到excel中的第乙個工作簿

col_values = booksheet.col_values(0)

# 讀取第乙個工作簿中,第一列的資料

dic_words =

# 這裡設定了詞典裡最大單詞長度,便於第二部的匹配(例如單詞庫中最長為5個文字,列舉的時候就不用舉7,8這些長度的單詞了

max_len_word =

0for word in col_values:

dic_words[word]

=0.00001

len_word =

len(word)

if len_word > max_len_word:

max_len_word = len_word

print

(len

(dic_words)

)print

(max_len_word)

return dic_words, max_len_word

dic_words, max_len_word = create_dic(

'檔案路徑名.xlsx'

)# 由此得到了所需的詞典,最大的單詞長度

# 題目中為了方便舉例,給以下單詞設定了比例,方便找到概率最大的句子,即最符合語言模型的句子

word_prob =

for key, value in word_prob.items():

dic_words[key]

= value

# 這裡採用遞迴的思路,找到了所有的可能的匹配結果。

defword_segementation

(input_str)

: segments =

iflen

(input_str)==0

:return segments

max_split =

min(

len(input_str)

, max_len_word)+1

for idx in

range(1

, max_split)

: word = input_str[

0:idx]

if word in dic_words:

# 如果當前的詞語在詞典裡已經找不到,那麼就結束這個單詞的遞迴

segments_substr = word_segementation(input_str[idx:])

''' 下面這句話如果只有\segments_substr == \,那麼所有詞典裡不存在的詞,都會被直接過濾掉。

舉個例子,input_str = "我的成績好",假設詞典裡沒有『好』,那麼會直接過濾掉。而加上len(input_str[idx:],則會返回空集

'''if(segments_substr ==

)and

(len

(input_str[idx:])

==0):

[word]

)# 這個地方很重要,因為要把所有結果分類,這個條件判斷成立的條件只有在每乙個種情況的句子結尾才有可能出現。

else

:for seg in segments_substr:

seg =

[word]

return segments

# 對每個句子進行概率估計

defword_segment_*****

(input_str)

: segments = word_segementation(input_str)

best_segment =

best_score = np.inf

for seg in segments:

log_prob =-1

* np.

sum(np.log(

[dic_words[word]

for word in seg]))

if log_prob < best_score:

best_segment = seg

best_score = log_prob

return best_segment

print

(word_segment_*****(

"北京的天氣真好啊"))

print

(word_segment_*****(

"今天的課程內容很有意思"))

print

(word_segment_*****(

"經常有意見分歧"))

----

----

----

----

-results:

29803216[

'北京'

,'的'

,'天氣'

,'真好啊'][

'今天'

,'的'

,'課程'

,'內容'

,'很有'

,'意思'][

'經常'

,'有意見'

,'分歧'

]

part 11輸入阻抗和輸入電容

下圖形象說明了運放輸入端阻抗的特性,主要有兩個引數 輸入阻抗和輸入電容。對於電壓反饋型運放,輸入阻抗主要由輸入級決定,一般bjt輸入級運放共模輸入阻抗不會大於40m歐,差模輸入阻抗大於200g歐。對於jfet和cmos輸入級運放,輸入阻抗要大得多。這個阻抗通常表現為電阻性。更值得關注的是輸入電容。d...

PART 1 1 如何確定建模的Y值

最重要的事情開始都會講 建模是始終服務於業務的,沒有業務的評分卡就沒有靈魂 定義y什麼樣的客戶是好客戶 什麼樣的客戶是壞客戶 我認為是首要的,也就是需要有乙個目標,也就是方向要對 拿乙個例子來講 定義一批客群的好壞 我需要用到該客群從授信前一年的資料集,定義的是逾期30天 從上面可以提取關鍵資訊 1...

C 11 強型別列舉

c 11引入了一種新的列舉型別,即 列舉類 或 強型別列舉 宣告強型別列舉非常簡單,只需要在enum後加上class或struct即可。例如 enum old 老形式 enum class new 新形式 enum struct new2 新形式傳統的c 列舉型別有一些缺點 如果在相同作用域中的兩個...