Índice buscando en la lista para mejorar el rendimiento en Python

Tengo una lista enorme de concepts y una lista enorme de sentences . Quiero identificar concepts en las sentences en el orden de la senetencia. Estoy utilizando multithreading y for loops siguiente manera para realizar esta tarea.

 import queue import threading sentences = ['data mining is the process of discovering patterns in large data sets involving methods at the intersection of machine learning statistics and database systems', 'data mining is an interdisciplinary subfield of computer science and statistics with an overall goal to extract information from a data set and transform the information into a comprehensible structure for further use', 'data mining is the analysis step of the knowledge discovery in databases process or kdd'] concepts = ['data mining', 'database systems', 'databases process', 'interdisciplinary subfield', 'information', 'knowledge discovery', 'methods', 'machine learning', 'patterns', 'process'] def func(sentence): sentence_tokens = [] for item in concepts: index = sentence.find(item) if index >= 0: sentence_tokens.append((index, item)) sentence_tokens = [e[1] for e in sorted(sentence_tokens, key=lambda x: x[0])] return sentence_tokens def do_find_all_concepts(q_in, l_out): while True: sentence = q_in.get() l_out.append(func(sentence)) q_in.task_done() # Queue with default maxsize of 0, infinite queue size sentences_q = queue.Queue() output = [] counting = 0 # any reasonable number of workers num_threads = 4 for i in range(num_threads): worker = threading.Thread(target=do_find_all_concepts, args=(sentences_q, output)) # once there's nothing but daemon threads left, Python exits the program worker.daemon = True worker.start() # put all the input on the queue for s in sentences: sentences_q.put(s) counting = counting + 1 print(counting) # wait for the entire queue to be processed sentences_q.join() print(output) 

Este es el código más eficiente que tengo con diferencia. Sin embargo, todavía es lento para mí trabajar con mi conjunto de datos real.

Mi lista de concepts está en orden alfabético . Por lo tanto, me gustaría saber si existe algún mecanismo de indexing o serialisation en Python para buscar solo una parte de la lista de concepts usando los caracteres de las primeras palabras en las oraciones (aparte de buscar la lista completa de concepts )

Me preocupa principalmente la complejidad del tiempo (porque, según mis estimaciones de tiempo actuales, llevaría casi 1.5 semanas ejecutar mis datos). La complejidad del espacio no es un problema.

Estoy feliz de proporcionar más detalles si es necesario.