Acora

Software screenshot:
Acora
Dettagli del software:
Versione: 1.8
Data di caricamento: 11 May 15
Sviluppatore: Stefan Behnel
Licenza: Libero
Popolarità: 10

Rating: 3.0/5 (Total Votes: 1)

Acora è 'fgrep' per Python, un veloce motore di ricerca di testo multi-chiave.
Sulla base di una serie di parole chiave, si genera un automa ricerca (DFAE) e corre sopra ingresso stringa, o unicode o byte.
Acora è basato sull'algoritmo Aho-Corasick e una costruzione powerset NFA a DFA.
Acora viene fornita sia con una implementazione di Python puro e un veloce modulo binario scritto in Cython.
Come si usa?
Importare il pacchetto:
>>> Da acora importazione AcoraBuilder
Raccogliere alcune parole chiave:
>>> Builder = AcoraBuilder ('ab', 'bc', 'de')
>>> Builder.add ('a', 'b')
Generare il motore di ricerca Acora per il set di parole chiave corrente:
>>> Ac = builder.build ()
Cerca una stringa per tutte le occorrenze:
>>> Ac.findall ('abc')
[('A', 0), ('ab', 0), ('b', 1), ('bc', 1)]
>>> Ac.findall ('abde')
[('A', 0), ('ab', 0), ('b', 1), ('de', 2)]
Itera su risultati di ricerca così come arrivano:
>>> Per kw, pos a ac.finditer ('abde'):
... Di stampa ("% 2s [% d]"% (kw, pos))
& Nbsp; a [0]
ab [0]
& Nbsp; b [1]
de [2]
FAQ e ricette
1. Come si esegue una ricerca avida di più lunghe parole chiave corrispondenti?
& Nbsp; >>> builder = AcoraBuilder ('a', 'ab', 'abc')
& Nbsp; >>> ac = builder.build ()
& Nbsp; >>> per kw, pos a ac.finditer ('abbabc'):
& Nbsp; ... print (kw)
& Nbsp; un
& Nbsp; ab
& Nbsp; un
& Nbsp; ab
& Nbsp; abc
& Nbsp; >>> da itertools importazione groupby
& Nbsp; >>> dall'operatore importazione itemgetter
& Nbsp; >>> def longest_match (partite):
& Nbsp; ... per pos, match_set in groupby (partite, itemgetter (1)):
& Nbsp; ... yield max (match_set)
& Nbsp; >>> per kw, pos a longest_match (ac.finditer ('abbabc')):
& Nbsp; ... print (kw)
& Nbsp; ab
& Nbsp; abc
2. Come posso analizzare la riga per riga, come fgrep fa, ma con fine riga arbitrarie?
& Nbsp; >>> def group_by_lines (s, * parole chiave):
& Nbsp; ... builder = AcoraBuilder (' r', ' n', * parole chiave)
& Nbsp; ... ac = builder.build ()
& Nbsp; ...
& Nbsp; ... current_line_matches = []
& Nbsp; ... last_ending = Nessuno
& Nbsp; ...
& Nbsp; ... per kw, pos a ac.finditer (s):
& Nbsp; ... se kw in ' r n':
& Nbsp; ... se last_ending == ' r' e kw == ' n':
& Nbsp; ... continua # combinato CRLF
& Nbsp; ... yield tuple (current_line_matches)
& Nbsp; ... Del current_line_matches [:]
& Nbsp; ... last_ending = kw
& Nbsp; ... altro:
& Nbsp; ... last_ending = Nessuno
& Nbsp; ... current_line_matches.append (kw)
& Nbsp; ... yield tuple (current_line_matches)
& Nbsp; >>> kwds = ['ab', 'bc', 'de']
& Nbsp; >>> per le partite in group_by_lines ('a r r nbc r ndede n nab', * kwds):
& Nbsp; ... stampa (partite)
& Nbsp; ()
& Nbsp; ()
& Nbsp; ('bc',)
& Nbsp; ('de', 'de')
& Nbsp; ()
& Nbsp; ('ab',)

Caratteristiche

  • lavora con stringhe Unicode e stringhe di byte
  • circa 2-3x veloce come motore delle espressioni regolari in Python per la maggior parte di input
  • trova corrispondenze sovrapposte, cioè tutte le partite di tutte le parole chiave
  • supporto per caso la ricerca insensitive (~ 10 volte più veloce 're')
  • libera la GIL, mentre la ricerca
  • ulteriore implementazione di Python puro (lento ma breve)
  • supporto per Python 2.5+ 3.x
  • Supporto per la ricerca nei file
  • licenza BSD permissiva

Cosa c'è di nuovo in questa versione:

  • Supporto salamoia per i motori di ricerca predefiniti
  • ottimizzazioni delle prestazioni in costruttore
  • l'analisi Unicode è ottimizzato per Python 3.3 e poi
  • non ricompila fonti quando si installa Cython, meno che l'opzione --with-Cython viene passato al setup.py (richiede Cython 0.20 +)
  • generazione non riuscita con le recenti versioni Cython
  • costruito utilizzando Cython 0.20.1

Cosa c'è di nuovo nella versione 1.6:

  • edificio sostanzialmente più veloce automa
  • non include più repo .hg in distribuzione sorgente
  • costruito utilizzando Cython 0,15 (RC0)

Cosa c'è di nuovo nella versione 1.5:

  • Cython compilato costruzione NFS-2-DFA corre sostanzialmente più veloce
  • sempre costruire moduli di estensione, anche se Cython non è installato
  • - no-compile interruttore setup.py per evitare edificio modulo di estensione
  • costruito utilizzando Cython 0.14.1 (RC2)

Cosa c'è di nuovo in versione 1.4:

  • accelerazione minore in anello interno di motore di ricerca
  • alcuni pulizia del codice
  • costruito utilizzando Cython 0.12.1 (finale)

Requisiti

  • Python

Commenti a Acora

I commenti non trovato
Aggiungi commento
Accendere le immagini!