Optimise runtime of filter character method
Possible performance improvements


w = w[:-1] is probably inefficient since it asks to perform a copy of every element of the list minus one. del w[-1] is the idiomatic way to delete the last element of a list.
You probably have more characters in a string corresponding to isalpha than characters exactly equal to "'" or "-". Therefore, you may notice speed improvements by checking isalpha before the other two conditions.
You could create a table containing all the values of isalpha plus "'" and "*" and then check whether a character is in this table. However, I don't think that it can bring you significant speed improvements, unless you filter with a dedicated str method that may be optimized (replace for example).


Style

A few notes about style:


Please, don't put parenthesis around the while condition, that goes against the Python style guide (PEP8).
Same goes for if.