#python
Вопрос:
я новичок в python, и у меня есть этот проект, в котором я должен классифицировать свои данные по разным категориям, я хочу получить доступ к своему списку категорий, я попробовал следующее, как вы можете видеть здесь, но я продолжаю получать ту же ошибку
я был бы признателен за любую помощь или решение моей проблемы
insport = any(ele in text for ele in categorie[3] )
if insport:
data["cat"]='sport'
nsport=nsport 1
else :
insante = any(ele in text for ele in categorie[1] )
if insante :
data["cat"]='sante'
nsante=nsante 1
else :
inpolitique = any(ele in text for ele in categorie[2])
if inpolitique:
data["cat"]='politique'
npoli=npoli 1
else:
incalture = any(ele in text for ele in categorie[6] )
if incalture:
data["cat"]='culture'
ncalt=ncalt 1
else:
inreligion = any(ele in text for ele in categorie[4])
if inreligion:
data["cat"]='religion'
nrelig=nrelig 1
else:
ineducation = any(ele in text for ele in categorie[5] )
if ineducation:
data["cat"]='social'
neduc=neduc 1
else:
print(" the tweet---------------------------------------------------------------------------------------")
print(text)
это следующая ошибка :
Traceback (most recent call last):
File "C:UsersNIHADPycharmProjectspythonProject3classification.py", line 52, in <module>
ifin = any(ele in text for ele in categorie[0] )
File "C:UsersNIHADPycharmProjectspythonProject3classification.py", line 52, in <genexpr>
ifin = any(ele in text for ele in categorie[0] )
TypeError: 'in <string>' requires string as left operand, not tuple
и это мой список категорий:
[[(1, «образование»), (2, «санте»), (3, «политика»), (4, «спорт»), (5, «религия»), (6, «социальная»), (7, «культура»)]]
Комментарии:
1. Пожалуйста, подумайте о том, чтобы использовать
elif
вместо этого количество вложенныхif
/else
.2. И, пожалуйста, предоставьте правильные
categorie
данные. Ваш список из списка кортежей будет выдаватьIndexError: list index out of range
уже в первой строке.3. Они все должны быть
ele[1] in text...
— если вы хотите сопоставить слово в кортеже с текстом.
Ответ №1:
Здесь другой, более простой подход. Я использую texts
тексты, содержащие названия категорий, только в качестве примера. Когда название категории, содержащейся в одном из текстов, идентифицировано, вы готовы сохранить текст с категорией, найденной в вашей базе данных. Однако при этом каждому тексту присваивается только одна категория.
texts=[
"bla bla bla santebla bla bla ",
"bla bla bla sport bla bla bla ",
"bla bla bla education bla bla bla ",
"bla bla bla social bla bla bla ",
"bla bla bla religion bla bla bla ",
"bla bla bla politique bla bla bla ",
"bla bla bla culture bla bla bla "
]
counts={
"sante":0,
"sport":0,
"education":0,
"social":0,
"religion":0,
"politique":0,
"culture":0
}
categorie= [[(1, 'education'), (2, 'sante'), (3, 'politique'), (4, 'sport'), (5, 'religion'), (6, 'social'), (7, 'culture')]]
for i,t in enumerate(texts):
for c in categorie[0]:
catid=c[0]
catname=c[1]
if catname in t:
counts[catname] =1
print("you can save texts[",i,"] with catname:",catname," or catid:",catid, "in your database")
print("Show categories counts:")
print(counts)
выход:
you can save texts[ 0 ] with catname: sante or catid: 2 in your database
you can save texts[ 1 ] with catname: sport or catid: 4 in your database
you can save texts[ 2 ] with catname: education or catid: 1 in your database
you can save texts[ 3 ] with catname: social or catid: 6 in your database
you can save texts[ 4 ] with catname: religion or catid: 5 in your database
you can save texts[ 5 ] with catname: politique or catid: 3 in your database
you can save texts[ 6 ] with catname: culture or catid: 7 in your database
Show categories counts:
{'sante': 1, 'sport': 1, 'education': 1, 'social': 1, 'religion': 1, 'politique': 1, 'culture': 1}