Пользовательский словарь TextRazor - AttributeError - PullRequest
0 голосов
/ 21 октября 2019

С: https://www.textrazor.com/docs/python#Dictionary

Я реализовал следующий код:

client = textrazor.TextRazor("API_key", extractors=["words", "phrases", "topics", "relations","entities"])
client.set_classifiers(["textrazor_iab"])

manager = textrazor.DictionaryManager('API_key')
manager.create_dictionary({'id':'dict_ID'})

new_entity_type_data = {'type': ['cpp_developer']}
manager.add_entries('dict_ID', [{'id': 'DEV1', 'text': 'Andrei Alexandrescu', 'data':new_entity_type_data}, {'id': 'DEV2', 'text':'Bjarne Stroustrup', 'data':new_entity_type_data}])
client.set_entity_dictionaries(['dict_ID'])

response = client.analyze('Although it is very early in the process, higher-level parallelism is slated to be a key theme of the next version of C++, says Bjarne Stroustrup')

Я получаю следующую ошибку при запуске response.entities():

AttributeError: 'NoneType' object has no attribute 'encode'

Когда я надеваюНе использую пользовательский словарь, я получаю следующий вывод:

[TextRazor Entity b'Bjarne Stroustrup' at positions [26, 27],
 TextRazor Entity b'C++' at positions [23]]

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

Это указывает на то, что сущность распознается с использованиемпользовательский словарь, иначе ошибка не будет выдана. Но по какой-то причине у этой сущности нет типа данных.

Так что мой вопрос, вероятно, можно перевести на;Как добавить действительный тип данных в сущность, которую я добавляю в пользовательский словарь?

1 Ответ

0 голосов
/ 22 октября 2019

Я получил ответ от TextRazor:

Я могу воспроизвести это, и, похоже, в нашем клиенте Python есть ошибка при печати сущностей.

При печати сущности мы генерируем строкуэто предполагает, что у объекта есть идентификатор, а у пользовательских объектов нет, что приводит к этой бесполезной ошибке. Мы исправим это в клиенте. Ошибка возникает только при печати объекта, вы все равно можете получить доступ к соответствующим пользовательским объектам как обычно:

for entity in response.entities():
    print(entity.matched_positions, entity.data, entity.custom_entity_id)
...