Я работаю над проектом анализа настроений с использованием Google Cloud Natural Language API и Python, этот вопрос может быть похож на этот другой вопрос, я делаю следующее:
- Читает CSV-файл из Google Cloud Storage, файл содержит около 7000 записей.
- Преобразует CSV в Pandas DataFrame.
- Обходит фрейм данных и вызывает API естественного языка для выполнения анализа тональности одного из столбцов фрейма данных, в том же цикле for я извлекаю оценку и величину < / strong> из результата и добавьте эти значения в новый столбец фрейма данных.
- Сохраните фрейм данных результата обратно в 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')
Функция «analysis_sentiment» очень похожа на то, что есть в документации Google, Я немного изменил его, но он делает почти то же самое.
Теперь программа вызывает эту ошибку и вылетает, когда достигает записи между 550 и 700, но я не вижу корреляции между JSON учетной записи службы и вызовом API естественного языка, поэтому я также думаю, что когда я вызываю API, он открывает файл JSON с учетными данными, но после этого не закрывает его.
В настоящее время я застрял в этой проблеме, и у меня закончились идеи, поэтому любая помощь будет очень благодарна, заранее спасибо =)!
[ОБНОВЛЕНИЕ]
Я решил эту проблему, извлекая «client» из метода «analysis_sentiment» и передав его в качестве параметра следующим образом:
def analyze_sentiment(ext_content, client):
<Code>
Похоже, каждый раз, когда он достигает этой строки:
client = language_v1.languageServiceClient()
Он открывает файл JSON с учетными данными и не закрывается, поэтому извлечение его в глобальную переменную сделало эту работу =).