Стемминг в питоне
Я хочу остановить мой текст, который я читаю из файла CSV. Но после стебл-оператора текст не меняется. Тогда я где-то читал, что мне нужно использовать POS-теги, чтобы это произошло, но это не помогло.
Подскажите, пожалуйста, что я делаю не так? Поэтому я читаю csv, удаляю знаки препинания, разбиваю токены, получаю POS-теги и пытаюсь остановить, но ничего не меняется.
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.stem import PorterStemmer
import nltk
from nltk import pos_tag
stemmer = nltk.PorterStemmer()
data = pd.read_csv(open('data.csv'),sep=';')
translator=str.maketrans('','',string.punctuation)
with open('output.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=';',
quotechar='^', quoting=csv.QUOTE_MINIMAL)
for line in data['sent']:
line = line.translate(translator)
tokens = word_tokenize(line)
tokens_pos = nltk.pos_tag(tokens)
final = [stemmer.stem(tagged_word[0]) for tagged_word in tokens_pos]
writer.writerow(tokens_pos)
Примеры данных для stemming:
The question was, what are you going to cut?
Well, again, while you were on the board of the Woods Foundation...
We've got some long-term challenges in this economy.
Спасибо заранее за любую помощь!
2 ответа
Вы должны были попытаться отладить свой код. Если (после необходимого импорта) вы только что попробовали print(stemmer.stem("challenges"))
, вы бы увидели, что стеминг работает (выше будет напечатано "вызов"). Ваша проблема - небольшой недосмотр: вы собираете стебли в final
, но вы печатаете tokens_pos
, Итак, "решение" таково:
writer.writerow(final)
Ваш код должен напечатать окончательную переменную для желаемого вывода, вместо этого вы печатаете tokens_pos:)
Попробуйте следующее:
import string
import nltk
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer
def preprocess(sentence):
stemmer = nltk.PorterStemmer()
translator=sentence.translate(string.maketrans("",""), string.punctuation)
translator = translator.lower()
tokens = word_tokenize(translator)
final = [stemmer.stem(tagged_word) for tagged_word in tokens]
return " ".join(final)
sentence = "We've got some long-term challenges in this economy."
print "Original: "+ sentence
stemmed=preprocess(sentence)
print "Processed: "+ stemmed
Выход:
Original: We've got some long-term challenges in this economy.
Processed: weve got some longterm challeng in thi economi
Надеюсь, это поможет вам!