1. 程式人生 > >分詞演算法:正向最大匹配演算法

分詞演算法:正向最大匹配演算法

正向最大匹配演算法

正向最大匹配演算法(FMM)是一種基於詞典的分詞方法,同樣的基於詞典的方法還有逆向最大匹配法(RMM),ngram法.FMM故名思意,左向右掃描尋找詞的最大匹配,是一種貪心的思想。

流程

  • 限定詞的最大長度
  • 從最大的長度開始在詞庫中進行匹配只到匹配成功
  • 更新起點的位置繼續上一步驟只到全部分完

實驗

詞庫

東北
林業
大學
學校
東北林業大學
好地方
學校

文字

東北林業大學是好學校
這裡是個好地方

Code

#!/usr/bin/python

import sys

Maxlen=6

def max_match(line,dict):
    line
=line.decode("utf8") word=[] i=0 while i<len(line): match = False for id in xrange(Maxlen, 0, -1): tmp=line[i:i+id].encode("utf8") for var in dict: if tmp in var: word.append(tmp) i+=id match=True break if
match: break if not match: word.append(line[i].encode("utf8")) i+=1 return word if __name__ == "__main__": words=open(sys.argv[1]) dict = open(sys.argv[2], "r") out=open("./out.txt","w") List = list(dict) try: for line
in words: out.write(" ".join(max_match(line.strip(),List))) out.write("\n") finally: out.close() words.close() dict.close()

實驗結果

東北林業大學 是 好 學校
這 裡 是 個 好地方

相關推薦

中文正向匹配演算法

中文分詞目前可以分為“規則分詞”,“統計分詞”,“混合分詞(規則+統計)”這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。 正向最大匹配演算法

演算法:正向匹配演算法

正向最大匹配演算法 正向最大匹配演算法(FMM)是一種基於詞典的分詞方法,同樣的基於詞典的方法還有逆向最大匹配法(RMM),ngram法.FMM故名思意,左向右掃描尋找詞的最大匹配,是一種貪心的思想。

中文的逆向匹配演算法(2016年)

逆向最大匹配演算法,中文分詞機械化分詞中最基本的演算法,也是入門級別的演算法。但是,在機械化分詞方面的效果,表現卻很好。尤其是在大文字的時候,一次取較多詞語進行匹配,因為大文字匹配成詞的概率遠遠高於小文字,所以會有很好的表現。下面的程式碼,來自IK分詞的一部分原始碼包,201

詞法分析-中文技術-正向匹配法與逆向匹配

Long Time No See... 最近深受痛苦的折磨,這一年來所有的事跌宕起伏,如同一瞬,一個個打擊接踵而至,從年初的各種擦邊掛,到各種失敗,各種放棄,似乎沒有發生一個順心的事,不知道從什麼時候起戾氣變得越來越重,更無與人說。不管如何,“盡吾志也而不能至者,可以無悔矣,其孰能譏之乎?”……

基於詞典的正向匹配演算法優先匹配

