Szabad szöveges keresés nagy mennyiségű szövegben könnyedén

Mai cikkünk egy igen érdekes projektünkről szól, amelyben nagy mennyiségű szöveg automatikus feldolgozása során gyűjtöttünk új tapasztalatokat.

A Megrendelő kérése az volt, hogy az általa heti több alkalommal beszerzett, PDF formátumú szöveges információkat (Magyar Közlöny) dolgozzuk fel automatikusan úgy, hogy:

  • nem szükséges számára a megjelenő új törvények, rendeletek teljes szövegét elérhetővé tenni, csak azt akarja tudni, vonatkozik-e valamelyik szervezeti egységére új rendelet / törvény,
  • viszont ő definiál egy dinamikusan szerkesztett szó gyűjteményt, amely szavakra és szókapcsolatokra (a magyar nyelvtan szabályai szerinti toldalékolás, ragozás stb. figyelembe vételével) automatikusan rá kell keresni minden egyes új PDF file feltöltése során,
  • ha az előző keresésben volt találat az újonnan feltöltött PDF-ben, úgy a megfelelő szervezeti egységet e-mailben értesíteni kell arról, hogy előfordulhat, hogy az új Magyar Közlönyben van olyan jogszabályi változás, amely az adott szervezeti egységet érinti vagy érintheti,
  • továbbá biztosítsunk egy szabad szöveges keresőfelületet, hogy a már betöltött és feldolgozott Magyar Közlönyök szövegében számukra releváns információkra tudjanak keresni a felhasználók,
  • végezetül őrizzük meg a PDF file-t is és a belőle kinyert szöveget is egy későbbi esetleges továbbfejlesztés lehetősége miatt.

A kapott feladat sokrétű és merőben új megközelítést igényelt, mivel sok apró “meglepetés” volt a feladatban elrejtve, melyekkel részben menet közben szembesültünk:

  • egy-egy Magyar Közlöny PDF állománya akár 1-2000 oldalnyi szöveget is tartalmazhat,
  • számos esetben a PDF-ben nemcsak szöveges, de képi anyagok is megjelennek (pl. térképszelvények, települési rendezési tervek), vagy éppen 2-300 oldalas táblázatok (költségbontások, felsorolások), amelyeket ki kell “ejteni” a feldolgozásból,
  • bónusz feladatként az elmúlt 10 év több, mint 5000 Magyar Közlönyét fel kellett dolgozni és az adatbázisba importálni,
  • a kulcsszavas és a szabad szöveges keresés során is teljes egészében a magyar nyelvtan által megengedett ragozást, toldalékozást figyelembe véve kell keresni, kis- nagybetű nem számít.

A megvalósítás során a problémásabb területeket az alábbiak alapján kezeltük:

1, Automatikus PDF -> TXT konverzió

A kiszolgáló webszerverünk Linux operációs rendszerén futtatott automata script-ekkel elértük, hogy bármilyen terjedelmes is egy egy újonnan feltöltött Magyar Közlöny, azt pár másodperc alatt feldolgozza rendszerünk (az esetlegesen szükséges kódlap konverziókkal együtt) és az adatbázisba importálja. A “feleslegesnek” ítélt tartalmak nélkül.
A munka befejezéseként mintegy bő fél óra alatt a korábban a Megrendelő által learchivált kb. 5000 db korábbi Magyar Közlönyt is feldolgoztuk és importáltuk az adatbázisba, azok tartalmára rögtön futtathatóak lettek a keresések.

2, MySQL Natural Language Full-Text Search alkalmazása

Az előző pontban ismertetett módon átalakított nagy mennyiségű szöveges tartalmat szerettük volna úgy eltárolni adatbázisban, hogy abban hatékonyan, gyorsan és a magyar nyelv szabályai alapján tudjunk keresni. Erre megoldást korábban a MySQL MyISAM típusú adatbázis engine nyújtott, amivel bár elveszítettük volna az általunk kedvelt tranzakciókezelési lehetőségeket amelyet a “szokásos” InnoDB adatbázisokkal meg lehet valósítani, azonban csak így tudunk volna teljes szövegen belüli ún. “Natural Language Full-Text Search” megoldást nyújtani.
Szerencsére ez a limitáció azonban az 5.7-es MySQL-el megszűnt, ugyanis itt már InnoDB táblák esetében is lehet használni a “Natural Language Full-Text Search“-et!

Feltételek a megvalósításhoz:

  • csak MyISAM vagy InnoDB engine-t használó, nem partícionált táblákkal,
  • csak char, varchar, text típusú, fulltext indexekkel ellátott mezőkön működik a keresés!

Használata gyakorlatilag megegyezik a “sima” SQL lekérdezések használatával, csak a szintaktikája más egy kissé.

A megvalósított rendszerben több, mint 5000 Magyar Közlöny került feltöltésre összesen több, mint 1.5GB adatot alkotva (indexekkel együtt). A szabad szöveges keresések átlagosan 0.12 másodperc alatt hajtódnak végre.

Konklúzió:

Az alkalmazást a Megrendelő valamennyi szakmai szervezete eredményesen használja, számos esetben egy-egy “véletlenül” kiadott jogszabályi változás bejelentését csak ezzel az eszközzel tudták azonosítani. Mára a szakterületek által megadott egyéni – elektronikus értesítést kiváltó – kulcsszavak listája jelentősen bővült: van olyan szakterület, amely 20-30 különböző kulcsszót is felvitt a rendszerbe, mint a számára figyelendő jogszabályi változás indikátorát.

Köszönjük a lehetőséget az újabb érdekes szakmai feladat teljesítésére! Bízunk benne, hogy a fenti esettanulmány számos programozással foglalkozó személy vagy cég számára tanulságos lesz. Amennyiben kérdése van a programmal, vagy az alkalmazott technológiákkal kapcsolatban, lépjen velünk kapcsolatba.