我使用基于规则的算法来阻止我的本地语言中的单词。所以任何蟒蛇识字的身体都可以帮助我。
在我的语言中,通过重复前2个或3个字符(声音),一些单词会复数。
例如
Diimaa (root word) ==> Diddiimaa(plural word)
Adii (root word) ==> Adadii(plural word)
所以现在我希望我的程序拒绝"没有"从第一个例子和" Ad"从第二个例子
以下是我的代码,它没有返回任何结果
`def compput(mm):
vv=1
for i in mm:
if seevowel(i)==1:
inxt=mm.index(i)+1
if inxt<len(mm)-1 and seevowel(mm[inxt])==0:
vv=vv+1
return vv
def stemm_maker(tkn):
for i in range(len(tkn)):
if (i[0] == i[2] and i[1] == i[3]):
stem = i[2:]
if compput(stem) > 0:
return stem
elif ((i[0] == i[2] or i[0]== i[3]) and i[1] == i[4]):
stem = i[3:]
if compput(self) > 0:
return stem
else:
return tkn
print(stem)`
答案 0 :(得分:2)
解决此问题的一种方法是使用正则表达式。
查看这些对(找到here):
adadii adii
babaxxee baxxee
babbareedaa bareedaa
diddiimaa diimaa
gaggaarii gaarii
guguddaa guddaa
hahhamaa hamaa
hahapphii happhii
规则似乎是
if the word starts with XY...
then the reduplicated word is either XYXY... or XYXXY...
在正则表达式语言中,这可以表示为
^(.)(.)\1?(?=\1\2)
表示:
char 1
char 2
maybe char 1
followed by
char 1
char 2
完整示例:
test = {
'adadii': 'adii',
'babaxxee': 'baxxee',
'babbareedaa': 'bareedaa',
'diddiimaa': 'diimaa',
'gaggaarii': 'gaarii',
'guguddaa': 'guddaa',
'hahhamaa': 'hamaa',
'hahapphii': 'happhii',
}
import re
def singularize(word):
m = re.match(r'^(.)(.)\1?(?=\1\2)', word)
if m:
return word[len(m.group(0)):]
return word
for p, s in test.items():
assert singularize(p) == s
答案 1 :(得分:2)
这是我在此页面上发布的问题的答案。我尝试了以下基于规则的代码,它可以正常工作。我用分配给jechoota的单词检查了我的代码
jechoota = "diddiimaa adadii babaxxee babbareedaa gaggaarii guguddaa hahhamaa hahapphii"
token = jechoota.split()
def stem(word):
if(word[0] == word[2] and word[1] == word[3]):
stemed = word[2:]
elif(word[0] == word[2] and word[0] == word[3] and word[1] == word[4]):
stemed = word[3:]
return stemed
for i in token:
print stem(i)