Я хотел бы оценить список текстов, используя анализ настроений GCP.
Для этого я уже написал модули, которые подготавливают все для анализа настроений (очистка, разбиение и т. Д.).
В результате у меня теперь есть фрейм данных Pandas, где каждый текст имеет свою собственную строку и где каждая строка имеет ячейку со списком слов на предложение в тексте.
В качестве примера, текст:
«Мне нравится stackoverflow. Это очень полезно».
будет выглядеть так (для простоты я опустил всю «очистку»:
Мне нравится stackoverflow. Это очень полезно. | [["I", "like", "stackoverflow"], ["It", "is", "очень" "полезно"]]
Теперь цель моего кода - пройти каждую строку в кадре данных и сделать запрос в GCP для каждого текста (предложение должно быть просто связано с. И словом с пробелом). Тексты здесь уже разделены на предложения и слова, хотя они мне нужны, так как целые тексты здесь - предыдущие шаги редактирования.
В синхронной обработке это уже работает, но, поскольку я никогда раньше не работал с asyncio, я немного упускаю подход к разработке вложенных циклов, чтобы параллельно запрашивались не только предложения строки, но и все линии.
Я использую Python 3.7, и доступ к GCP работает нормально. Таким образом, приведенный ниже код синхронизации полностью функционален, но я бы хотел сократить время выполнения за счет асинхронности.
Я уже пытался упаковать код в последнем цикле в метод и вызвать его как асинхронный. Конечно, это приводит только к обработке отдельных предложений в строке asyncron. Я также протестировал async для, но не смог передать список в качестве параметра и не смог создать исполняемый код.
def on_document_level(df):
# Calling a method to create new columns in the df
df = my_pandas.add_column_to_df(df, 'sentiments_per_sents')
df = my_pandas.add_column_to_df(df, 'magnitudes_per_sents')
# Instantiates a client
client = language.LanguageServiceClient()
# Run over each row in df
for index, row in df.iterrows():
# Run over each Sentence
all_sents_in_row_list = []
for sentence in row['processed']:
# Create String for gcp
all_sents_in_row_list.append(' '.join(token for token in sentence))
all_sent_in_row_str = '. '.join(sen for sen in all_sents_in_row_list)
logging.info(all_sent_in_row_str)
document = types.Document(
content=all_sent_in_row_str,
type=enums.Document.Type.PLAIN_TEXT)
# Detects the sentiment of the text
sentiment = client.analyze_sentiment(document=document).document_sentiment
df.loc[index, 'sentiments_per_sents'] = sentiment.score
df.loc[index, 'magnitudes_per_sents'] = sentiment.magnitude
return df```