Documente Academic
Documente Profesional
Documente Cultură
Teza
Teza
al Republicii Moldova
Raport
Lucrarea de an
ASAD
Tema: Information Retrieval
Chișinău 2019
Scopul lucrării: De creat un program care extrage informația din documentele propuse
conform sarcinei.
Sarcina:
1. De creat vocabularul de cuvinte din documentele date.
2. De creat matricea cuvinte-documente conform variantei date.
3. De creat un script care rezolvă problema dată în variana respectivă.
4. De rulat scriptul și de verificat lucrul lui.
5. De evaluat rezultatele corectării calculînd Precision și Recall.
6. De analizat rezultatul obținut de script și de facut schimbările necesare pentru a mări
Precision și Recall.
7. De scris concluzia în care :
a. De analizat erorile scriptului
b. De propus căile de rezolvare a problemelor evidențiate
Boolean retrieval.
Exemplu .
O cartepe care mulți o dețin sunt lucrările colecțiilor lui Shakespeare. Să
presupunem că ați vrut să determinați care piese ale lui Shakespeare conțin
cuvintele Brut și Cezar și NU Calpurnia. O modalitate de a face acest lucru este de
a începe la începând și să citească prin tot textul, notând pentru fiecare piesă dacă
conține Brutus și Caesar și exclude din considerație dacă conține Calpurnia. Cea
mai simplă formă de recuperare a documentelor este pentru un computer pentru a
face acest tip de scanare liniară prin documente. Acest proces este frecvent GREP,
denumit grepping prin text, după comanda Unix grep, care efectuează acest proces.
Grepping prin text poate fi un proces foarte eficient, în special având în vedere
viteza computerelor moderne și adesea permite folosirea utilă posibilități de
potrivire a tiparelor de machete prin utilizarea expresiilor regulate. Cu calculatoare
moderne, pentru interogarea simplă a colecțiilor modeste (mărimea lucrărilor
colecțiilor lui Shakespeare este puțin sub un milion de cuvinte de text în total), nu
ai nevoie de nimic mai mult. Dar pentru multe scopuri, aveți nevoie de mai mult:
1. Pentru a procesa rapid colecții de documente mari. Cantitatea de date online a
crescut cel puțin la fel de repede ca viteza computerelor, și am face-o Acum îți
place să fii în căutarea colecțiilor totale de ordinul miliardelor la trilioane de
cuvinte.
2. Pentru a permite operații de potrivire mai flexibile. De exemplu, este
impracticabil pentru a efectua interogarea Romani NEAR concetățeni cu grep, în
cazul în care NEAR ar putea fi definite ca "în termen de 5 cuvinte" sau "în aceeași
propoziție".
3. Pentru a permite recuperarea clasificată: în multe cazuri doriți cel mai bun
răspuns la unnevoia de informații între multe documente care conțin anumite
cuvinte.
Modalitatea de a evita scanarea liniară a textelor pentru fiecare interogare este de
indexare documente în avans. Să rămânem cu Lucrările Colecționate ale lui
Shakespeare, și folosiți-o pentru a introduce elementele de bază ale modelului de
recuperare booleană. Presupune înregistrăm pentru fiecare document - aici o piesă
a lui Shakespeare - fie că este vorba conține fiecare cuvânt din toate cuvintele
folosite de Shakespeare (folosit de Shakespeare aproximativ 32.000 de cuvinte
diferite). Rezultatul este o incidență binară pe termen lung.
Fig.1.1
Cum procesăm o interogare utilizând un index inversat și un modul boolean de
bază model de recuperare? Luați în considerare procesarea interogării conjunctive
simple:
(1.1) Brutus și Calpurnia peste indicele inversat .
1. Localizați Brutus în dicționar
2. Recuperați înregistrările
3. Localizați Calpurnia în dicționar
4. Recuperați înregistrările
5. Intersectează cele două liste de postări, după cum se arată în Figura 1.5.
LISTA LISTEI Operațiunea de intersecție este una crucială: trebuie să se
intersecteze eficient Înscrierile în INTERSECTION listează astfel încât să poată
găsi rapid documente care conțin ambii termeni. (Această operațiune este denumită
uneori liste de fuziuni: acest nume ușor contraintuitiv reflectă folosirea
algoritmului de îmbinare pentru termen o familie generală de algoritmi care
combină mai multe liste sortate prin avansarea intercalată a pointerilor prin fiecare;
aici fuzionăm listele cu o operație logică AND.).
Aceste jetoane sunt adesea denumite în mod liber termeni sau cuvinte, însă este
important să faceți o distincție de tip / token de câteva ori. Un jeton este o instanță
a unei secvențe de caractere într-un anumit document care sunt grupate
împreună ca o unitate semantică utilă pentru procesare. Un tip este clasa tuturor
Termos TERM conținând aceeași secvență de caractere. Un termen este un tip
(probabil normalizat) care este inclus în dicționarul sistemului IR.
Codul sursă:
package lab2;
import javafx.util.Pair;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
// Execute interrogation
private static ArrayList<Pair<Pair<String, Integer>, String>> executeInterrogation(final
ArrayList<File> files, final ArrayList<String> wordsToCheck,
final String keyRubric) throws
IOException {
ArrayList<Pair<Pair<String, Integer>, String>> filesThatContainGivenWords = new ArrayList<>();
// Gets all unique words from files with a specific rubric that are not in any other files
private static Set<String> getKeyWordsFromRubric(final ArrayList<File> files, final String keyRubric)
throws IOException {
Set<String> distinctWordsFromRubric = new HashSet<>();
Set<String> keyWords = new HashSet<>();
return uniqueWords;
}
// Actual matrix
writer.write("\n");
for (int i = 0; i < distinctWords.size(); i++) {
writer.write(String.format("%20s", distinctWords.get(i)));
for (int j = 0; j < files.size(); j++) {
writer.write(String.format("\t\t\t\t\t\t\t\t%d", getWordFrequencyInFile(files.get(j),
distinctWords.get(i))));
}
writer.write("\n");
}
writer.close();
}
// Slow
for (String token : tokenizeFile(file)) {
if (token.equals(word))
count++;
}
return count;
}
// Tokenize all words from file and return them as ArrayList of Strings
private static ArrayList<String> tokenizeFile(final File file) throws IOException {
String fileContents = new String(
Files.readAllBytes(Paths.get(file.getAbsolutePath())),
StandardCharsets.UTF_8
);
// [\\W]+ - Everything except delimiter characters, for ASCII characters only
// \\P{L}+ - This is for non ASCII characters (not tested)
return new ArrayList<>(Arrays.asList(fileContents.toLowerCase().split("[^a-zA-Z]+")));
}
}
Figura 1. Matricea de cuvinte
Figura 2. Cuvintele cheie din rubrica cotidian
Figura 3. Rezultatul interogărilor
Concluzii:
În această lucrare de laborator noi ne-am inițiat în domeniul information retrieval.
Am învățat cum se extrage corect informația. Conform sarcinei, am avut de creat o
aplicație care va extrage matricea booleana cuvinte-documente, în care se vor afla
frecvențele acestor cuvinte pentru fișierele lor respective, toate cuvintele cheie
pentru rubrica cotidian (cuvintele care se conțin în fișierele cu rubrica cotidian și nu
se conțin în orice alt fișier), și de creat 3 interogări, fiecare a câte 3 cuvinte extrase
din cuvintele cheie și verificarea frecvenții lor în rubrica cotidian (se va indica doar
denumirea fișierului și frecvența fiecărui cuvând în fișierul respectiv). Luând în
considerație faptul că avem 70 de fișiere de verificat, fiecare din fișiere conținând
articole de dimensiuni medii, algoritmul este lent. Crearea și scrierea matricii
booleane cuvinte-documente se efectuează în aproximativ 10 minute. Extragerea
cuvintelor cheie din rubrica cotidian se efectuează în aproximativ 4 minute. Iar
interogările, în total se efectuează în aproximativ 3 minute (luând în considerație că
sunt 3 interogări, putem spune că fiecare interogare durează o minută). În total
programul se execută în aproximativ 20 de minute. Acest rezultat poate să difere în
dependență de puterea procesorului la un singur nucleu (programul se execută pe un
singur fir de execuție).
Surse Bibliografice :
Allan, James. 2005. HARD track overview in TREC 2005: High accuracy retrieval
from documents. In Proc. TREC. 174, 519
Allan, James, Ron Papka, and Victor Lavrenko. 1998. On-line new event detection
and tracking. In Proc. SIGIR, pp. 37–45. ACM Press. DOI:
doi.acm.org/10.1145/290941.290954. 399, 519, 526, 528 Allwein, Erin L., Robert
Alonso, Omar, Sandeepan Banerjee, and Mark Drake. 2006. GIO: A semantic web
application using the information grid framework. In Proc. WWW, pp. 857–858.
ACM Press. DOI: doi.acm.org/10.1145/1135777.1135913. 373, 519, 522