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的機械人運動控制系統的設計。說實話,我校的機械設計製造及其自動化專業雖然在國內名列前茅,但對於本科階段的教育過於注重設計與製造,而對於其自動化的部分則有明顯輕視 也可能是因為我們沒有立足自動化的課程設計吧,反正各種課設使我具備了...