Alat Uji Coba & Pencocokan & Penggantian Kata Kunci berkinerja tinggi.
Ini diimplementasikan oleh cython, dan akan dikompilasi ke cpp. Struktur data trie adalah cedar, yang merupakan trie array ganda yang dioptimalkan. ini mendukung Python2.7 dan 3.4+. Ini mendukung acar untuk dibuang dan dimuat.
Jika menurut Anda ini bermanfaat, silakan beri bintang!
Modul ini ditulis dalam cython. Anda perlu menginstal cython.
pip install cyac
Kemudian buat Trie
>>> from cyac import Trie
>>> trie = Trie()
tambahkan/dapatkan/hapus kata kunci
>>> trie.insert(u"哈哈") # return keyword id in trie, return -1 if doesn't exist
>>> trie.get(u"哈哈") # return keyword id in trie, return -1 if doesn't exist
>>> trie.remove(u"呵呵") # return keyword in trie
>>> trie[id] # return the word corresponding to the id
>>> trie[u"呵呵"] # similar to get but it will raise exeption if doesn't exist
>>> u"呵呵" in trie # test if the keyword is in trie
dapatkan semua kata kunci
>>> for key, id_ in trie.items():
>>> print(key, id_)
awalan/prediksi
>>> # return the string in the trie which starts with given string
>>> for id_ in trie.predict(u"呵呵"):
>>> print(id_)
>>> # return the prefix of given string which is in the trie.
>>> for id_, len_ in trie.prefix(u"呵呵"):
>>> print(id_, len_)
coba ekstrak, ganti
>>> python_id = trie.insert(u"python")
>>> trie.replace_longest("python", {python_id: u"hahah"}, set([ord(" ")])) # the second parameter is seperator. If you specify seperators. it only matches strings tween seperators. e.g. It won't match 'apython'
>>> for id_, start, end in trie.match_longest(u"python", set([ord(" ")])):
>>> print(id_, start, end)
Ekstrak Aho Corasick
>>> ac = AC.build([u"python", u"ruby"])
>>> for id, start, end in ac.match(u"python ruby"):
>>> print(id, start, end)
Ekspor ke File, lalu kita dapat menggunakan mmap untuk memuat file, berbagi data antar proses.
>>> ac = AC.build([u"python", u"ruby"])
>>> ac.save("filename")
>>> ac.to_buff(buff_object)
Inisiasi dari Python Buffer
>>> import mmap
>>> with open("filename", "r+b") as bf:
buff_object = mmap.mmap(bf.fileno(), 0)
>>> AC.from_buff(buff_object, copy=True) # it allocs new memory
>>> AC.from_buff(buff_object, copy=False) # it shares memory
Contoh Multi Proses
import mmap
from multiprocessing import Process
from cyac import AC
def get_mmap():
with open("random_data", "r+b") as bf:
buff_object = mmap.mmap(bf.fileno(), 0)
ac_trie = AC.from_buff(buff_object, copy=False)
# Do your aho searches here. "match" function is process safe.
processes_list = list()
for x in range(0, 6):
p = Process(
target=get_mmap,
)
p.start()
processes_list.append(p)
for p in processes_list:
p.join()
Untuk informasi selengkapnya tentang multiprosesor dan analisis memori di cyac, lihat masalah ini.
Fungsi "cocok" dari otomat AC adalah thread/proses yang aman. Dimungkinkan untuk menemukan kecocokan secara paralel dengan otomat AC bersama, tetapi tidak menulis/menambahkan pola ke dalamnya.
Pada Ubuntu 14.04.5/Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz.
Dibandingkan dengan HatTrie, sumbu Horizon adalah nomor token. Sumbu vertikal digunakan waktu (detik).
Dibandingkan dengan flashText. Ekspresi Reguler terlalu lambat dalam tugas ini (Lihat tolok ukur flashText). Sumbu cakrawala adalah nomor karakter yang harus dicocokkan. Sumbu vertikal digunakan waktu (detik).
Dibandingkan dengan pyahocorasick, sumbu Horizon memiliki karakter yang harus dicocokkan. Sumbu vertikal digunakan waktu (detik).
>>> len(char.lower()) == len(char) # this is always true in python2, but not in python3
>>> len(u"İstanbul") != len(u"İstanbul".lower()) # in python3
Jika pencocokan tidak peka huruf besar-kecil, pustaka ini akan menangani fakta tersebut, dan mengembalikan offset yang benar.
python setup.py build
PYTHONPATH= $( pwd ) /build/BUILD_DST python3 tests/test_all.py
PYTHONPATH= $( pwd ) /build/BUILD_DST python3 bench/bench_ * .py