Commit 8fd73f04 authored by Charles DORMEVAL's avatar Charles DORMEVAL
Browse files

commit puis pushv

parent 848ce1ad
This diff is collapsed.
<?php
/**
* Created by PhpStorm.
* User: aitas
* Date: 21/01/2018
* Time: 10:19
*/
class MoteurDeRecherche
{
private $connexion;
private $requestPattern;
private $french;
private $authors;
public function __construct(){
try{
$this->connexion=new PDO("mysql:host=localhost; dbname=projet", "root", "");
}catch(PDOException $e){
$exception=new PDOException($e->getMessage());
throw $exception;
}
$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 ";
$file="../../data/french";
$handle=fopen($file,"r");
$content=fread($handle,filesize($file));
$this->french=explode("\n",$content);
$this->authors=""; //changer avec une méthode qui permet de récupérer les autheurs de la bd
}
public function rechercheAvecAuteurDate($auteur,$date){
$requestComplement = "and date=? and nom_auteur=?";
$fullRequest = $this->connexion->prepare($this->requestPattern . $requestComplement);
$fullRequest->bindParam(1, $date);
$fullRequest->bindParam(2, $auteur);
$fullRequest->execute();
if(empty($fullRequest->fetchAll())){
$this->leveinsteinAuteur($auteur);
}else{
return $fullRequest->fetchAll();
}
}
public function rechercheAvecAuteur($auteur){
$requestComplement="and nom_auteur=?";
$fullRequest=$this->connexion->prepare($this->requestPattern.$requestComplement);
$fullRequest->bindParam(1, $auteur);
$fullRequest->execute();
if(empty($fullRequest->fetchAll())){
$this->leveinsteinAuteur($auteur);
}else{
return $fullRequest->fetchAll();
}
}
public function rechercheAvecMotsClesDate($recherche, $date){
$keyWords=explode(" ",$recherche);
$requestComplement="and date =?";
foreach($keyWords as $keyWord){
$requestComplement=$requestComplement." and contenu like % ".$keyWord." %";
}
$fullRequest=$this->connexion->prepare($this->requestPattern.$requestComplement);
$fullRequest->bindParam(1, $date);
$fullRequest->execute();
if(empty($fullRequest->fetchAll())){
$this->leveinsteinCitation($recherche);
}else{
return $fullRequest->fetchAll();
}
}
public function RechercheAvecMotsCles($recherche){
$keyWords=explode(" ", $recherche);
$requestComplement="";
foreach($keyWords as $keyWord){
$requestComplement=$requestComplement." and contenu like % ".$keyWord." %";
}
$fullRequest=$this->connexion->prepare($this->requestPattern.$requestComplement);
$fullRequest->execute();
if(empty($fullRequest->fetchAll())){
$this->leveinsteinCitation($recherche);
}else{
return $fullRequest->fetchAll();
}
}
private function leveinsteinAuteur($auteur){
$requestAuthors=$this->connexion->prepare("select nom_auteur from auteurs where 1");
$requestAuthors->execute();
$authors=$requestAuthors->fetchAll(PDO::FETCH_COLUMN);
$min=PHP_INT_MAX;
$result="";
foreach ($authors as $author){
$lev=levenshtein($auteur,$author);
if($lev==$min){
$result=$author;
}
if($lev<$min){
$result=$author;
$min=$lev;
}
}
$result=trim($result);
if($result==$auteur){
echo "Nous n'avons pas réussi à trouver de résultat pour votre recherche ...";
}else{
echo "Vouliez vous faire référence à cet auteur : ".$result." ?";
}
}
private function leveinsteinCitation($recherche){
$keyWords=explode(" ",$recherche);
$result="";
foreach ($keyWords as $keyWord){
$min=PHP_INT_MAX;
foreach ($this->french as $word){
$lev=levenshtein($keyWord,$word);
if($lev==$min){
$correct=$word;
}
if($lev<$min){
$correct=$word;
$min=$lev;
}
}
$result=$result." ".$correct;
}
$result=trim($result);
if($result==$recherche){
echo "Nous n'avons pas réussi à trouver de résultat pour votre recherche ...";
}else{
echo "Nous pouvons vous proposer cette recherche : ".$result;
}
}
}
?>
\ No newline at end of file
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