日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

中文分词--词典分词--最长匹配

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中文分词--词典分词--最长匹配 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(個(gè)人學(xué)習(xí)筆記,慎重參考)

1 基本概念

中文分詞

指的是將一段文本拆分為一系列單詞的過(guò)程,這些單詞順序拼接后等于原文本。
作為中文信息處理的第一站,是后續(xù)nlp任務(wù)的基礎(chǔ),中文分詞算法大致可分為詞典規(guī)則與統(tǒng)計(jì)學(xué)習(xí),針對(duì)具體問(wèn)題往往會(huì)以統(tǒng)計(jì)學(xué)習(xí)為主、詞典規(guī)則為輔。

2 正向最長(zhǎng)匹配

最長(zhǎng)匹配算法

就是在以某個(gè)下標(biāo)為起點(diǎn)遞增查詞的過(guò)程中,優(yōu)先輸出更長(zhǎng)的單詞,這種規(guī)則被稱為最長(zhǎng)匹配算法。從前往后匹配則稱為正向最長(zhǎng)匹配,反之則稱為逆向最長(zhǎng)匹配。

# -*- 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] # 當(dāng)前掃描位置的單字for j in range(i + 1, len(text) + 1): # 所有可能的結(jié)尾word = text[i:j] # 從當(dāng)前位置到結(jié)尾的連續(xù)字符串if word in dic: # 在詞典中if len(word) > len(longest_word): # 并且更長(zhǎng)longest_word = word # 則更優(yōu)先輸出word_list.append(longest_word) # 輸出最長(zhǎng)詞i += len(longest_word) # 正向掃描return word_listif __name__ == '__main__':dic = load_dictionary()print(forward_segment('就讀北京大學(xué)', dic))print(forward_segment('研究生命起源', dic))

運(yùn)行結(jié)果:

['就讀', '北京大學(xué)'] ['研究生', '命', '起源']
  • 從代碼邏輯可以看出,在匹配到字典中的最長(zhǎng)字符串優(yōu)先輸出,若以該起點(diǎn)的字符中都不在字典中,則該起點(diǎn)的單字作為分詞輸出;
  • [‘研究生’, ‘命’, ‘起源’]產(chǎn)生誤差的原因在于,正向最長(zhǎng)匹配“研究生”的優(yōu)先級(jí)大于“研究”,下面采用逆向最長(zhǎng)匹配解決這個(gè)問(wèn)題;

3 逆向最長(zhǎng)匹配

# -*- coding:utf-8 -*- # Author:hankcs # Date: 2018-05-22 21:05 # 《自然語(yǔ)言處理入門(mén)》2.3.3 逆向最長(zhǎng)匹配 # 配套書(shū)籍: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: # 掃描位置作為終點(diǎn)longest_word = text[i] # 掃描位置的單字for j in range(0, i): # 遍歷[0, i]區(qū)間作為待查詢?cè)~語(yǔ)的起點(diǎn)word = text[j: i + 1] # 取出[j, i]區(qū)間作為待查詢單詞if word in dic:if len(word) > len(longest_word): # 越長(zhǎng)優(yōu)先級(jí)越高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('項(xiàng)目的研究計(jì)劃', dic))

運(yùn)行結(jié)果:

['研究', '生命', '起源'] ['項(xiàng)', '目的', '研究計(jì)劃']
  • [‘研究’, ‘生命’, ‘起源’]分詞正確了,但是[‘項(xiàng)’, ‘目的’, ‘研究計(jì)劃’]又錯(cuò)了,后者用正向最長(zhǎng)匹配可以正確分詞;

4 雙向最長(zhǎng)匹配

  • 清華大學(xué)的孫茂松教授曾經(jīng)做過(guò)統(tǒng)計(jì),在隨機(jī)挑選的3680個(gè)句子中,正向匹配錯(cuò)誤而逆向匹配正確的句子占比9.24%9.24\%9.24%,正向匹配正確而逆向匹配錯(cuò)誤的情況則沒(méi)有。
  • 基于類似上面觀察到的一些經(jīng)驗(yàn),人們繼續(xù)提出了雙向最長(zhǎng)匹配,具體規(guī)則如下:

(1)同時(shí)執(zhí)行正向和逆向最長(zhǎng)匹配,若兩者的詞數(shù)不同,則返回詞數(shù)更少的那一個(gè);
(2)否則,返回兩者中單字更少的那一個(gè)。當(dāng)單字?jǐn)?shù)也相同時(shí),優(yōu)先返回逆向最長(zhǎng)匹配的結(jié)果;

# -*- coding:utf-8 -*-from tests.book.ch02.backward_segment import backward_segment from tests.book.ch02.forward_segment import forward_segment from tests.book.ch02.utility import load_dictionarydef count_single_char(word_list: list): # 統(tǒng)計(jì)單字成詞的個(gè)數(shù)return sum(1 for word in word_list if len(word) == 1)def bidirectional_segment(text, dic):f = forward_segment(text, dic)b = backward_segment(text, dic)if len(f) < len(b): # 詞數(shù)更少優(yōu)先級(jí)更高return felif len(f) > len(b):return belse:if count_single_char(f) < count_single_char(b): # 單字更少優(yōu)先級(jí)更高return felse:return b # 都相等時(shí)逆向匹配優(yōu)先級(jí)更高if __name__ == '__main__':dic = load_dictionary()print(bidirectional_segment('研究生命起源', dic))

運(yùn)行結(jié)果:

['研究', '生命', '起源']

5 三種算法對(duì)比

  • 上圖顯示,雙向最長(zhǎng)匹配的確在2、3、5這3種情況下選擇出了最好的結(jié)果,但在4號(hào)句子上選擇了錯(cuò)誤的結(jié)果,使得最終正確率 3/6 反而小于逆向最長(zhǎng)匹配的 4/6 , 由此,規(guī)則系統(tǒng)的脆弱可見(jiàn)一斑。規(guī)則集的維護(hù)有時(shí)是拆東墻補(bǔ)西墻,有時(shí)是幫倒忙。

6 參考文獻(xiàn)

  • 何晗《自然語(yǔ)言處理入門(mén)》;
  • 總結(jié)

    以上是生活随笔為你收集整理的中文分词--词典分词--最长匹配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。