Я пытаюсь вернуть сущности для каждого предложения в корпусе, используя Watson Natural Language Understanding.
(Я не могу создать полностью воспроизводимый код, потому что набор данных, который я использую, является личным.)
Мой скрипт выглядит так:
import json
from watson_developer_cloud import NaturalLanguageUnderstandingV1
from watson_developer_cloud.natural_language_understanding_v1 import Features, EntitiesOptions
import pandas as pd
from utils import *
_DATA_PATH = "data/example_data.csv"
_IBM_NLU_USERNAME = "<username>"
_IBM_NLU_PASSWORD = "<password>"
X = [string1, string2, ... ]
nlu = NaturalLanguageUnderstandingV1(username=_IBM_NLU_USERNAME,
password=_IBM_NLU_PASSWORD,
version="2018-03-16")
def ibm_ner_recognition(sentence):
"""
Input -- sentence, string to conduct NER on
-- feats, this will always be entities
Return -- list of entities in the sentence
"""
response = nlu.analyze(text=sentence,
features=Features(entities=EntitiesOptions()))
output = json.loads(json.dumps(response))
entities = []
for result in output["entities"]:
entities.append(result["type"])
return entities
entities = []
for sent in X:
sent_entities = ibm_ner_recognition(sent)
entities.append(sent_entities)
Это прекрасно работаетпримерно до 400-го предложения в корпусе, а затем выдает следующую ошибку:
WatsonApiException Traceback (most recent call last)
<ipython-input-57-8632adb20778> in <module>()
5 for sent in X:
6 print(sent)
----> 7 sent_entities = ibm_ner_recognition(sent)
8 entities.append(sent_entities)
9 end = t.default_timer()
<ipython-input-13-d132b33efc76> in ibm_ner_recognition(sentence)
9 """
10 response = nlu.analyze(text=sentence,
---> 11
features=Features(entities=EntitiesOptions()))
12 output = json.loads(json.dumps(response))
13 entities = []
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/watson_developer_cloud/natural_language_understanding_v1.py in analyze(self, features, text, html, url, clean, xpath, fallback_to_raw, return_analyzed_text, language, limit_text_characters, **kwargs)
202 params=params,
203 json=data,
--> 204 accept_json=True)
205 return response
206
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/watson_developer_cloud/watson_service.py in request(self, method, url, accept_json, headers, params, json, data, files, **kwargs)
446 error_info = self._get_error_info(response)
447 raise WatsonApiException(response.status_code, error_message,
--> 448 info=error_info, httpResponse=response)
WatsonApiException: Error: Server Error cannot analyze: downstream issue, Code: 500 , X-dp-watson-tran-id: gateway01-474786453 , X-global-transaction-id: 7ecac92c5aff58601c4caa95
Я нашел строку, которая вызывала это следующим образом:
s = "Liz Saville Roberts."
Я решилчтобы пропустить эту строку через ibm_ner_recognition
самостоятельно.Не было ошибки, и она успешно захватила объекты.
Краткое описание проблемы
При циклическом прохождении моего корпуса я получаю предложение, в котором WLS NLU выдает ошибку в нисходящем направлении.Тем не менее, Уотсон NLU успешно получает это предложение самостоятельно, за пределами цикла.
Примечания
Это неПоследнее предложение в моем корпусе.
Я не исчерпал возможности использования Watson в соответствии с моим планом платежей.
Редактировать
Я снова запустил цикл.На этот раз вышеприведенное предложение сработало (цикл достиг примерно 3500-й строки), поэтому, похоже, наблюдается некоторое темпераментное поведение.