Я пытаюсь создать алгоритм на Python для фильтрации большого блока данных RDF.
У меня есть один список, состоящий примерно из 70 тысяч элементов, отформатированных как <"datum">
.
Затем у меня есть около 6 ГБ элементов (троек), отформатированных как <"A">
<"B">
<"C">
Я хочу извлечь все триплеты, которые содержат любой элемент в первом списке, а затем извлечь любые триплеты, которые содержат любой отдельный элемент из первого извлечения (чистый эффект состоит в том, чтобы сформировать раздел графа, который связан одним шагом с семенами из первого списка).
Я не смог придумать отличный алгоритм для этого (не помогает тот факт, что у меня нет формального обучения CS).
Лучшее, что я пока придумал, это начать с разделения троек в большом списке на список из трех списков элементов [<"A">, <"B">, <"C">]
. Затем я разбиваю это на куски и использую многопроцессорность для создания процессов, которые берут полный маленький список и часть большого списка и...
for line in big list:
for item in small list:
if item in line:
bucket.append(line)
Этот алгоритм занимает довольно много времени.
Есть ли более быстрый способ сделать это? Если есть конкретный алгоритм, вы можете просто дать мне имя, и я придумаю, как его реализовать.
Спасибо!
Уточнения по комментариям:
Все элементы данных являются строками. Таким образом, маленький список может содержать
["Mickey", "Mouse", "Minny", "Cat"]
, а большой список может быть[["Mickey","Pluto","Bluto"],["John", "Jane", "Jim]...]
.Только один элемент в каждой тройке большого списка должен совпадать с элементом в маленьком списке, чтобы это учитывалось.
Все элементы в маленьком списке на самом деле уникальны, поэтому я все равно не подумал преобразовать их в набор. Но я попробую это.
Я могу создавать любые промежуточные структуры, какие захочу. Я сейчас экспериментирую с перевернутым индексом, построенным с использованием полки.
<A><B><C>
должны совпадать? Или только один из<A>
,<B>
или<C>
? И второй этап вашей фильтрации тоже немного расплывчатый. Некоторые примеры данных могут помочь здесь? - person Li-aung Yip   schedule 03.05.2012