title: PorterStemmer() trims the last word in a sentence differently
body: <p>I have the following code for an off-line environment:</p>
  <pre><code>import pandas as pd
  import re
  from nltk.stem import PorterStemmer
  
  test = {'grams':  ['First value because one does two THREE', 'Second value because three and three four', 'Third donkey three']}
  test = pd.DataFrame(test, columns = ['grams'])
  STOPWORDS = {'and', 'does', 'because'}
  
  def rower(x):
      cleanQ = []  
      for i in range(len(x)): cleanQ.append(re.sub(r'[\b\(\)\\\&quot;\'\/\[\]\s+\,\.:\?;]', ' ', x[i]).lower())
      
      splitQ = []
      for row in cleanQ: splitQ.append(row.split())
      splitQ[:] = [[word for word in sub if word not in STOPWORDS] for sub in splitQ]
      splitQ = list(map(' '.join, splitQ))
      print(splitQ)
      
      originQ = []    
      for i in splitQ: 
          originQ.append(PorterStemmer().stem(i))
      print(originQ)
      
  rower(test.grams)
  </code></pre>
  <p>Which produces this:</p>
  <pre><code>['first value one two three', 'second value three three four', 'third donkey three']
  ['first value one two thre', 'second value three three four', 'third donkey thre']
  </code></pre>
  <p>The first list shows the sentences before applying the <code>PorterStemmer()</code> function. The second list  shows sentences after applying the <code>PorterStemmer()</code> function.</p>
  <p>As you can see, <code>PorterStemmer()</code> trims the word, <code>three</code>, into <code>thre</code> only when the word is positioned as the last word in a sentence. When the word, <code>three</code>, is not the last  word, <code>three</code> stays <code>three</code>. I can't seem to figure out  why it is doing this. I also worry that if I applied the <code>rower(x)</code> function to other sentences, it may produce similar outcomes without me noticing.</p>
  <p>How do I prevent <code>PorterStemmer</code> from treating the last word differently?</p>