Удалить пунктуацию из текста, затем сохранить как словарь в столбце данных - PullRequest
0 голосов
/ 10 июня 2019

Мне нужна помощь с некоторым кодом.Мне нужно удалить пунктуацию из текста в функции, а затем применить эту функцию к столбцу в столбце данных.Мне нужно посчитать частоту каждого слова в результирующей строке, которую я назвал review_without_punctuation.Затем мне нужно сохранить количество слов в столбце в качестве словаря.Я пробовал функцию, которая считает слова и применяет ее к review_without_punctuation, но функция не запускается.

Вот моя попытка.

def remove_punctuation(text):

    import string
    from string import maketrans
    ##Multiply by number of punctuation characters
    table = string.maketrans('.?,!:;_', 7 * " ")
    ##takes care of float has no attribute translate
    products['review'] = products.fillna({'review':''})
    return text.translate(table)
review_without_punctuation = products['review'].apply(remove_punctuation)
##products['word_count'] = graphlab.text_analytics.count_words(review_without_punctuation)

products['word_count']= review_without_punctuation.str.split().str.len()

Заранее спасибо.

1 Ответ

0 голосов
/ 11 июня 2019

После запуска вашего кода, похоже, вы в порядке удаления пунктуации.Я не знаком с 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}

Дает ли это результат, который вы ищете с вашим исходным набором данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...