第三次重新寫這個演算法,每次寫都有新的體會。
這次最大的感受是把訪問資料夾的包都熟悉了一下,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...