Проблема в том, что вы «защищаете» цикл while, где просто задают имя. Вместо этого вы можете поместить чтение также в try
/ except
для решения проблемы:
while True:
try:
file_to_open = input("insert the file you would like to use with its extension: ")
with open(file_to_open) as f:
words = word_tokenize(f.read().lower())
break
except FileNotFoundError:
print("File not found.Better try again")
Я хотел бы взглянуть на некоторые байесовские методы классификации . Это будет включать в себя обучение классификатора распознаванию определенных слов, указывающих на вероятность того, что товар принадлежит одному из ваших классов. Например, пройдя обучение, он может признать, что если в описании продукта есть «Seagate», то вероятность того, что это жесткий диск с вероятностью 99%, составляет 97%, а у автомобиля - 97%. Слово «новый», вероятно, в конечном итоге не внесет большой вклад в какую-либо классификацию, и именно так вы хотите, чтобы оно работало.
Недостатком этого является то, что обычно требуется довольно большой массив обучающих данных, прежде чем он начнет хорошо работать,
Вы должны взглянуть на кластеризацию и классификацию . Ваши категории кажутся открытыми и, таким образом, предполагают, что кластеризация может лучше решить проблему. Что касается входного представления, вы можете попытать счастья с извлечением слова и символа n-грамм . Ваша мера сходства может быть количеством общих n-грамм или чем-то более сложным . Возможно, вам придется пометить получившиеся кластеры вручную.