Форум сайта python.su
пытаюсь написать прогу, которая классифицирует тексты по двум типам -о добычи зерна и добычи ископаемых. есть трейнсет в отором 0 перед текстом означает что текст о полезных ископаемых, 1 о зерне. все вроде получается, делаю примитивно по ключевым словам, но удачно классифицировав несколько (около 10) текстов пишет ошибку “list index out of range”. пробовал и while и for i in range(), и там и там ошибка. что делать? здесь код и с while и с for http://pastebin.com/WDzmVFgY http://pastebin.com/DGY3v21U
заранее благодарен за советы
Офлайн
1. list index out of range - исключение если осуществлен выход за пределы массива, в данном случае списка, для его обработки необходимо применять конструкции вида try/except. Но в данном случае вам это не нужно, потому как:
2. Вам не нужен range и перебор по индексам списка. Цикл for в python итак за вас это делает.
mylist = ['a', 'b', 'c', 'd'] for c in mylist: print c
if c=="agriculture" or c== "maize" or c=="food" or c=="wheat" or c=="corn" or c=="cotton" or c=="grain" or c=="soybeans" or c== "agricultural":
if c in ("agriculture", "maize", "food", "wheat", "cotton", "grain", "soybeans", "agricultural"):
Офлайн
дело в том что если я обращаюсь сразу к списку то ошибка другая “list integeres must be integers not list” это как я понимаю про i, я поэтому range и сделал. Тем более в первом цикле я обращаюсь ко всему массиву текстов а во втором только к одному тексту и в нем смотрю на слова
Офлайн
Может тогда для Вас лучше будет вообще обойтись без циклов.
with open('C:\\3 form\\proga\\train_set4.txt','r') as data: text = data.read() if any(x for x in ("agriculture", "maize", "food", "wheat", "cotton", "grain", "soybeans", "agricultural") if x in text): print 'food' if any(x for x in ("oil", "petroleum", "barrel", "fuel", "gas", "energy") if x in text): print 'mineral'
Офлайн