【自然語言處理】正向最大匹配算法(FMM),反向最大匹配算法(BMM)和雙向最大匹配算法(BM)原理及實現

目錄

一,正向最大匹配算法(FMM)

?二,反向最大匹配算法(RMM)


一,正向最大匹配算法(FMM)

????????正向最大匹配分詞(Forward maximum matching segmentation)通常簡稱為FMM法。其基本思想為:假定分詞詞典中的最長詞有i個漢字字符,則用被處理文檔的當前字串中的前i個字作為匹配字段,查找字典。若字典中存在這樣的一個字詞,則匹配成功,匹配字段被作為一個詞切分出來。如果詞典中找不到這樣的一個字詞,則匹配失敗,將匹配字段中的最后一個字去掉,對剩下的字串重新進行匹配處理。如此進行下去,直到匹配成功,即切分出一個詞或剩余字串的長度為零為止。這樣就完成了一輪匹配,然后取下一個i字字串進行匹配處理,直到文檔被掃描完為止。

例子:

設變量dt為字典,s為待切字符串,result為被切后的詞

令dt = ['abc', 'bcd'] ,s = ['abcd'],則?result = ['abc', 'd']

原理:字典中最大字符長度為‘abc’和‘bcd’,正向選取‘abc’,則拿‘abc’去匹配,s中匹配到‘abc’后切出,之后字典中最長的是‘d’,匹配到s的‘d’后切出,得到切片后的result?= ['abc', 'd']

代碼實現:?

def FMM(dt, s):  # 正向最大匹配算法result = []   max_len = max([len(i) for i in dt])    # 選取字典里長度最大的字符串start = 0while start != len(s):    # 判斷列表不為空,建立循環                index = start + max_len    # 從0開始正向索引最大長度的字符串if index > len(s):         # 判斷是否溢出列表index = len(s)for _ in range(max_len):    t = s[start:index]       # t是切片if t in dt or len(t) == 1:result.append(t)start = indexbreakindex -= 1 # 為了保證算法能夠掃描到所有字符return result

?二,反向最大匹配算法(RMM)

????????逆向最大匹配算法(Reserve?maximum matching segmentation)的基本原理與正向最大匹配法相同,不同的是分詞切分的方向與FMM法相反。逆向最大匹配法從被處理文檔的末端開始匹配掃描,每次取最末端的i個字符(為詞典中最長詞數)作為匹配字段,若匹配失敗,則去掉匹配字段最前面的一個字,繼續匹配。相應地,它使用的分詞詞典是逆序詞典,其中的每個詞條都將按逆序方式存放。在實際處理時,先將文檔進行倒排處理,生成逆序文檔。然后,根據逆序詞典,對逆序文檔用正向最大匹配法處理即可。

例子:

設變量dt為字典,s為待切字符串,result為被切后的詞

令dt = ['abc', 'bcd'] ,s = ['abcd'],則?result = ['a', 'bcd']

原理:字典中最大長度為'abc',‘bcd’,反向選取‘bcd’,則拿‘bcd’去匹配,s中匹配到‘bcd’后切出,之后字典中最長的是‘a’,匹配到s的‘a’后切出,得到切片后的result?= ['a', 'bcd']

代碼實現:

def RMM(dt, s): # 反向最大匹配算法result = []max_len = max([len(i) for i in dt]) # 選取字典里長度最大的字符串start = len(s)while start != 0:    #判斷列表不為空,建立循環index = start - max_len    # 從列表最后開始索引最大長度的字符串if index < 0:        # 判斷是否溢出列表index = 0for _ in range(max_len):t = s[index:start]    # t是切片if t in dt or len(t) == 1:result.insert(0, t)    # 在最前面插入start = indexbreakindex += 1return result

三,雙向匹配算法(BM)

????????雙向最大匹配算法的原理就是將正向最大匹配算法和逆向最大匹配算法進行比較,從而選擇正確的分詞方式。

????????比較原則/步驟:

????????1.比較兩種匹配算法的結果

????????2.如果分詞數量結果不同:選擇數量較少的那個

????????3.如果分詞數量結果相同

? ????????????????1.分詞結果相同,返回任意一個

? ????????????????2.分詞結果不同,返回單字數較少的一個

? ????????????????3.若單字數也相同,任意返回一個

例子:

設變量dt為字典,s為待切字符串,result_1為被正向切后的詞,result_2為被反向切后的詞

令dt = ['abc', 'deab'] ,s = ['abcdeabc'],則?result_1?= ["abc", "deab", "c"],result_2=["c", "deab"]

