LINUX.ORG.RU

зачем, может split проще?
Вообще, не работает оно так как ты хочешь потому что (?:\W|$) съедает пробелы перед two и four. Можно попробовать с lookahead/lookbehind извратиться

phoenix ★★★★
()

findall находит все НЕПЕРЕСЕКАЮЩИЕСЯ паттерны.

Почему нельзя просто:

In [18]: re.compile('(one|two|three|four|five)').findall('one two three four five')
Out[18]: ['one', 'two', 'three', 'four', 'five']
provaton ★★★★★
()
Ответ на: комментарий от phoenix

Спасибо, теперь понял, что происходит. Задача состоит в том, чтобы поймать ключевые слова в тексте с большим количеством шума. Список достаточно большой - несколько тысяч. Ну то есть если сделать split, то ведь придется в цикле каждое слово проверять

C
() автор топика
Ответ на: комментарий от provaton

нужно найти точное совпадение, то есть чтобы fourteen не поймалось для данного примера

C
() автор топика
Ответ на: комментарий от C

поймать ключевые слова в тексте с большим количеством шума. Список достаточно большой - несколько тысяч.

Что-то мне кажется что регулярные выражения для этого не предназначены. Ты решил забомить регулярное выражение на десятки тыщ символов? :).

По-моему, на эту тему хватает алгоритмов, погугли. Ключевые слова можно проиндексировать по первым нескольким символам. Хотя не удивлюсь если решение влоб тоже будет работать достаточно быстро.

true_admin ★★★★★
()
Ответ на: комментарий от phoenix

спасибо, lookahead сработал!


 >>> re.compile('(?:^|\W)(one|two|three|four|five|six|seven)(?=\W|$)').findall('one two three four five six seven')
['one', 'two', 'three', 'four', 'five', 'six', 'seven']

C
() автор топика
Ответ на: комментарий от true_admin

ага, регулярки с приличной скоростью вроде работают ) кстати по алгоритмам хорошая идея, правда по «fast keywords detecting python» ничего не смог найти.

дело в том что данная регулярка будет по данным из базы бегать, где несколько миллионов записей - поэтому критично к скорости

C
() автор топика
Ответ на: комментарий от C

Так может бд и использовать для поиска? full-text search какой-нить. Sphinx прикрутить (не помню есть ли у него требуемый функционал).

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Sphinx теоретически сгодится, парсинг там есть, словари он сам заполнит. частоты всякие посчитает. Может можно его движок использовать как то, но не рискну лезть разбираться )

C
() автор топика
Ответ на: комментарий от C

хотя видимо все равно надо посмотреть Sphinx, на схожих задачах будет очень полезно

C
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.