Сентиментальный анализ с использованием pyspark Dataframe - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь провести сентиментальный анализ полученных обзоров продуктов, набор данных идет на компромисс из 15 столбцов, и мы должны запускать код только в 1 столбце.У меня есть рабочий код, который генерирует значение настроения, полярность, субъективность, а также отправляет данные в Elasticsearch Index.Но это невозможно для огромных данных.

Таким образом, чтобы добиться того же для огромных данных и для реального времени, которые я пробовал в RDD, путем преобразования в новый rdd, который состоит только из 1 столбца («тело обзора»)).Здесь я не могу визуализировать результат среди продуктов и прочего.Когда я пытался сделать то же самое с DF, застрявшим после создания udf.

Функция для очистки данных

def clean_review(text):
    '''
    This fucntion is to clean the daata
    '''
    letters_only = re.sub("[^a-zA-Z]"," ", str(text)) # Remove all digits and punctuation
    words = str(letters_only).lower().split() # Convert it into lower case
    clean_words = [w for w in words if len(w) > 2] # Remove 1/2 letter words
    return(" ".join(clean_words))

Функция для определения стоп-слов

def clean_stop_words(review):
        words = str(review).lower().split() # split sentence into words
        stops = set(stopwords.words("english")) # import stop words from nltk
        stop_words = [w for w in words if w not in stops] # identify stop words from the sentence
        return(" ".join(stop_words))

Здесь, вНовый столбец df panda создавался и заполнялся, но в pyspark withcol func используется по-другому, поэтому не может этого сделать.

data.review_body['CleanedReview'] = data.review_body.apply(lambda x: clean_review(x))
data.review_body['clean_text'] = data.review_body['CleanedReview'].apply(lambda x: clean_stop_words(x))

Застрял, как использовать эту строку для DF, и создать полярность.

for x in range(len(data)):
    analysis = TextBlob(clean_review(str(data.review_body['clean_text'][x])))
    #print (analysis.sentiment)
    analysis.sentiment.polarity
    if analysis.sentiment.polarity < 0:
        sentiment = "negative"
        sentimentValue = -1
    elif analysis.sentiment.polarity == 0:
        sentiment = "neutral"
        sentimentValue = 0
    else:
        sentiment = "positive"
        sentimentValue = 1

    print(sentiment+ " "+ str(data.review_body['clean_text'][x]))

    #es.index(index="sent",
         #doc_type="test-type",
         #body={"marketplace": str(data["marketplace"][x]),
               "customer_id": str(data["customer_id"][x]),
               "review_id": str(data["review_id"][x])  .......n

Причина, по которой теперь я пытаюсь использовать DF, как в СДР, позволяет отправлять только столбец с данными обзора в индекс эластичного поиска, и после этого варианты визуализации для других связанных элементов не могут быть показаны.Был бы рад, если кто-нибудь может помочь мне достичь этого.Ожидаемый вывод для индекса Elasticsearch, где нижеуказанные поля будут созданы и заполнены на основе приведенного выше кода.'' {"sentimental_score": analysis.sentiment.polarity, "subjctivity": analysis.sentiment.subjectivity, "sentiment": sentiment, "sentimentValue": sentimentValue}) ''

...