Как я могу отправить пакет строк в API Google Cloud Natural Language? - PullRequest
1 голос
/ 20 апреля 2020

У меня есть Pandas фрейм данных, содержащий ряд комментариев в социальных сетях, которые я хочу проанализировать с помощью Google NLP API. Документация Google только обсуждает (насколько я вижу), как классифицировать отдельные строки, а не несколько строк в одном запросе. Каждый запрос к API, классифицирующий один комментарий за раз, занимает около полсекунды, что очень медленно, когда я пытаюсь классифицировать более 10000 одновременно. Есть ли способ сделать список строк отдельно классифицированным, который, я уверен, будет значительно быстрее?

Это код, который я сейчас использую:

import numpy as np
import pandas as pd
from google.cloud import language

client = language.LanguageServiceClient()

def classify(string):
    document = language.types.Document(content=string, type=language.enums.Document.Type.PLAIN_TEXT)
    sentiment = client.analyze_sentiment(document=document).document_sentiment
    return (sentiment.score, sentiment.magnitude)

def sentiment_analysis_df(df):    
    df['sentiment_score'] = np.zeros(len(df))
    df['sentiment_magnitude'] = np.zeros(len(df))
    for i in range(len(df)):
        score, magnitude = classify(df['comment'].iloc[i])
        df['sentiment_score'].iloc[i] = score
        df['sentiment_magnitude'].iloc[i] = magnitude
    # Other steps including saving dataframe as CSV are done here

Я видел два других поста здесь, которые задают подобные вопросы, здесь и здесь , но первый предполагает, что для разделения строк используются полные остановки (не верно в моем случае, так как создается много строк несколько предложений), а во втором есть ответы, в которых обсуждается ограничение скорости и стоимость.

1 Ответ

0 голосов
/ 27 апреля 2020

Если вы хотите распараллелить запросы, вы можете поручить им работу Spark.

Вот фрагмент кода, который я попробовал и работал:

from pyspark.context import SparkContext
from pyspark import SparkConf

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types


def comment_analysis(comment):

    client = language.LanguageServiceClient()
    document = types.Document(
        content=comment,
        type=enums.Document.Type.PLAIN_TEXT)
    annotations = client.analyze_sentiment(document=document)
    total_score = annotations.document_sentiment.score
    return total_score


sc = SparkContext.getOrCreate(SparkConf())

expressions = sc.textFile("sentiment_lines.txt")

mapped_expressions = expressions.map(lambda comment: comment_analysis(comment))

(где sentiment_lines. txt - это простой текстовый документ с некоторыми комментариями)

Каждый элемент mapped_expressions будет общим настроением для каждого "комментария" в выражениях.

Кроме того, помните, что вы можете иметь Datapro c запустите задание Spark, чтобы все оставалось управляемым в Google Cloud.

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