Python 最大逆向匹配演算法

2021-08-15 16:20:35 字數 1596 閱讀 8011

第三次重新寫這個演算法,每次寫都有新的體會。

這次最大的感受是把訪問資料夾的包都熟悉了一下,os和shutil。後者用來刪除整個檔案,這種破壞力還是慎用吧。

def mk_new_dir(filename):  # 新建乙個資料夾,如果存在,則刪除並重建。

if os.path.exists(filename) is true:

shutil.rmtree(filename)

os.mkdir(filename)

下面是最大逆向匹配核心部分:

def rmm(dicwords, lines, n, filepath):

"""最大逆向匹配:

最大逆向匹配演算法,需要分詞詞典;待分割文字;設定分割長度int

"""global bus #

for line in lines:

if line.strip().replace(' ', '').replace('\n', '') != '':

bus = # 釋放

line = line.strip().replace('\n', '').replace(' ', '') # 清洗

# print(line)

line_len = len(line) # 句長

if line_len < n:

n = line_len # 如果句長短語規定切分長度,則設定規定切分長度為句長

# print(str(n))

start = n

s = line[-start:] # 獲取待分割語句

t = rmm_cut(s, dicwords) # 獲取已切分詞長,用來加工下一次取詞

end = t

while end < line_len: # 核心部分,實現對句子的迴圈取詞

start = start + t

s = line[-start:-end]

# print(s)

t = rmm_cut(s, dicwords) # 已切分詞長

end = end + t

filewrite(bus, filepath) # 寫入結果檔案

def rmm_cut(s, dicwords):

"""逆向匹配,分函式"""

flag = true

global bus

# print(s)

while flag is true: # 迴圈切分

if s in dicwords:

s = '/' + s

flag = false

return len(s) - 1 # 對返回的數進行-1處理,保證下一次的取詞正確

elif len(s) == 1:

s = '/' + s

flag = false

return 1

else:

s = s[1:]

rmm(詞典列表,讀入的文字,每次取句子最大長度,儲存文字路徑)

rmm_cut(取得的長句,詞典列表)

不論正向還是逆向匹配,都需要運用到python的切片功能,把過程搞明白,就能很好的實現匹配功能。

乙個最大逆向匹配分詞演算法的例子

逆向匹配法思想與正向一樣,只是從右向左切分,這裡舉乙個例子 輸入例句 s1 計算語言學課程有意思 定義 最大詞長maxlen 5 s2 分隔符 假設存在詞表 計算語言學,課程,意思,最大逆向匹配分詞演算法過程如下 1 s2 s1不為空,從s1右邊取出候選子串w 課程有意思 2 查詞表,w不在詞表中,...

。乙個最大逆向匹配分詞演算法的例子

逆向匹配法思想與正向一樣,只是從右向左切分,這裡舉乙個例子 輸入例句 s1 計算語言學課程有意思 定義 最大詞長maxlen 5 s2 分隔符 假設存在詞表 計算語言學,課程,意思,最大逆向匹配分詞演算法過程如下 1 s2 s1不為空,從s1右邊取出候選子串w 課程有意思 2 查詞表,w不在詞表中,...

分詞演算法 正向最大匹配和逆向最大匹配實現

假設已經有正向匹配演算法原始碼,則可以將文件進行倒序處理,生成逆序文件,然後根據逆序詞典,對逆序文件使用正向最大匹配法處理即可。同理已經存在逆向最大匹配演算法,則只要將文件倒序處理,正向詞典倒序變為逆序詞典,則可以送入逆向西大匹配演算法中進行分詞處理。class imm object def ini...