La forma más eficiente de encontrar coincidencias de cadenas parciales en un archivo grande de cadenas (python)

Descargué el archivo de títulos de artículos de Wikipedia que contiene el nombre de cada artículo de Wikipedia. Necesito buscar todos los títulos de artículos que puedan ser una posible coincidencia. Por ejemplo, podría tener la palabra “hockey”, pero el artículo de Wikipedia para el hockey que querría es “Ice_hockey”. También debería ser una búsqueda que no distinga mayúsculas y minúsculas.

Estoy usando Python, ¿y hay una manera más eficiente de hacer una búsqueda línea por línea? Estaré realizando esta búsqueda como 500 o 1000 veces por minuto idealmente. Si línea por línea es mi única opción, ¿hay algunas optimizaciones que pueda hacer dentro de esto?

Creo que hay varios millones de líneas en el archivo.

¿Algunas ideas?

Gracias.

La respuesta de Greg es buena si quieres hacer coincidir en palabras individuales. Si quieres hacer coincidir en subcadenas necesitarás algo un poco más complicado, como un árbol de sufijos (http://en.wikipedia.org/wiki/Suffix_tree). Una vez construido, un árbol de sufijos puede responder de manera eficiente a las consultas de subcadenas arbitrarias, por lo que en su ejemplo podría coincidir con “Ice_Hockey” cuando alguien busca “corvejón”.

Si tiene un conjunto de datos fijos y consultas de variables, la técnica habitual es reorganizar el conjunto de datos en algo que pueda buscarse más fácilmente. En un nivel abstracto, podría dividir el título de cada artículo en palabras minúsculas individuales y agregar cada uno de ellos a la estructura de datos del diccionario Python. Luego, cada vez que obtenga una consulta, convierta la palabra de consulta a minúsculas y búsquelo en el diccionario. Si cada valor de entrada del diccionario es una lista de títulos, puede encontrar fácilmente todos los títulos que coincidan con una palabra de consulta determinada.

Esto funciona para palabras sencillas, pero tendrá que considerar si quiere hacer coincidir palabras similares, como encontrar “fumar” cuando la consulta es “fumar”.

Le sugiero que coloque sus datos en una base de datos sqlite y que utilice el operador de “me gusta” de SQL para sus búsquedas.