2016-02-11 3 views
0

У меня есть большой документ, содержащий строку, как это, в основном, не разграничены строки - mynameisjohnsmithПоиск конкретного слова в не разграничены строки

У меня также есть коллекция имен, это может быть очень большим, предположим, миллион записей. Что я намерен сделать, чтобы проверить, содержит ли документ имя, доступное в коллекции. Один из способов сделать это - проиндексировать документ и выполнить итерацию по коллекции, а для каждого поиска поиска - индекс имени. Это может быть действительно неэффективно, если имена в коллекции отсутствуют (1 миллион итераций).

Мне интересно, есть ли лучшие способы сделать это. Что-то вроде индексации как документа, так и имен и нахождения пересечения. Спасибо.

+0

Лучший способ продвижения с использованием solr/lucene, imo., Но посмотрите здесь: http://stackoverflow.com/questions/14633286/efficient-substring-search-in-a-large-text-file-containing-100 -millions-strings –

+0

'Это может быть действительно неэффективно, если имена не присутствуют в коллекции' - вероятно, нет, если вы используете правильный индекс. – Thomas

+1

Если вы хотите сделать это самостоятельно, одним из способов может быть разделение документа на слова и построение карты с ключевым словом (значением может быть информация о местоположении и т. Д.). Затем найдите имена на этой карте, которые будут близки к O (1), если карты будут установлены соответственно с точки зрения начальной емкости и т. Д. – Thomas

ответ

0

Алгоритм поиска строк в строке Aho-Corasick использует конечный автомат для поиска большого количества строк одновременно в документе. Сложность алгоритма является линейной по длине строк плюс длина искомого текста плюс количество выходных совпадений. Как программное обеспечение для проверки на вирусы может эффективно искать большое количество вирусных сигнатур в файлах в разумные сроки.