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; >>> от импорта GroupBy itertools
& 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
Комментарии не найдены