原理:字典中最大長度為'deab',則拿‘deab’去匹配,s中匹配到‘deab’后切出,之后字典中最長的是‘abc’,匹配到s的‘abc’后切出,得到切片后的result_1?= ["abc", "deab", "c"],同理result_2=["c", "deab"],其中正向的切詞有三個,逆向有兩個,數量不相等選擇分詞數量 少的,則輸出逆向切詞result_2=["c", "deab"]

def BM(dt, s): # 雙向最大切詞r1 = FMM(dt, s)r2 = RMM(dt, s)if len(r1) == len(r2):if r1 == r2:return r1else:r1_cnt = len([i for i in r1 if len(i)==1])r2_cnt = len([i for i in r2 if len(i)==1])return r1 if r1_cnt < r2_cnt else r2else:return r1 if len(r1) < len(r2) else r2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163245.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

沒有PDF密碼,如何解密?

PDF文件有兩種密碼&#xff0c;一個打開密碼、一個限制編輯密碼&#xff0c;因為PDF文件設置了密碼&#xff0c;那么打開、編輯PDF文件就會受到限制。忘記了PDF密碼該如何解密&#xff1f; PDF和office一樣&#xff0c;可以對文件進行加密&#xff0c;但是沒有提供恢復密碼的功…

powshell 不能運行腳本

1、先執行&#xff1a; Set-ExecutionPolicy -Scope CurrentUser 2、再輸入&#xff1a; remotesigned

win10下安裝gcc

win10下安裝gcc 一、gcc是什么&#xff1f; 1.1、安裝gcc 第一次安裝,記錄一下 一、gcc是什么&#xff1f; GNU編譯器套件(GNU Compiler Collection)包括C、C、Objective-C、Fortran、Java、Ada和Go語言的前端&#xff0c;也包括了這些語言的庫(如libstdc、libgcj等等…

mac電腦文件比較工具 UltraCompare 中文for mac

UltraCompare是一款功能強大的文件和文件夾比較工具&#xff0c;用于比較和合并文本、二進制和文件夾。它提供了豐富的功能和直觀的界面&#xff0c;使用戶能夠輕松地比較和同步文件內容&#xff0c;查找差異并進行合并操作。 以下是UltraCompare軟件的一些主要特點和功能&…

為什么程序員不直接用線上環境寫代碼呢?

為什么程序員不直接用線上環境寫代碼呢&#xff1f; 有的&#xff0c;我就是直接用Linux作為主力電腦使用&#xff0c;大概從201 6年起&#xff0c;我就開始這樣干了。無論是編 程、畫電路板、畫UI、剪視頻.... 都在Linux上面完成。 編程工具大部分都有Linux版本&#xff0c;…

【【Linux 常用命令學習 之 一 】】

Linux 常用命令學習 之 一 打開終端之后的 我們會了解 所使用的 字符串含義 其中前面的 zhuxushuai 是 當前的用戶名字 接下來的 zhuxushuai-virtual-machine 是 機器名字 最后的符號 $表示 當前是普通用戶 輸入指令 ls 是打印出當前所在目錄中所有文件和文件夾 shell 操…

使用css代碼防止圖片被拖拽的教程

在網頁中&#xff0c;我們經常使用圖片來美化頁面或輔助內容呈現&#xff0c;但有時用戶會無意中拖拽圖片&#xff0c;這會對頁面布局或其他元素產生意想不到的影響。為了防止這種情況&#xff0c;我們可以使用CSS來禁止圖片被拖拽。 img {-webkit-user-drag: none;-moz-user-d…

CF 1891A 學習筆記

原題 A. Sorting with Twos time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given an array of integers &#x1d44e;1,&#x1d44e;2,…,&#x1d44e;&#x1d45b;&#xfffd;1,&a…

多個視頻怎么生成一個二維碼?二維碼看視頻的制作方法

二維碼能放入多個視頻嗎&#xff1f;現在用二維碼看視頻是很流行的一種方式&#xff0c;不僅符合現在人的行為習慣&#xff0c;而且還不需要占用自身的容量空間&#xff0c;能夠即時的獲取視頻內容。那么當有多個視頻需要展示&#xff0c;但是想要放到一個二維碼中&#xff0c;…

集團投融資大數據平臺解決方案

一、項目背景 項目為集團型公司大數據平臺項目&#xff0c;整個項目周期約為6個月&#xff0c;整體呈現了對外的數據大屏駕駛倉和對內的看板報表&#xff0c;減少了客戶內部數據上報和報表制作的重復工作量&#xff0c;為集團數據決策奠定基礎。 二、項目目標 戰略層&#xff…

