У меня есть эта проблема, которую нужно решить в моем PHP-проекте, где некоторые ключевые слова (от нескольких сотен до нескольких тысяч, длина может варьироваться) необходимо искать в строке длиной около 100-300 символов, иногда меньшей длины 30-50 символов. Я могу предварительно обработать ключевые слова для повторного использования для новых экземпляров строк поиска. Я новичок в PHP и не нашел способа сделать это в библиотеке PHP. Немного поискав, я нашел несколько хороших кандидатов в алгоритме Ахо Корасика, а затем это усовершенствование Сунь Ву и Уди Манбера, которое также известно как agrep (или является частью agrep): http://webglimpse.net/pubs/TR94-17.pdf
Есть также Rabin Karp, Suffix Trees и т. д., но они не выглядели вполне подходящими, так как первый был для ключевых слов фиксированной длины, а последний кажется довольно общим и потребует довольно много работы.
Может ли кто-нибудь сообщить мне, является ли самостоятельная реализация Agrep/Sun Wu-Manber в php хорошим способом решить эту проблему? Еще какие-то замечания?
РЕДАКТИРОВАТЬ: как я упоминал ниже в комментарии, существуют сотни или более различных ключевых слов для поиска, поэтому регулярное выражение не поможет. Так что ответ бесполезен.
/keyword1|keyword2|keyword3|.../
- конечно, вам нужно будет правильно экранировать специальные символы. Затем вы можете просто использоватьpreg_match()
, чтобы увидеть, есть ли совпадение. - person Aleks G   schedule 12.07.2011