Acora Python, hızlı bir çoklu-anahtar kelime metin arama motoru için 'fgrep "dir.
, Unicode veya byte ya anahtar kelime kümesi dayanarak, arama otomat (DFA) oluşturur ve dize girişi üzerine çalışır.
Acora Aho-Corasick algoritma ve NFA-to-DFA Powerset yapısına dayanır.
Acora saf Python uygulaması ve Cython yazılmış hızlı bir ikili modül ile birlikte gelir.
Nasıl kullanabilirim?
Paketi içe:
>>> Acora ithalat AcoraBuilder gelen
Bazı anahtar kelimeleri toplayın:
>>> Oluşturucu = AcoraBuilder ('ab', 'bc', 'de')
>>> Builder.add ('a', 'b')
Geçerli anahtar kelime kümesi için Acora arama motoru oluşturun:
>>> Ac = builder.build ()
Tüm olaylar için bir dize arayın:
>>> Ac.findall ('abc')
[('A', 0), ('ab', 0), ('b', 1), ('bc', 1)]
>>> Ac.findall ('ABDE'),
[('A', 0), ('ab', 0), ('b', 1), ('' de, 2)]
Onlar gelip arama sonuçları üzerinde yineleme:
>>> Ac.finditer ('abde') 'de kw, pos için:
... Print ("% 2s [% d]"% (kw, pos))
& Nbsp; [0]
ab [0]
& Nbsp; b [1]
de [2]
Sık Sorulan Sorular ve yemek tarifleri
1. nasıl uzun eşleşen anahtar kelimeler için bir açgözlü arayacaksınız mı?
& Nbsp; >>> oluşturucu = AcoraBuilder ('a', 'ab', 'abc')
& Nbsp; >>> Ac = builder.build ()
& Nbsp; >>> ac.finditer ('abbabc') 'de kw, pos için:
& Nbsp; ... print (kw)
& Nbsp;
& Nbsp; ab
& Nbsp;
& Nbsp; ab
& Nbsp; abc
& Nbsp; >>> itertools GroupBy ithal gelen
& Nbsp; >>> operatör ithalat itemgetter gelen
& Nbsp; >>> def (eşleşmeleri) longest_match:
& Nbsp; ... GroupBy içinde pos, match_set için (kibrit, itemgetter (1)):
& Nbsp; ... Verim max (match_set)
& Nbsp; >>> kw, pos longest_match içinde (ac.finditer ('abbabc')) için:
& Nbsp; ... print (kw)
& Nbsp; ab
& Nbsp; abc
2. nasıl fgrep yaptığı gibi, ama keyfi satır sonları, ben line-by-line ayrıştırmak mı?
& Nbsp; >>> def group_by_lines (s, * anahtar sözcükler):
& Nbsp; ... oluşturucu = AcoraBuilder (' r', ' n', * anahtar sözcükler)
& Nbsp; ... ac = builder.build ()
& Nbsp; ...
& Nbsp; ... current_line_matches = []
& Nbsp; ... last_ending = Yok
& Nbsp; ...
& Nbsp; ... kw için, ac.finditer (ler) pos:
& Nbsp; ... eğer ' r n' kw:
& Nbsp; ... last_ending eğer == ' r' ve kw == ' n':
& Nbsp; ... Devam # CRLF kombine
& Nbsp; ... Verim tuple (current_line_matches)
& Nbsp; ... del current_line_matches [:]
& Nbsp; ... last_ending = kw
& Nbsp; ... else:
& Nbsp; ... last_ending = Yok
& Nbsp; ... current_line_matches.append (kw)
& Nbsp; ... Verim tuple (current_line_matches)
& Nbsp; >>> kwds = ['ab', 'bc', 'de']
& Nbsp; >>> group_by_lines maçlarda için ('a r r NBC r ndede n nab', * kwds):
& Nbsp; ... print (maç)
& Nbsp; ()
& Nbsp; ()
& Nbsp; ('bc')
& Nbsp; ('de', 'de')
& Nbsp; ()
& Nbsp; ('ab')
Özellikler :
- unicode dizeleri ve byte dizeleri ile çalışır
- yaklaşık 2-3x kadar hızlı çoğu girişi için Python'ın düzenli ifade motoru olarak
- bulur maçları örtüşen, tüm anahtar kelimelerin yani tüm maçları
- (hızlı 'yeniden' olarak ~ 10x) duyarsız arama için destek
- GIL boşaltır
- ek (yavaş ama kısa) saf Python uygulaması
- Python desteği 2.5 + ve 3.x
- dosyaları aramak için destek
- müsamahakar BSD lisansı
Ararken
Bu sürümdeki yeni Nedir:
- önceden oluşturulmuş arama motorları için turşu desteği
- oluşturucu performans optimizasyonları
- Unicode ayrıştırma Python 3.3 için optimize edilmiştir ve daha sonra
- artık, kaynaklarını yeniden derler (+ cython 0.20 gerektirir)
- son Cython sürümleri ile başarısız inşa
- cython 0.20.1 kullanılarak inşa
Cython yüklü olduğunda --with-cython seçeneği setup.py geçirilen sürece
nedir sürüm 1.6 Yeni:
- ölçüde daha hızlı otomat bina
- artık içeren kaynak dağılımında .hg repo
- cython 0.15 (rc0) kullanılarak inşa
sürüm 1.5 yeni Nedir:
- Cython derlenmiş NFS 2-DFA inşaat önemli ölçüde daha hızlı çalışır
- Her zaman Cython yüklü olmasa bile uzantısı modülleri oluşturmak
- - no-derleme önlemek için setup.py anahtarı uzatma modülü bina
- cython 0.14.1 (rc2) kullanılarak inşa
sürüm 1.4 yeni Nedir:
- İç arama motoru döngüsünde küçük hız-up
- Bazı kod temizleme
- cython 0.12.1 kullanılarak inşa (nihai)
Gereksinimleri :
- Python
Yorum Bulunamadı