局部保持投影(Locality preserving projections,LPP)

局部保持投影&#xff08;Locality preserving projections&#xff0c;LPP&#xff09; 方法概述 核心思想 有映射 Y m ? n f ( X d ? n ) \underset{m*n}{Y}f(\underset {d*n}X) m?nY?f(d?nX?)&#xff0c;能夠實現將d維的樣本變換到m維空間之中 假設&#xff1a;對…

ESP32 Arduino實戰傳感器篇-- DHT11 DHT22 使用 Web 服務器顯示值

該項目采用 ESP32 作為控制設備,連接到現有的 WiFi 網絡并創建 Web 服務器。當設備連接到該 Web 服務器時,ESP32 將從 DHT11/DHT22 傳感器讀取溫度和相對濕度,并將其發送到設備的 Web 瀏覽器,并具有良好的界面。興奮的?讓我們開始吧! ESP32 內置了溫度傳感器,為什么不使…

咖啡館管理系統點餐外賣小程序效果如何

咖啡一直是很多人喜歡的飲品&#xff0c;比如有些地區的人非常喜歡&#xff0c;熬夜加班醒腦等&#xff0c;咖啡領域市場規模逐年增加&#xff0c;相應的從業商家也在增加&#xff0c;近些年隨著線上生態崛起&#xff0c;傳統線下咖啡館經營痛點顯露出來。 通過【雨科】平臺搭建…

目標檢測算法 - YOLOv4

文章目錄 1. 簡介2. YOLOv4整體結構3. Backbone4. Neck 1. 簡介 YOLOv4是YOLOv3的改進版。YOLOv4并不是原YOLO項目的作者。發表于CVPR2020。 改進&#xff1a; 主干特征提取網絡&#xff1a;Darknet53 -> CSPDarknet53特征金字塔&#xff1a;SPP&#xff0c;PAN分類回歸層…

每天學習一點點之 Tomcat 是如何清除過期 Session 的

今天使用一種很臨時的方案解決 Session 泄漏的問題&#xff1a;縮短 Session 的過期時間。這種方法雖然簡單&#xff0c;但卻非常有效。然而&#xff0c;這引發了一個問題&#xff1a;我們應該將過期時間設置為多短呢&#xff1f;在 Spring Boot 中&#xff0c;最短的過期時間是…

實在智能攜“TARS大模型”入選“2023中國數據智能產業AI大模型先鋒企業”

近日&#xff0c;由數據猿與上海大數據聯盟聯合主辦的“2023企業數智化轉型升級發展論壇”在上海圓滿收官。 論壇頒獎典禮上&#xff0c;《2023中國數據智能產業AI大模型先鋒企業》等六大榜單正式揭曉&#xff0c;旨在表彰在AI領域為數智化升級取得卓越成就和突出貢獻的企業&am…

解決“使用 CNKI 保存時發生錯誤。改為嘗試用 DOI 保存。”【Bug Killed】

文章目錄 簡介解決辦法跟新本地Zotero中茉莉花插件的非官方維護中文翻譯器更新網頁插件Zetero Connector中的Transtors 結語參考資料 簡介 使用Chrome ? Zotero Connector保存中國知網&#xff08;CNKI&#xff09;的參考文獻到本地的Zotero時無法正常保存&#xff0c;出現使…

Altium Designer學習筆記8

創建原理圖元件&#xff1a; 畫出原理圖&#xff1a; 根據規則書畫出原理圖&#xff1a; 根據規則書畫出封裝圖&#xff1a; 參照&#xff1a; 確認下過孔的內徑和外徑的最小允許值。

Vatee萬騰的數字時代探險:vatee科技力量的未來洞悉

在數字化的時代潮流中&#xff0c;Vatee萬騰以其強大的科技力量&#xff0c;正在進行一場前所未有的數字時代探險。 Vatee萬騰的數字時代探險源于其對未來的洞悉。通過深度研究和前瞻性思考&#xff0c;他們將科技力量與未來趨勢相結合&#xff0c;勾勒出數字時代的新藍圖&…

springboot注解@NotNull,@NotBlank,@Valid自動判定空值

一.前言 使用springboot搭建項目時&#xff0c;我們都是采用的Restful風格接口&#xff0c;這里面問題來了&#xff0c;當前端調用接口或者是其他項目調用時&#xff0c;傳入參數時我們不能單一靠調用方來控制參數的準確性&#xff0c;自己也要一些參數進行判斷,進行非空之類的…