2023年分詞大作業 正向最大匹配

2021-09-05 23:41:31 字數 3497 閱讀 8872

(1)語料庫格式:為了防止我們作弊,老師對漢字進行了編碼,讓我們對「加密後」的文字進行分詞

兩個豎線之間的部分對應於乙個詞。

首先介紹 正向最大匹配方法

第一步:資料預處理與字典形成:首先語料庫轉化成乙個set格式,set 包含 語料庫中出現的全部詞

import

reimport

cpickle as mypickle

defdatafile(name,sep='

|'):'''

use generator to create a iterable object 

'''for

line 

infile(name):

yield

line.split(sep)

candidates

=datafile(r

'.\data\training.txt')

p1=re.compile(

'(^\s+|\s+$)')

p2=re.compile('\d

')result

=set()   

form 

incandidates:

singleline=

fore 

inm:e=

p1.sub(

'',e)

ifprint

singleline

result

=result

|set(singleline)    f2=

file(

'finadictionary.data',

'w')

mypickle.dump(result,f2)

f2.close()

#print result

print

'finish'

第二步:正向最大匹配演算法實現(fmm):

#-*- coding: cp936 -*-

class

fmm(dict):

def__init__

(self,f):           

import

cpickle as mypickle

self.dictionary

=mypickle.load(f)

self.delimiter='

'def

myfmm(self,sentence):

maxlen=20

#最大單詞長度

result=

while

true:

length

=len(sentence)

#sentence 為乙個list,每乙個元素為乙個單字,length初始化為乙個句子的長度,最後演變成乙個詞的長度

iflength

>1:

#單字直接預設存在,兩個或兩個字以上才啟用查字典方法

iflength

>

maxlen:

length

=maxlenw=

sentence[0:length]

#w為序列

w_sent

=self.delimiter.join(w)

#w_sent為候選的詞,屬於字串

test

=w_sent 

notin

self.dictionary

#測試字典裡是不是出現了該詞如果出現返回 false不出現返回true

while

test:

#當前詞在字典中不存在

length

=length-1

#減少乙個字繼續查字典

iflength==1

:w_sent

=sentence[0:length][0]

#單字直接預設為此

test

=false

else

:    w=

sentence[0:length]

w_sent

=self.delimiter.join(w)

test

=w_sent 

notin

self.dictionary

else

:w_sent

=sentence[0:length][0]

#單字預設為詞

print

w_sent

sentence

=sentence[length:]

iflen(sentence)

==0:

break

return

result

測試**:

#-*- coding: cp936 -*-

result=

delimiter='

'delimiter2='

|'from

wordsegmentation 

import

fmmclass

importre#

獲取待測試的資料

fid=

file(r

'c:\python26\wordsegmentation\mydictionary.data')

fmm=

fmmclass.fmm(fid)

sentence=

restult=

p1=re.compile(

'\d+')

f=file(r

'.\corpus-test\corpus-test-digit.utf-8.txt')

forline 

inf:

sentence

=p1.findall(line)

iflen(sentence)

>

0:result_single

=fmm.myfmm(sentence)

result

=result

+result_single

else

:continue

#把result 變成 老師的資料格式,並且保持到文字檔案reult中s=

form 

inresult:m=

''+m

+''=

delimiter2.join(s)

finalresult

=finalresult+'

|'#得到了和老師給的資料一致的格式型別

fresult

=file(r

'.\corpus-test\result.txt',

'w')

fresult.write(finalresult)

fresult.close()

print

'final finish congratulations!'#

print result

稍後上傳原始碼包。

ICTCLAS2010分詞工具

計算所漢語詞法分析系統 ictclas 中國科學院計算技術研究所在多年研究基礎上,耗時一年研製出了基於多層隱馬模型的漢語詞法分析系統 ictclas institute of computing technology,chinese lexical analysis system 該系統的功能有 中...

Python 結巴分詞(1)分詞

利用結巴分詞來進行詞頻的統計,並輸出到檔案中。結巴分詞的特點 支援繁體分詞 支援自定義詞典 mit 授權協議 演算法 分詞引數 使用者詞典 載入詞典 使用者詞典 userdict.dict 雲計算 5 李小福 2 nr 創新辦 3 i easy install 3 eng 好用 300 韓玉賞鑑 3...

mysql 三分分詞 MySQL 中文分詞原理

一,首先我們來了解一下其他幾個知識點 1.mysql的索引意義?索引是加快訪問表內容的基本手段,尤其是在涉及多個表的關聯查詢裡。當然,索引可以加快檢索速度,但是它也同時降低了索引列的插入,刪除和更新值的速度。換通俗的話來講 mysql中的索引就是乙個特殊的平衡二叉樹,當在平衡二叉樹中搜尋某一條值的時...