我有一個語法,說'A'
可以用'A','aa','aA','aa','AA'替換。 (梵文語法準確)。基於字典的打破化合物
我想將複合詞分解爲其可能的組成部分,例如, 'samADAna'
- >['sam+ADAna','sama+ADAna']
。
lstrep = [('A',('A','aa','aA','Aa','AA'))]
我的字典樣品
['sam','sama','ADAna']
實際字典45萬個單詞列表。
Optionally replacing a substring python已經示出了在所有地方替換'A'
之後創建所有可能排列的列表的方式。
可以看出,它會給出25個成員列表。在此之後,我使用Generic Human的代碼How to split text without spaces into list of words?來根據我的字典推斷化合物的中斷。
實際上,代碼必須運行25次。在這個時候這不是一個大問題。
但是,如果我的輸入字符串是'samADAnApA'
- 排列將是625.代碼將不得不等待625次。這對內存和時間來說是一個沉重的代價。
問題 - 有沒有一種方法可以限制詞典允許的單詞可能的排列方式。例如該字典沒有'samA'
。因爲samADAna, samAaDAna, samAADAna
等不會包含在排列中嗎?
我嘗試:
if __name__=="__main__":
perm = permut(sys.argv[1],lstrep,words) # function permut creates all possible permutations of replacements.
output = []
for mem in perm:
split = infer_spaces(mem) # Code of Generic Human
if split is not False:
output.append(split)
output = sorted(output,key=len)
print output