我的语法表明'A'
可以替换为“' A' aa'' aA'' ;了Aa'' AA&#39 ;. (准确地说是梵语语法)。
我想将复合词分成可能的组成部分,例如'samADAna'
- > ['sam+ADAna','sama+ADAna']
。
lstrep = [('A',('A','aa','aA','Aa','AA'))]
我的字典样本是
['sam','sama','ADAna']
实际字典是450,000个单词列表。
Optionally replacing a substring python已经展示了一种在所有地方替换'A'
后创建所有可能排列的列表的方法。
可以看出,它会给出25个成员名单。在此之后,我在How to split text without spaces into list of words?使用Generic Human的代码根据我的字典推断出化合物的中断。
实际上代码必须运行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
答案 0 :(得分:0)
我认为您正在尝试在梵语中实施cc
中的divide
规则。 (变调-vichchhed)
现在,据我记忆,只有一套规则(我们这里不是joining
,而是samas
)。就像在这里,你说的是:
sandhi
所以,我真的不认为你需要以各种可能的方式分词。拿起你的分裂方程的LHS,例如。您正在a/A + a/A = A //pronounce as if this is hindi/sanskrit
分割单词,新单词是新单词的最后一个字符A
,下一个单词是a/A
。 (或者在这种情况下,由于(小a)声音,第一个单词的最后一个字符也不是a/A
。现在您需要查看字典并查看可能的组合。这可能非常模糊,因为我不确定在这种情况下你会如何区分a
。
所以,你实际上并不需要以所有可能的方式分割单词,只有sam and sama
- 规则适用的地方,并且分裂的单词在字典中存在。
就像这里一样,
sandhi
现在,标有word = samAdhAna
possible splits:
sam + adhana --
sama + adhana --
samA + adhana
sam + Adhana
sama + Adhana
samA + Adhana
samadh + ana
samadha + ana
samadhA + ana
samadh + Ana
samadha + Ana
samadhA + Ana
的分割是两个分词在字典中出现的分割。因此,在这个例子中,您实际上需要总共考虑12个案例。