TypeError: "<" не поддерживается между экземплярами "NoneType" и "str" с использованием Pyner для распознавания сущности имени
Я пытаюсь передать строку электронной почты Pyner, чтобы вытащить все объекты в словарь. Я могу проверить, что моя установка работает с этим возвращением двух лиц ЧЕЛОВЕКА
import ner
tagger = ner.SocketNER(port=9191, output_format='slashTags')
t = "My daughter Sophia goes to the university of California. James also goes there"
print(type(t))
test = tagger.get_entities(t)
person_ents = test['PERSON']
for i in person_ents:
print(i)
Это выводит как ожидалось
Sophia
James
Единственное отличие состоит в том, что здесь у меня есть текст электронной почты, и я могу убедиться, что это строка
print(type(firstEmail))
test = tagger.get_entities(firstEmail)
person_ents = test['PERSON']
print (type(person_ents))
for i in person_ents:
print(i)
Это возвращает следующую ошибку
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-79-ff847452c8df> in <module>()
3
4
----> 5 test = tagger.get_entities(firstEmail)
6 person_ents = test['PERSON']
7 print (type(person_ents))
~/anaconda3/envs/nlp/lib/python3.6/site-packages/ner-0.1-py3.6.egg/ner/client.py in get_entities(self, text)
90 else: #inlineXML
91 entities = self.__inlineXML_parse_entities(tagged_text)
---> 92 return self.__collapse_to_dict(entities)
93
94 def json_entities(self, text):
~/anaconda3/envs/nlp/lib/python3.6/site-packages/ner-0.1-py3.6.egg/ner/client.py in __collapse_to_dict(self, pairs)
71 """
72 return dict((first, list(map(itemgetter(1), second))) for (first, second)
---> 73 in groupby(sorted(pairs, key=itemgetter(0)), key=itemgetter(0)))
74
75 def get_entities(self, text):
TypeError: '<' not supported between instances of 'NoneType' and 'str'
Любая идея, что случилось
1 ответ
Проблема здесь заключается в том, что NER настроен так, что когда для вывода задано значение SlashTags, он выводит формат словаря. Однако текст анализируется с помощью символов косой черты, где встречается именованная сущность, и этот символ затем используется для отделения сущности словаря перед его созданием. В результате, если в ваших текстовых данных возникнет косая черта, вам нужно разобраться в этом.
Что-то вроде
#text is your string
text = text.replace('/', '-')
Это не должно быть проблемой в терминах НЛП, так как даты все еще должны быть выбраны в этом формате. Но если какая-то ключевая часть вашего анализа требует наличия этого тега, это решение может не подойти. Я не могу проверить, существует ли эта проблема в реализации Java, но это возможно