python词干本地语言

时间:2015-08-13 11:29:41

标签: python

我使用基于规则的算法来阻止我的本地语言中的单词。所以任何蟒蛇识字的身体都可以帮助我。

在我的语言中,通过重复前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)`

2 个答案:

答案 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)