Acora є "fgrep 'для Python, швидко мульти-ключове слово текстового пошуку.
На підставі набору ключових слів, він генерує пошуку автомат (ДКА) і запускає його на вхідному рядку, або Unicode або байт.
Acora заснований на алгоритмі Ахо-Corasick і POWERSET будівництва NFA-на-DFA.
Acora приходить як з чистого реалізації Python і швидкого бінарного модуля написано в Cython.
<Сильний> Як я можу використовувати це?
Імпорт пакету:
>>> Від імпорту Acora AcoraBuilder
Зберіть деякі ключові слова:
>>> Будівельник = AcoraBuilder ('AB', 'BC', 'де')
>>> Builder.add ('', 'б')
Створення пошукової системи Acora для поточного набору ключових слів:
>>> Ас = builder.build ()
Виберіть рядок для всіх входжень:
>>> Ac.findall ('ABC')
[('', 0), ('AB', 0), ('B', 1), ('BC', 1)]
>>> Ac.findall ('ABDE ")
[('', 0), ('AB', 0), ('B', 1), ('де', 2)]
Перебору результатів пошуку, як вони приходять в:
>>> Для кВт, поз в ac.finditer ('Абде'):
... Print ("% 2s [% d]"% (кВт, сел))
& NBSP; [0]
AB [0]
& NBSP; б [1]
де [2]
Запитання і відповіді і рецепти
1. Як мені запустити жадібний пошук найдовших узгоджувальних ключових слів?
& NBSP; >>> будівельник = AcoraBuilder ('', 'AB', 'ABC')
& NBSP; >>> ас = builder.build ()
& NBSP; >>> для кВт, поз в ac.finditer ('abbabc'):
& NBSP; ... друк (кВт)
& NBSP;
& NBSP; AB
& NBSP;
& NBSP; AB
& NBSP; ABC
& NBSP; >>> від імпорту itertools GroupBy
& NBSP; >>> від оператора itemgetter імпорту
& NBSP; >>> Def longest_match (матчі):
& NBSP; ... для поз, match_set в GroupBy (сірників, itemgetter (1)):
& NBSP; ... вихід макс (match_set)
& NBSP; >>> для кВт, поз в longest_match (ac.finditer («abbabc ')):
& NBSP; ... друк (кВт)
& NBSP; AB
& NBSP; ABC
2. Як мені розібрати рядок за рядком, а fgrep робить, але з довільними закінченнями лінії?
& NBSP; >>> чіткості group_by_lines (S, * ключові слова):
& NBSP; ... будівельник = AcoraBuilder (' г', ' п', * ключові слова)
& NBSP; ... ас = builder.build ()
& NBSP; ...
& NBSP; ... current_line_matches = []
НЕ & NBSP; ... last_ending = Немає
& NBSP; ...
& NBSP; ... для квт, сел в ac.finditer (и):
& NBSP; ... якщо кВт в ' г п ":
& NBSP; ... якщо last_ending == ' г' і кВт == ' п':
& NBSP; ... продовжувати # в поєднанні CRLF
& NBSP; ... вихід кортеж (current_line_matches)
& NBSP; ... дель current_line_matches [:]
& NBSP; ... last_ending = кВт
& NBSP; ... ще:
НЕ & NBSP; ... last_ending = Немає
& NBSP; ... current_line_matches.append (кВт)
& NBSP; ... вихід кортеж (current_line_matches)
& NBSP; >>> kwds = ['AB', 'BC', 'де']
& NBSP; >>> збігів в group_by_lines (' г г NBC г ndede п наб', * kwds):
& NBSP; ... друк (матчі)
& NBSP; ()
& NBSP; ()
& NBSP; ('BC',)
& NBSP; ('де', 'де')
& NBSP; ()
& NBSP; ('AB',)
Особливості
- працює з Юнікод і байт рядка
- про 2-3x так швидко, як регулярних виразів в Python для більшості введення
- знаходить перекриття матчі, тобто всі матчі всіх ключових слів
- підтримка пошук без урахування регістру (~ 10x, як швидко, як 'повторно')
- звільняє GIL при пошуку
- додатковий (повільний, але короткий) чистий реалізація Python
- підтримка Python 2.5+ і 3.x
- підтримка для пошуку в файлах
- дозвільний ліцензія BSD
Що нового У цьому випуску:
- підтримка розсіл для готових пошукових системах
- продуктивність оптимізації, в будівельника
- розбір Unicode оптимізований для Python 3.3 і пізніше
- більше не перекомпілюються джерела при установці Cython, якщо --with-Cython опція передається setup.py (не вимагається Cython 0,20 +)
- не вдалося побудувати з останніми версіями Cython
- побудований з використанням Cython 0.20.1
Що нового у версії 1.6:
- значно швидше автомат будівлю
- більше не включає в себе .hg репо в розподілі джерела
- побудований з використанням Cython 0,15 (rc0)
Що нового у версії 1.5:
- Cython складений NFS-2-DFA будівництво проходить значно швидше
- завжди будувати модулі розширення, навіть якщо не встановлений Cython
- - немає компіляції перемикач в setup.py, щоб запобігти модуль розширення потенціалу
- побудований з використанням Cython 0.14.1 (RC2)
Що нового у версії 1.4:
- незначне прискорення у внутрішньому контурі пошукової
- деякий код очистки
- побудований з використанням Cython 0.12.1 (фінал)
Вимоги
- Python
Коментар не знайдено