Acora van "fgrep" Python, gyors multi-kulcsszószövegekre kereső.
Ennek alapján egy sor kulcsszavak, ez egy keresési automata (DFA) és fut át húr bemenet, akár unicode vagy bájt.
Acora alapul Aho-Corasick algoritmus és egy NFA-to-DFA PowerSet építése.
Acora jön mind a tiszta Python végrehajtását és gyors bináris modul írt Cython.
Hogyan kell használni?
Importálja a csomagot:
>>> From acora import AcoraBuilder
Gyűjtse össze néhány kulcsszavak:
>>> Builder = AcoraBuilder ("ab", "bc", "de")
>>> Builder.add ("a", "b")
Elkészíti a Acora kereső az aktuális kulcsszókészlet:
>>> Ac = builder.build ()
Keresés a karakterlánc minden előfordulását:
>>> Ac.findall ("abc")
[('A', 0), ('ab', 0), ('b', 1), ("bc", 1)]
>>> Ac.findall ("ABDE)
[('A', 0), ('ab', 0), ('b', 1), ('de', 2)]
Végighaladni a keresési eredményeket, ahogy jönnek:
>>> For kw, pos in ac.finditer ("ABDE"):
... Print ("% 2s [% d]"% (kw, pos))
& Nbsp; a [0]
ab [0]
& Nbsp; b [1]
de [2]
GYIK és receptek
1. Hogyan tudom futtatni a mohó keresés a leghosszabb megfelelő kulcsszavakat?
& Nbsp; >>> builder = AcoraBuilder ('a', 'ab', 'abc')
& Nbsp; >>> ac = builder.build ()
& Nbsp; >>> for kw, pos in ac.finditer ("abbabc"):
& Nbsp; ... print (kw)
& Nbsp; a
& Nbsp; ab
& Nbsp; a
& Nbsp; ab
& Nbsp; abc
& Nbsp; >>> from itertools importálni GroupBy
& Nbsp; >>> from üzemeltető import itemgetter
& Nbsp; >>> def longest_match (mérkőzések):
& Nbsp; ... POS, match_set a GroupBy (gyufa, itemgetter (1)):
& Nbsp; ... hozamot max (match_set)
& Nbsp; >>> for kw, pos in longest_match (ac.finditer ("abbabc)):
& Nbsp; ... print (kw)
& Nbsp; ab
& Nbsp; abc
2. Hogyan sikerült feldolgozni line-by-line, mint fgrep csinál, de tetszőleges sorvégződések?
& Nbsp; >>> def group_by_lines (s, * kulcsszavak):
& Nbsp; ... építőmester = AcoraBuilder (' r', ' n', * kulcsszavak)
& Nbsp; ... ac = builder.build ()
& Nbsp; ...
& Nbsp; ... current_line_matches = []
& Nbsp; ... last_ending = None
& Nbsp; ...
& Nbsp; ... a kw, pos in ac.finditer (ek):
& Nbsp; ... ha kw in ' r n ":
& Nbsp; ... ha last_ending == ' r' és kw == ' n':
& Nbsp; ... tovább # kombinált CRLF
& Nbsp; ... hozamot tuple (current_line_matches)
& Nbsp; ... del current_line_matches [:]
& Nbsp; ... last_ending = kw
& Nbsp; ... else:
& Nbsp; ... last_ending = None
& Nbsp; ... current_line_matches.append (kw)
& Nbsp; ... hozamot tuple (current_line_matches)
& Nbsp; >>> kwds = ['ab', 'bc', 'de']
& Nbsp; >>> számára mérkőzések group_by_lines ('a r r NBC r ndede n fülönfog', * kwds):
& Nbsp; ... print (találat)
& Nbsp; ()
& Nbsp; ()
& Nbsp; ("bc",)
& Nbsp; ("de", "de")
& Nbsp; ()
& Nbsp; ("ab",)
Tulajdonságok :
- működik unicode húrok és byte húrok
- a 2-3x olyan gyors, mint a Python reguláris kifejezés motorja a legtöbb input
- találja átfedő mérkőzést, azaz az összes mérkőzést kulcsszavai
- támogatását a kis- és nagybetűket keresés (~ 10x olyan gyors, mint az "újrahasznosítás")
- megszabadítja a GIL keresése közben
- további (lassú, de rövid) tiszta Python végrehajtása
- támogatását Python 2.5+ és 3.x
- támogatását keresi a fájlokat
- megengedő BSD licenc
Mi az új ebben a kiadásban:
- lé támogatja az előre beépített keresők
- teljesítmény optimalizálással a builder
- Unicode elemzés optimalizált Python 3.3 és újabb
- már nem újrafordítja források amikor Cython telepítve, hacsak --with- cython opció át setup.py (szükséges Cython 0,20 +)
- építmények meghiúsult elmúlt Cython változat
- épült Cython 0.20.1
Mi az új 1.6:
- lényegesen gyorsabb automata épület
- már nem tartalmazza .hg repo forrásában
- épült Cython 0,15 (RC0)
Mi az új 1.5-ös verzióban:
- Cython összeállított NFS-2-DFA építési fut lényegesen gyorsabban
- Mindig építeni bővítő modulok is, ha Cython nincs telepítve
- - nem fordítanod kapcsoló setup.py megelőzésére kiegészítő modul épület
- épült Cython 0.14.1 (RC2)
Mi az új 1.4-es:
- kisebb sebesség-up in belső kereső loop
- néhány kódot razzia
- épült Cython 0.12.1 (végleges)
követelmények :
- Python
Hozzászólás nem található