Я работаю над проектом анализа настроений, используя Google Cloud Natural Language API и Python, этот вопрос может быть похож на этот другой вопрос , что я выполняется следующее:
- Считывает файл CSV из Google Cloud Storage, файл содержит приблизительно 7000 записей.
- Преобразует CSV в Pandas DataFrame.
- Выполняет итерации по фрейму данных и вызывает API естественного языка для выполнения анализа настроений в одном из столбцов фрейма данных, в том же для l oop Я извлекаю оценка и значение от результата и добавьте эти значения в новый столбец на фрейме данных.
- Сохраните результирующий фрейм данных обратно в GCS.
Я приведу свой код ниже, но до этого я просто хочу упомянуть, что я проверил его с образцом CSV с менее чем 100 записями, и он работает хорошо, я также знаю об ограничении квоты в 600 запросов в минуту, поэтому я отложил каждый я Тем не менее, я получаю ошибку, указанную в заголовке. Мне также известно о предложении об увеличении ulimit, но я не думаю, что это хорошее решение.
Вот мой код:
from google.cloud import language_v1
from google.cloud.language_v1 import enums
from google.cloud import storage
from time import sleep
import pandas
import sys
pandas.options.mode.chained_assignment = None
def parse_csv_from_gcs(csv_file):
df = pandas.read_csv(f, encoding = "ISO-8859-1")
return df
def analyze_sentiment(text_content):
client = language_v1.LanguageServiceClient()
type_ = enums.Document.Type.PLAIN_TEXT
language = 'es'
document = {"content": text_content, "type": type_, "language": language}
encoding_type = enums.EncodingType.UTF8
response = client.analyze_sentiment(document, encoding_type=encoding_type)
return response
gcs_path = sys.argv[1]
output_bucket = sys.argv[2]
output_csv_file = sys.argv[3]
dataframe = parse_csv_from_gcs(gcs_path)
for i in dataframe.index:
print(i)
response = analyze_sentiment(dataframe.at[i, 'FieldOfInterest'])
dataframe.at[i, 'Score'] = response.document_sentiment.score
dataframe.at[i, 'Magnitude'] = response.document_sentiment.magnitude
sleep(0.5)
print(dataframe)
dataframe.to_csv("results.csv", encoding = 'ISO-8859-1')
gcs = storage.Client()
gcs.get_bucket(output_bucket).blob(output_csv_file).upload_from_filename('results.csv', content_type='text/csv')
Функция «analy_sentiment» очень похожа на то, что мы имеем в документации Google , я только немного ее изменил, но она делает то же самое.
Теперь программа поднимает эту ошибка и вылетает, когда он достигает записи между 550 и 700, но я не вижу корреляции между учетной записью службы JSON и вызовом Natural Language API, поэтому я также думаю, что когда я вызываю API, он открывает учетные данные JSON файл, но не закрывает его впоследствии.
В настоящее время я застрял в этой проблеме и у меня закончились идеи, поэтому любая помощь будет высоко оценена, заранее спасибо =)!
[ ОБНОВЛЕНИЕ ]
Я решил эту проблему, извлекая client из метода analysis_sentiment . и передать его в качестве параметра, как следует s:
def analyze_sentiment(ext_content, client):
<Code>
Похоже, что каждый раз, когда он достигает этой строки:
client = language_v1.languageServiceClient()
Он открывает файл учетных данных JSON и не закрывается, поэтому извлекаем его в глобальная переменная сделала эту работу =).