向 nltk 添加一个新的词干分析器

Add a new stemmer to nltk

我的这个 python 函数按预期工作。是否可以将逻辑保存为 NLP 词干分析器? 如果是,需要做哪些改变?

import itertools, re
def dropdup(mytuple):
    newtup=list()
    for i in mytuple:
        i = i[:-3] if i.endswith('bai') else i
        for r in (("tha", "ta"), ("i", "e")):
            i = i.replace(*r)
            i = re.sub(r'(\w)+',r'', i)
        newtup.append(''.join(i for i, _ in itertools.groupby(i)))
    return tuple(newtup)

dropdup(('savithabai', 'samiiir', 'aaaabaa'))
('saveta', 'samer', 'aba')

我希望用户导入这样的东西...

from nltk.stemmer import indianNameStemmer

还有一些规则要添加到逻辑中。我只想知道这是否是一个有效的 (pythonic) 想法。

显然,您所要做的就是继承 StemmerI class。

先看https://www.python-course.eu/python3_inheritance.php

创建文件mytools.py

import itertools, re
from nltk.stem import StemmerI

class MyStemmer(StemmerI):
    def stem(self, token):
        itoken = token[:-3] if token.endswith('bai') else token
        for r in (("tha", "ta"), ("i", "e")):
            token = token.replace(*r)
            token = re.sub(r'(\w)+',r'', token)
        return ''.join(i for i, _ in itertools.groupby(token))

用法:

>>> from mystemmer import MyStemmer
>>> s = MyStemmer()
>>> s.stem('savithabai')
'savetabae'