NLP學習之隨筆(1)

2021-09-27 07:03:53 字數 2350 閱讀 3941

nlp一般的處理流程為:原始文字(raw data)--->分詞(segmentation)---->清洗資料(cleaning)---->標準化(normalization)

---->特徵提取(feature extraction)----->建模(modeling)

1:分詞

常見的分詞工具有:

jieba分詞

snownlp

ltp

hannlp

如果我們要手動實現分詞。則有前向最大匹配,後向最大匹配,雙向最大匹配。

例子:我們經常有意見分歧

假設我們的詞典為:[「我們」, 「經常」, 「有」, 「有意見」,「意⻅見」,「分歧」]

最大匹配長度為5.

首先我們先取前5個字[我們經常有],去詞典裡尋找發現並沒有這個詞。於是

刪除掉有,則變成了[我們經常],去詞典裡找,發現還是沒有。

重複上述過程。再刪除乙個字,結果為[我們經]。繼續刪,結果為[我們]

出現在詞典裡。則第乙個詞分詞成功。

接下來看[經常有意見],最後分詞為經常。

以此類推。用前向最大匹配法獲得的分詞結果為[我們,經常,有意見,分歧]

下邊我們來看具體的**實現:

#前向最大匹配法分詞

def segment(str,maxlen,dict):

len_str = len(str) #計算總共字元長度

my_list = #儲存前向分詞結果

while len_str >0 :

temp = str[0:maxlen]

while temp not in dict: #如果當前詞不在字典裡

if len(temp) ==1:

break

temp = temp[0:len(temp)-1] #則從後邊刪除一位

str = str[len(temp):] #重新賦值str 第一次[我們有意見]找出我們,第二次剔除掉我們,這裡用切片的方式剔除。

len_str = len(str)

return my_list

result = segment('我們經常有意見分歧',5,['我們','經常', '有','有意見','意見','分歧'])

print(result)

執行結果如下:

接下來我們看最大後向匹配:

跟前向匹配相反。我們從最後開始分詞。

第一次:[有意見分歧],詞典中查無此詞。則刪除有。

第二次:[意見分歧],詞典中查無此詞。則刪除有。

第三次:[見分歧]

第四次:[分歧],ok,得到第乙個分詞。

具體**實現如下:

def   back_segment(str,maxlen,dict):

len_str = len(str) #先計算str的總長度

my_list = #用來存放結果

while len_str > 0 :

temp = str[-maxlen :] #取負數,表示取最後5位

while temp not in dict :

if(len(temp) ==1 ):

break

temp = temp[1:] #如果不在字典裡,則向前進一位。

str = str[0:len(str) - len(temp)] #更新str,從0到temp的標誌位

len_str = len(str) #重新計算str的總長度

return my_list

result = back_segment('我們經常有意見分歧',5,['我們','經常', '有','有意見','意見','分歧'])

那麼最大匹配分詞有哪些缺點呢?

我們可以總結如下:

1:長度限制。

由於最大匹配必須設定乙個最大長度,如果長度太長,則影響效率,如果長度太小,則會切分的很細。所以這個最大長度的選擇是在效率與詞長之間的一種妥協。

2:效率低。要不斷的迴圈,判斷。

如果規定最大詞長為5,但是我們的詞典裡的詞大部分都是2位或者3位,這就意味著我們是有2~3次的匹配是浪費掉的。

3:沒有考慮語義。

ok,今晚先到這裡吧。

NLP學習之隨筆(3)

spell correction 拼寫錯誤糾正 那麼什麼是拼接錯誤糾正。請看一下例子。簡而言之,就是使用者的輸入和使用者真正要輸入的存在一定的出入。這種出入可以是英文的拼寫錯誤,也可以是中文的同音詞。那麼對於拼寫錯誤,我們應該去如何解決呢。比如there 和therr。使用者的輸入可能是therr,...

NLP學習之隨筆(6)

基於檢索的問答系統 recap retrieval based qa system 我們輸入一句話。需要計算語料庫中每句話和當前輸入這句話的相似度,然後返回相似度最高的那個。這種方法的時間複雜度為o n 如果語料庫中的有10 7個問題,那麼在計算乙個輸入的時候,要計算10 7次。針對該方法,我們可以...

學習隨筆 1

大學四年很快就要過去了,這個學期我要做畢業設計,題目是基於twincat的機械人運動控制系統的設計。說實話,我校的機械設計製造及其自動化專業雖然在國內名列前茅,但對於本科階段的教育過於注重設計與製造,而對於其自動化的部分則有明顯輕視 也可能是因為我們沒有立足自動化的課程設計吧,反正各種課設使我具備了...