Տեքստային որոնման համակարգի մշակում Python-ի Whoosh գրադարանի միջոցով


Whoosh-ը դասերի և գործառույթների python գրադարան է տեքստը ինդեքսավորելու և այնուհետև ինդեքսը որոնելու համար: Ենթադրենք, որ դուք կառուցում եք մի ծրագիր, որը պետք է անցնի տարբեր փաստաթղթեր, այնուհետև գտնել նմանություններ կամ ստանալ տվյալներ՝ հիմնվելով մի քանի նախապես սահմանված պայմանների վրա, կամ ասենք, որ ցանկանում եք հաշվել, թե քանի անգամ է նշված նախագծի վերնագիրը հետազոտության մեջ: թուղթ, ապա այն, ինչ մենք կառուցում ենք այս ձեռնարկում, օգտակար կլինի:

Սկսել

Տեքստի որոնման մեր համակարգը կառուցելու համար մենք կաշխատենք whoosh գրադարանի հետ:

Այս գրադարանը նախապես փաթեթավորված չէ Python-ով: Այսպիսով, մենք այն կներբեռնենք և կտեղադրենք՝ օգտագործելով pip փաթեթի կառավարիչը:

Whoosh գրադարանը տեղադրելու համար օգտագործեք ստորև նշված տողը:

pip install whoosh

Եվ հիմա, մենք կարող ենք ներմուծել այն մեր սցենարին՝ օգտագործելով ստորև բերված տողը:

from whoosh.fields import Schema, TEXT, ID
from whoosh import index

Տեքստային որոնման համակարգի կառուցում Python-ի միջոցով

Նախ, եկեք սահմանենք մի թղթապանակ, որտեղ անհրաժեշտության դեպքում կպահենք ինդեքսավորված ֆայլերը:

import os.path
os.mkdir("dir")

Հաջորդը, եկեք սահմանենք սխեման: Schema-ն նշում է փաստաթղթերի դաշտերը ինդեքսում:

schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT(stored = True))
ind = index.create_in("dir", schema)
writer = ind.writer()
writer.add_document(title=u"doc", content=u"Py doc hello big world", path=u"/a") 
writer.commit()

Այժմ, երբ մենք ինդեքսավորել ենք փաստաթուղթը, մենք որոնում ենք այն:

from whoosh.qparser import QueryParser
with ind.searcher() as searcher:
     query = QueryParser("content", ind.schema).parse("hello world")
     results = searcher.search(query, terms=True)
     for r in results:
         print (r, r.score)
         if results.has_matched_terms():
            print(results.matched_terms())

Արդյունք

Այն կստեղծի հետևյալ արդյունքը.

<Hit {'path': '/a', 'title': 'doc', 'content': 'Py doc hello big world'}> 
1.7906976744186047
{('content', b'hello'), ('content', b'world')}

Օրինակ

Ահա ամբողջական կոդը.

from whoosh.fields import Schema, TEXT, ID
from whoosh import index
import os.path
os.mkdir("dir")
schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT(stored = True))
ind = index.create_in("dir", schema)
writer = ind.writer()
writer.add_document(title=u"doc", content=u"Py doc hello big world", path=u"/a") 
writer.commit()

from whoosh.qparser import QueryParser
with ind.searcher() as searcher:
     query = QueryParser("content", ind.schema).parse("hello world")
     results = searcher.search(query, terms=True)
     for r in results:
         print (r, r.score)
         if results.has_matched_terms():
            print(results.matched_terms())

Եզրակացություն

Այժմ դուք սովորել եք Python-ում տեքստային որոնման համակարգեր ստեղծել: Օգտագործելով սա՝ դուք կարող եք որոնել տարբեր փաստաթղթերում՝ վայրկյանների ընթացքում օգտակար բովանդակություն հանելու համար: Դուք նաև ուսումնասիրել եք Python-ի Whoosh գրադարանի ներուժը: