向 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'
我的这个 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'