As mentioned in the comments, you would be better off by lemmatizing the words. Its part of nltk stemming module.
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
compared to your function
%timeit [my_singularize(wrd) for wrd in test_words]
1000 loops, best of 3: 162 µs per loop
nltk lemmatizing performs better.