添加术语到python模式singularize的好方法

nik*_*osd 6 python nlp

我使用python模式来获得单数形式的英语名词.

    In [1]: from pattern.en import singularize
    In [2]: singularize('patterns')
    Out[2]: 'pattern'
    In [3]: singularize('gases')
    Out[3]: 'gase'
Run Code Online (Sandbox Code Playgroud)

我通过定义来解决第二个例子中的问题

    def my_singularize(strn):
        '''
        Return the singular of a noun. Add special cases to correct pattern generic rules.
        '''
        exceptionDict = {'gases':'gas','spectra':'spectrum','cross':'cross','nuclei':'nucleus'}
        try:
            return exceptionDict[strn]
        except:
            return singularize(strn)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,例如添加到模式规则,或以exceptionDict某种方式使模式内部?

hea*_*n00 5

正如评论中所提到的,将单词词形还原会更好。它是nltk 词干模块的一部分。

from nltk.stem import WordNetLemmatizer

wnl = WordNetLemmatizer()
test_words = ['gases', 'spectrum','cross','nuclei']
%timeit [wnl.lemmatize(wrd) for wrd in test_words]

10000 loops, best of 3: 60.5 µs per loop
Run Code Online (Sandbox Code Playgroud)

与你的功能相比

%timeit [my_singularize(wrd) for wrd in test_words]
1000 loops, best of 3: 162 µs per loop
Run Code Online (Sandbox Code Playgroud)

nltk 词形还原效果更好。