1. 程式人生 > >中文分詞——正向最大匹配法

中文分詞——正向最大匹配法

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

package com;


import java.util.ArrayList;
import java.util.List;


public class Segmentation1 {
	private List<String> dictionary = new ArrayList<String>();
	private String request = "北京大學生前來應聘";
	
	public void setDictionary() {
		dictionary.add("北京");
		dictionary.add("北京大學");
		dictionary.add("大學");
		dictionary.add("大學生");
		dictionary.add("生前");
		dictionary.add("前來");
		dictionary.add("應聘");
	}
	
	public String leftMax() {
		String response = "";
		String s = "";
		for(int i=0; i<request.length(); i++) {
			s += request.charAt(i);
			if(isIn(s, dictionary) && aheadCount(s, dictionary)==1) {
				response += (s + "/");
				s = "";
			} else if(aheadCount(s, dictionary) > 0) {
				
			} else {
				response += (s + "/");
				s = "";
			}
		}
		return response;
	}
	
	private boolean isIn(String s, List<String> list) {
		for(int i=0; i<list.size(); i++) {
			if(s.equals(list.get(i))) return true;
		}
		return false;
	}
	
	private int aheadCount(String s, List<String> list) {
		int count = 0;
		for(int i=0; i<list.size(); i++) {
			if((s.length()<=list.get(i).length()) && (s.equals(list.get(i).substring(0, s.length())))) count ++;
		}
		return count;
	}
	
	public static void main(String[] args) {
		Segmentation1 seg = new Segmentation1();
		seg.setDictionary();
		String response1 = seg.leftMax();
		System.out.println(response1);
	}
}

可以看到執行結果是:北京大學/生前/來/應聘/

演算法的核心就是從前往後搜尋,然後找到最長的字典分詞。

相關推薦

中文——正向匹配

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

中文--逆向匹配

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

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

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

中文熵馬爾可夫模型MEMM

Xue & Shen '2003 [2]用兩種序列標註模型——MEMM (Maximum Entropy Markov Model)與CRF (Conditional Random Field)——用於中文分詞;看原論文感覺作者更像用的是MaxEnt (Maximum Entropy) 模型而非MEM

中文正向匹配演算法

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

演算法:正向匹配演算法

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

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

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

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

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

中文--正向匹配python實現

命中 col odin app () 切分 -- \n 多個 最大匹配法:最大匹配是指以詞典為依據,取詞典中最長單詞為第一個次取字數量的掃描串,在詞典中進行掃描(為提升掃描效率,還可以跟據字數多少設計多個字典,然後根據字數分別從不同字典中進行掃描)。例如:詞典中最長詞為“中

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

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

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

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

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

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

一個簡單正向匹配(Maximum Matching)MM中文演算法的實現

1.構建詞典記憶體樹的TrieNode節點類:       package cn.wzb.segmenter.mm.bean; import java.util.HashMap; /** * 構建記憶體詞典的Trie樹結點 * */ public cla

中文實現——雙向匹配

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

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

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

基於Tire樹和概率中文功能的Java實現

對於分詞系統的實現來說,主要應集中在兩方面的考慮上:一是對語料庫的組織,二是分詞策略的制訂。 1.   Tire樹 Tire樹,即字典樹,是通過字串的公共字首來對字串進行統計、排序及儲存的一種樹形結構。其具有如下三個性質: 1)      根節點不包含字元(或漢字),除根節

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

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

概率及性能測試

初始化 and ifs push 復位 enc prev 特殊字符 mat 最大概率分詞是一種最主要的統計方法分詞。一個待切割的字符串有多種分詞結果,最大概率分詞的原則是將當中概率最大的那個作為該字符串的分詞結果。 第一部分 理論基礎

概率

優點: 由於最大概率法考慮的是某種字串出現的條件下,最可能劃分的詞串,因此在擁有大量標註語料的前提下,可以在一定程度上避免切分歧義。 原理: 設Z=z1z2…zn表示字串, W=w1w2…wm表示切分後的詞串, 漢語詞語切分可以看作是求使P(W|Z)最大的切分。 p(W|