Commit a0966177 authored by Charles DORMEVAL's avatar Charles DORMEVAL
Browse files

moteur de recherche buggé + extraction avec utf-8

parent a29216c7
......@@ -6,10 +6,10 @@ class ModeleBd
public function __construct(){
try{
$this->connexion=new PDO("mysql:host=localhost; dbname=projet", "root", "");
$this->connexion=new PDO("mysql:host=localhost; dbname=projet; charset=utf8", "root", "", array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"));
$this->connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
$exception=new PDOException($e->getMessage());
}catch(PDOException $e) {
$exception = new PDOException($e->getMessage());
throw $exception;
}
}
......@@ -26,13 +26,12 @@ class ModeleBd
$request=$this->connexion->prepare("select id_auteur from auteurs where nom_auteur=?");
$request->bindParam(1, $auteur);
$request->execute();
/* return $request->fetch();*/
$resultat=$request->fetchAll(PDO::FETCH_COLUMN, 0);
return $resultat;
$resultat=$request->fetchAll(PDO::FETCH_COLUMN);
return $resultat[0];
}
catch(PDOException $e){
$this->deconnexion();
throw new TableAccesException("problème avec la table auteurs");
die($e->getMessage());
}
}
......@@ -51,7 +50,7 @@ class ModeleBd
}
catch(PDOException $e){
$this->deconnexion();
throw new TableAccesException("problème avec la table auteurs");
die($e->getMessage());
}
}
......@@ -61,12 +60,13 @@ class ModeleBd
$request=$this->connexion->prepare("select id_oeuvre from oeuvres where nom_oeuvre=?");
$request->bindParam(1, $oeuvre);
$request->execute();
$resultat=$request->fetchAll(PDO::FETCH_COLUMN, 0);
return $resultat;
$resultat=$request->fetchAll(PDO::FETCH_COLUMN);
return $resultat[0];
}
catch(PDOException $e){
$this->deconnexion();
throw new TableAccesException("problème avec la table oeuvres");
die($e->getMessage());
}
}
......@@ -87,7 +87,7 @@ class ModeleBd
}
catch(PDOException $e){
$this->deconnexion();
throw new TableAccesException("problème avec la table oeuvres");
die($e->getMessage());
}
}
......@@ -102,20 +102,20 @@ class ModeleBd
}
catch(PDOException $e){
$this->deconnexion();
throw new TableAccesException("problème avec la table auteurs");
die($e->getMessage());
}
}
public function insererOeuvre($oeuvre, $date, $idAuteur){
try{
$requete="insert into oeuvres (nom_oeuvre, date, id_auteur) VALUES(?,?,?);";
$requete="insert into oeuvres (nom_oeuvre, date_oeuvre, id_auteur) VALUES(?,?,?);";
$statement=$this->connexion->prepare($requete);
$statement->execute(array($oeuvre,$date,$idAuteur));
}
catch(PDOException $e){
$this->deconnexion();
throw new TableAccesException("problème avec la table oeuvres");
die($e->getMessage());
}
}
......@@ -130,26 +130,26 @@ class ModeleBd
}
catch(PDOException $e){
$this->deconnexion();
throw new TableAccesException("problème avec la table citations");
die($e->getMessage());
}
}
public function remplirBd($auteur,$oeuvre,$date,$citation){
if($this->auteurExiste($auteur)){
$idAuteur=$this->getIdAuteur($auteur);
}else{
$this->insererAuteur($auteur);
$idAuteur=$this->getIdAuteur($auteur);
}
if($this->auteurExiste($auteur)){
$idAuteur=$this->getIdAuteur($auteur);
}else{
$this->insererAuteur($auteur);
$idAuteur=$this->getIdAuteur($auteur);
}
if($this->oeuvreExiste($oeuvre)){
$idOeuvre=$this->getIdOeuvre($oeuvre);
}else{
$this->insererOeuvre($oeuvre,$date,$idAuteur);
$idOeuvre=$this->getIdOeuvre($oeuvre);
}
if($this->oeuvreExiste($oeuvre)){
$idOeuvre=$this->getIdOeuvre($oeuvre);
}else{
$this->insererOeuvre($oeuvre,$date,$idAuteur);
$idOeuvre=$this->getIdOeuvre($oeuvre);
}
$this->insererCitation($citation,$idOeuvre);
$this->insererCitation($citation,$idOeuvre);
}
......
<?php
require_once "./ModeleBd.php";
$modeleBd = new ModeleBd();
/*----INITIALISATION-------*/
//on empeche la limite d'execution de 30 secondes car il faut inserer bcp de citations
ini_set('max_execution_time', 300);//5min
$fichier="../../data/Toutes.txt";
$handle=fopen($fichier,"r");
$content=fread($handle,filesize($fichier));
/*----partie auteur----*/
$fichier="../../data/Toutes.txt";
//$fichier="Toutes.txt";
$handle=fopen($fichier,"r");
$content=fread($handle,filesize($fichier));
$split=explode("\n",$content); //on separe pour chaque saut de ligne
$i=0;
$citation=""; //string pour récupérer la citation
$matrice = array(); //matrice qui pour chaque ligne va contenir le nom de l'auteur - la source - la date - la citation
$colonneMatrice=0;
$ligneMatrice=0;
/*------FONCTIONS------*/
function suppr_accents($str, $encoding='utf-8')
{
// transformer les caractères accentués en entités HTML
$str = htmlentities($str, ENT_NOQUOTES, $encoding);
// remplacer les entités HTML pour avoir juste le premier caractères non accentués
// Exemple : "&ecute;" => "e", "&Ecute;" => "E", "à" => "a" ...
$str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
// Remplacer les ligatures
// Exemple "œ" => "oe"
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
// Supprimer tout le reste
$str = preg_replace('#&[^;]+;#', '', $str);
return $str;
}
ini_set('max_execution_time', 3000);//5min
ini_set('memory_limit', '-1');
$fichierCitations="../../data/Toutes.txt";
$handlerCitations=fopen($fichierCitations,"r");
$content=fread($handlerCitations,filesize($fichierCitations));
......@@ -80,11 +46,14 @@ for($j=0;$j<sizeof($auteurTitreDate);$j++){
}
}
fclose($handle);
/*------CITATIONS------*/
$pre_citations=array();
//si ma ligne est une information autre qu'une citation je rempli mon tableau avec null pour séparer
foreach(file($fichier) as $ligne){
foreach(file($fichierCitations) as $ligne){
if(!stristr($ligne,"—")){
$pre_citations[]=$ligne;
}
......@@ -93,6 +62,8 @@ foreach(file($fichier) as $ligne){
}
}
fclose($handlerCitations);
$citationtableau=array();
$index=0;
......@@ -108,17 +79,23 @@ foreach ($pre_citations as $courant){
else{
$index++;
}
}
/*------BDD-INSERTION-------------*/
$modeleBd = new ModeleBd();
$modeleBd->remplirBd("J.-R. BLOCH", "Cacaouettes et Bananes", NULL, "Quels mots impressionnants! Dakar : deux a, comme arabe, mais si différemment colorés
par les consonnes! Le k intercale son exotisme menaçant, l'r final gronde et se répercute.");
for($i=1; $i<sizeof($auteurTitreDate)-1; $i++){
$modeleBd->remplirBd($auteurTitreDate[$i][0], $auteurTitreDate[$i][1], $auteurTitreDate[$i][2], $citationtableau[$i]);
for($i=1; $i<sizeof($auteurTitreDate); $i++){
if($citationtableau[$i]!=""){
$modeleBd->remplirBd($auteurTitreDate[$i][0], $auteurTitreDate[$i][1], $auteurTitreDate[$i][2], $citationtableau[$i]);
}
}
?>
\ No newline at end of file
......@@ -17,10 +17,11 @@ class MoteurDeRecherche
try{
$this->connexion=new PDO("mysql:host=localhost; dbname=projet", "root", "");
}catch(PDOException $e){
$exception=new PDOException($e->getMessage());
throw $exception;
die($e->getMessage());
}
$this->requestPattern="select a.nom_auteur, c.contenu, o.nom_oeuvre, o.date from auteurs a, citations c, oeuvres o where a.id_auteur=o.id_auteur and o.id_oeuvre=c.id_oeuvre ";
$this->requestPattern="select a.nom_auteur, c.contenu, o.nom_oeuvre, o.date_oeuvre from auteurs a, citations c, oeuvres o where a.id_auteur=o.id_auteur and o.id_oeuvre=c.id_oeuvre ";
$file="../../data/french";
$handle=fopen($file,"r");
......@@ -31,10 +32,12 @@ class MoteurDeRecherche
}
public function rechercheAvecAuteurDate($auteur,$date){
$requestComplement = "and date=? and nom_auteur=?";
$requestComplement = "and date_oeuvre like ? and nom_auteur like ?";
$fullRequest = $this->connexion->prepare($this->requestPattern . $requestComplement);
$fullRequest->bindParam(1, $date);
$fullRequest->bindParam(2, $auteur);
$paramDate="'%".$date."%'";
$fullRequest->bindParam(1, $paramDate);
$paramAuteur="%".$auteur."%";
$fullRequest->bindParam(2, $paramAuteur);
$fullRequest->execute();
if(empty($fullRequest->fetchAll())){
$this->leveinsteinAuteur($auteur);
......@@ -44,9 +47,10 @@ class MoteurDeRecherche
}
public function rechercheAvecAuteur($auteur){
$requestComplement="and nom_auteur=?";
$requestComplement="and nom_auteur like ?";
$fullRequest=$this->connexion->prepare($this->requestPattern.$requestComplement);
$fullRequest->bindParam(1, $auteur);
$paramAuteur="%".$auteur."%";
$fullRequest->bindParam(1, $paramAuteur);
$fullRequest->execute();
if(empty($fullRequest->fetchAll())){
$this->leveinsteinAuteur($auteur);
......@@ -57,12 +61,14 @@ class MoteurDeRecherche
public function rechercheAvecMotsClesDate($recherche, $date){
$keyWords=explode(" ",$recherche);
$requestComplement="and date =?";
$requestComplement="and date_oeuvre like ?";
foreach($keyWords as $keyWord){
$requestComplement=$requestComplement." and contenu like % ".$keyWord." %";
$requestComplement=$requestComplement." and c.contenu like '% ".$keyWord." %'";
}
$fullRequest=$this->connexion->prepare($this->requestPattern.$requestComplement);
$fullRequest->bindParam(1, $date);
$param="'%".$date."%'";
$fullRequest->bindParam(1, $param);
$fullRequest->execute();
if(empty($fullRequest->fetchAll())){
$this->leveinsteinCitation($recherche);
......@@ -71,14 +77,16 @@ class MoteurDeRecherche
}
}
public function RechercheAvecMotsCles($recherche){
$keyWords=explode(" ", $recherche);
$requestComplement="";
foreach($keyWords as $keyWord){
$requestComplement=$requestComplement." and contenu like % ".$keyWord." %";
foreach($keyWords as $keyWord) {
$requestComplement = $requestComplement . " and c.contenu like '%{$keyWord}%'";
}
$fullRequest=$this->connexion->prepare($this->requestPattern.$requestComplement);
$fullRequest->execute();
print_r($fullRequest->fetchAll());
if(empty($fullRequest->fetchAll())){
$this->leveinsteinCitation($recherche);
}else{
......@@ -86,6 +94,7 @@ class MoteurDeRecherche
}
}
private function leveinsteinAuteur($auteur){
$requestAuthors=$this->connexion->prepare("select nom_auteur from auteurs where 1");
$requestAuthors->execute();
......
......@@ -12,9 +12,10 @@
if($type=='auteur'){
if($date!=-1){
$searchEngine->rechercheAvecAuteurDate($element,$date);
$searchEngine->rechercheAvecAuteurDate(strtoupper($element),$date);
}else{
$searchEngine->rechercheAvecAuteur($element);
$res=$searchEngine->rechercheAvecAuteur(strtoupper($element));
echo $res[1][1];
}
}else{
if($date!=-1){
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment