中文分词--词典分词--最长匹配
生活随笔
收集整理的這篇文章主要介紹了
中文分词--词典分词--最长匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(個人學習筆記,慎重參考)
1 基本概念
中文分詞
指的是將一段文本拆分為一系列單詞的過程,這些單詞順序拼接后等于原文本。
作為中文信息處理的第一站,是后續nlp任務的基礎,中文分詞算法大致可分為詞典規則與統計學習,針對具體問題往往會以統計學習為主、詞典規則為輔。
2 正向最長匹配
最長匹配算法
就是在以某個下標為起點遞增查詞的過程中,優先輸出更長的單詞,這種規則被稱為最長匹配算法。從前往后匹配則稱為正向最長匹配,反之則稱為逆向最長匹配。
# -*- coding:utf-8 -*-from tests.book.ch02.utility import load_dictionarydef forward_segment(text, dic):word_list = []i = 0while i < len(text):longest_word = text[i] # 當前掃描位置的單字for j in range(i + 1, len(text) + 1): # 所有可能的結尾word = text[i:j] # 從當前位置到結尾的連續字符串if word in dic: # 在詞典中if len(word) > len(longest_word): # 并且更長longest_word = word # 則更優先輸出word_list.append(longest_word) # 輸出最長詞i += len(longest_word) # 正向掃描return word_listif __name__ == '__main__':dic = load_dictionary()print(forward_segment('就讀北京大學', dic))print(forward_segment('研究生命起源', dic))運行結果:
['就讀', '北京大學'] ['研究生', '命', '起源']- 從代碼邏輯可以看出,在匹配到字典中的最長字符串優先輸出,若以該起點的字符中都不在字典中,則該起點的單字作為分詞輸出;
- [‘研究生’, ‘命’, ‘起源’]產生誤差的原因在于,正向最長匹配“研究生”的優先級大于“研究”,下面采用逆向最長匹配解決這個問題;
3 逆向最長匹配
# -*- coding:utf-8 -*- # Author:hankcs # Date: 2018-05-22 21:05 # 《自然語言處理入門》2.3.3 逆向最長匹配 # 配套書籍:http://nlp.hankcs.com/book.php # 討論答疑:https://bbs.hankcs.com/ from tests.book.ch02.utility import load_dictionarydef backward_segment(text, dic):word_list = []i = len(text) - 1while i >= 0: # 掃描位置作為終點longest_word = text[i] # 掃描位置的單字for j in range(0, i): # 遍歷[0, i]區間作為待查詢詞語的起點word = text[j: i + 1] # 取出[j, i]區間作為待查詢單詞if word in dic:if len(word) > len(longest_word): # 越長優先級越高longest_word = wordbreakword_list.insert(0, longest_word) # 逆向掃描,所以越先查出的單詞在位置上越靠后i -= len(longest_word)return word_listif __name__ == '__main__':dic = load_dictionary()print(backward_segment('研究生命起源', dic))print(backward_segment('項目的研究計劃', dic))運行結果:
['研究', '生命', '起源'] ['項', '目的', '研究計劃']- [‘研究’, ‘生命’, ‘起源’]分詞正確了,但是[‘項’, ‘目的’, ‘研究計劃’]又錯了,后者用正向最長匹配可以正確分詞;
4 雙向最長匹配
- 清華大學的孫茂松教授曾經做過統計,在隨機挑選的3680個句子中,正向匹配錯誤而逆向匹配正確的句子占比9.24%9.24\%9.24%,正向匹配正確而逆向匹配錯誤的情況則沒有。
- 基于類似上面觀察到的一些經驗,人們繼續提出了雙向最長匹配,具體規則如下:
(1)同時執行正向和逆向最長匹配,若兩者的詞數不同,則返回詞數更少的那一個;
(2)否則,返回兩者中單字更少的那一個。當單字數也相同時,優先返回逆向最長匹配的結果;
運行結果:
['研究', '生命', '起源']5 三種算法對比
- 上圖顯示,雙向最長匹配的確在2、3、5這3種情況下選擇出了最好的結果,但在4號句子上選擇了錯誤的結果,使得最終正確率 3/6 反而小于逆向最長匹配的 4/6 , 由此,規則系統的脆弱可見一斑。規則集的維護有時是拆東墻補西墻,有時是幫倒忙。
6 參考文獻
總結
以上是生活随笔為你收集整理的中文分词--词典分词--最长匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python删除重复值所在的行数_pyt
- 下一篇: pygame下载(非常详细)