public Set<String> matchChinese(String text, Set<String> dictionary, int maxLength) { //text:待匹配文字 dictiona:詞典

正向匹配演算法實現之python實現

1.python 版本:python 3.6.4 2.思路: s1.匯入分詞詞典,儲存為字典形式dic,匯入停用詞詞典stop_words,儲存為字典形式,需要分詞的文字檔案cutTest.txt,儲存為字串chars s2.遍歷分詞詞典,找出最長的詞,長度為max_chars s3

中文實現——雙向匹配

關於中文分詞的一些基本介紹,可以看這篇部落格《中文分詞方法總結》。這裡就不再進行詳細介紹了。 雙向最大匹配方法 雙向最大匹配方法是一種基於詞典的分詞方法。基於詞典的分詞方法是按照一定策略將待分析的漢字串與一個“大機器詞典”中的詞條進行匹配,若在詞典中找到某個字串,則匹配成功

正向和逆向匹配演算法進行中文(續)

一、結果分析:         1.程式執行結果,如下圖所示:         2.總體分析。         (1)正向和逆向匹配都正確的句子數目為 1731,佔句子總數的39.0%         (2)正向最大匹配完全正確的句子數目為 1917,佔句子總數的43

自己動手寫引擎——逆向正向、雙向演算法的實現

分詞引擎已經是NLP最成熟的部分了,經歷了:字典分詞,統計分詞等發展之後,除了應付學術中才有的各種變態歧義句之外,目前工業界的分詞引擎對於絕大多數的常見問題已經足以應對,頂多是需要不斷優化新詞字典就可以了。 但不管怎麼樣,對於一個NLPer還是要能夠手寫最簡單的分詞演算法的

演算法記事本#NLP-1】匹配演算法

> **本文地址**: # \#NLP-1 最大匹配演算法(MM) **最大匹配演算法**(Maximum Matching)被用於對一個**文段**進行**詞語劃分**(Word Segmentation)。 > ## 注意 > 這是**詞元化(Tokenization)演算法** > 此方法*

雙向匹配演算法——基於詞典規則的中文(Java實現)

目錄 一、中文分詞理論描述 二、演算法描述       1、正向最大匹配演算法       2、反向最大匹配演算法       3、雙劍合璧 三、案例描述 四、JAVA實現完整程式碼 五、組

中文——正向匹配

中文分詞應用很廣泛,網上也有很多開源專案。我在這裡主要講一下中文分詞裡面演算法的簡單實現,廢話不多說了,現在先上程式碼 package com; import java.util.ArrayList; import java.util.List; public cl

逆向匹配演算法之python實現

1.執行環境 python 3.6.4 2.思路 大致思路與正向相同,可參考我的上一篇部落格。 3.程式碼實現 import codecs #獲得分詞字典,儲存為字典形式 f1 = codecs.open('./corpus/WordList.txt', 'r', encodi

模板_matlab 匈牙利演算法匹配數/小覆蓋點)

int map[505][505]; int v2_link[10005]; int v2_used[10005]; int res,v1,v2; bool dfs(int x) { for(in

資料探勘十演算法----EM演算法期望演算法

概念 在統計計算中,最大期望(EM)演算法是在概率(probabilistic)模型中尋找引數最大似然估計或者最大後驗估計的演算法,其中概率模型依賴於無法觀測的隱藏變數(Latent Variable)。 最大期望經常用在機器學習和計算機視覺的資料聚類(Data Clust

perl -正向匹配 轉自Sighan 提供的FMM程式

#!/usr/bin/perl -w # GBK編碼,引數一 詞典  引數二 待分文字#轉自Sighan 提供的FMM程式 ,不是原創 #所以把人家的宣告都放在下面了 #####################################################

中文演算法正向匹配演算法(Python版)

最大匹配演算法是自然語言處理中的中文匹配演算法中最基礎的演算法,分為正向和逆向,原理都是一樣的。 正向最大匹配演算法,故名思意,從左向右掃描尋找詞的最大匹配。 首先我們可以規定一個詞的最大長度,每次掃描的時候尋找當前開始的這個長度的詞來和字典中的詞匹配,如果沒有找到,就縮短

深度解析中文演算法正向/逆向匹配

中文分詞演算法概述:  1:非基於詞典的分詞(nlp語義領域)     相當於人工智慧領域計算。一般用於機器學習,特定領域等方法,這種在特定領域的分詞可以讓計算機在現有的規則模型中, 推理如何分詞。在某個領域(垂直領域)分詞精度較高。但是實現比較複雜。 2:基於詞典的分

HMM匹配演算法(Python)

正向最大匹配演算法是我國最早提出的解決中文分詞問題的演算法,因其簡單易操作,至今仍作為機器分詞的粗分演算法,在今天看來,這種演算法的準確率遠不夠高,無法達到令人滿意的要求。這只是一次練習。 待切分

中文--逆向匹配

res 最長 java 搜索字符串 name ++ san imp 匹配 上一篇文章中介紹了正向最大匹配。能夠看到有時候效果不是非常好。這裏在介紹一種逆向最大匹配的算法。詞典和匹配的字符串都和上一篇文章同樣 僅僅是本算法是從後到前搜索字符串。然後找到最長的