У меня есть сценарий, который в основном работает с набором инструментов для естественного языка. Он работает с использованием NLTK для токенизации и маркировки (категоризации) отдельных слов.
Когда мой список включает имена и сущности, он работает нормально.
Это происходит в том случае, если в список входят речевые статьи, такие как «The», «a» и «et» c.
Это слова, которые не собираются получать метки от NLTK (Persons, Organization, Geographi c Location et c ..)
Мой вопрос, есть ли способ пропустить кортежи, которые будут давать мне ошибку, потому что они не вернут атрибут label?
Пример фрейма данных:
Order Text results
0 0 John
1 1 Paul
2 2 George
3 3 Ringo
(Очевидно, не идеально, но лучше, чем ничего)
Код:
for i in range(len(text)):
SENT_DETECTOR = nltk.data.load('tokenizers/punkt/english.pickle')
ne_tree = nltk.ne_chunk(pos_tag(word_tokenize(text[i])))
df['results'][i] = ne_tree[0].label()
print(df)
Вывод:
Order Text results
0 0 John PERSON
1 1 Paul PERSON
2 2 George GPE
3 3 Ringo GPE
Пример фрейма данных 2:
Order Text
0 0 John
1 1 Paul
2 2 George
3 3 to
Ошибка:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-dff2775636f0> in <module>
2 SENT_DETECTOR = nltk.data.load('tokenizers/punkt/english.pickle')
3 ne_tree = nltk.ne_chunk(pos_tag(word_tokenize(text[i])))
----> 4 df['results'][i] = ne_tree[0].label()
5 print(df)
AttributeError: 'tuple' object has no attribute 'label'
«to» вызывает ошибку sh потому что «to» будет не получить ярлык. Если я имею дело с тысячами слов, было бы непрактично найти все слова, которые заставили бы его взломать sh, и удалить их вручную. В идеале я бы хотел пропустить проблемные c строк, но я не уверен, возможно ли это.
Спасибо за помощь.