После запуска вашего кода, похоже, вы в порядке удаления пунктуации.Я не знаком с graphlab
, но в библиотеке collections
есть хорошие инструменты для подсчета.
Я изменил ваш код, чтобы использовать тип данных collections.Counter
для создания словаря подсчета слов для каждой строки в вашемСерии.Обратите внимание, что я переместил импорт в начало кода (обычно это хорошая практика).Я также включил тестовый pandas.Dataframe
объект, который хорош, чтобы у людей было то, что им нужно для проверки вашего кода и проверки результатов.
from collections import Counter
import pandas as pd
import string
def remove_punctuation(text):
word_counter = Counter() # Initialize our counter
##Multiply by number of punctuation characters
table = string.maketrans('.?,!:;_', 7 * " ")
##takes care of float has no attribute translate
products['review'] = products.fillna({'review':''})
for word in text.translate(table).split():
word_counter[word] += 1
return dict(word_counter)
products = pd.DataFrame({'review':['apple,orange','hello:goodbye']}) # test df
review_without_punctuation = products['review'].apply(remove_punctuation)
products['word_count']= review_without_punctuation
Я изменил код в Python 3.x и считаю, что string.maketrans
из 2.x, поэтому вам, возможно, придется исправить это, если я не перевёл его обратно в 2.x правильно (у меня не настроена эта среда на моем компьютере).Мой вывод выглядит следующим образом:
In [1]: products
Out[1]:
review word_count
0 apple,orange {'apple': 1, 'orange': 1}
1 hello:goodbye {'hello': 1, 'goodbye': 1}
Дает ли это результат, который вы ищете с вашим исходным набором данных?