Commit e8550d51 authored by Clement GAUDUCHEAU's avatar Clement GAUDUCHEAU
Browse files

recherche d'auteurs frequents effectués

parent 98e5cc1e
<?php
require_once PATH_VUE."/Vue.php";
require_once PATH_MODELE."/AuteursFrequents.php";
class ControleurAccueil{
private $vue;
private $modeleNbRecherche;
public function __construct(){
$this->vue=new Vue();
$this->modeleNbRecherche = new AuteursFrequents();
}
public function accueil(){
$this->vue->accueil();
$auteursFreq=$this->modeleNbRecherche->get10Auteurs();
$this->vue->accueil($auteursFreq);
}
}
?>
\ No newline at end of file
<?php
require_once PATH_VUE."/Vue.php";
require_once PATH_MODELE."/MoteurDeRecherche.php";
require_once PATH_MODELE."/AuteursFrequents.php";
class ControleurRecherche{
private $vue;
private $modele;
private $modeleNbRecherche;
public function __construct(){
$this->vue=new Vue();
$this->modele=new MoteurDeRecherche();
$this->modeleNbRecherche = new AuteursFrequents();
}
private function traiterRecherche($type,$element,$date){
......@@ -16,6 +19,7 @@
if($date!=-1){
return $this->modele->rechercheAvecAuteurDate($element,$date);
}else{
$this->modeleNbRecherche->incrementerNbRecherche($element);
return $this->modele->rechercheAvecAuteur($element);
}
}else{
......
......@@ -211,4 +211,7 @@ class MoteurDeRecherche
}
}
?>
\ No newline at end of file
......@@ -226,3 +226,8 @@ textarea {
color:firebrick;
text-align: center;
}
.auteursFrequents{
font-size: medium;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
-- phpMyAdmin SQL Dump
-- version 4.7.4
-- https://www.phpmyadmin.net/
--
-- Hôte : 127.0.0.1:3306
-- Généré le : mar. 23 jan. 2018 à 07:59
-- Version du serveur : 5.7.19
-- Version de PHP : 5.6.31
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de données : `projet`
--
-- --------------------------------------------------------
--
-- Structure de la table `auteurs`
--
DROP TABLE IF EXISTS `auteurs`;
CREATE TABLE IF NOT EXISTS `auteurs` (
`id_auteur` int(255) NOT NULL AUTO_INCREMENT,
`nom_auteur` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id_auteur`),
UNIQUE KEY `id_auteur` (`id_auteur`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
--
-- Structure de la table `citations`
--
DROP TABLE IF EXISTS `citations`;
CREATE TABLE IF NOT EXISTS `citations` (
`id_citation` int(255) NOT NULL AUTO_INCREMENT,
`contenu` text COLLATE utf8_unicode_ci NOT NULL,
`id_oeuvre` int(255) NOT NULL,
PRIMARY KEY (`id_citation`),
UNIQUE KEY `id_citation` (`id_citation`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
--
-- Structure de la table `oeuvres`
--
DROP TABLE IF EXISTS `oeuvres`;
CREATE TABLE IF NOT EXISTS `oeuvres` (
`id_oeuvre` int(255) NOT NULL AUTO_INCREMENT,
`nom_oeuvre` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`date_oeuvre` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`id_auteur` int(255) NOT NULL,
PRIMARY KEY (`id_oeuvre`),
UNIQUE KEY `id_oeuvre` (`id_oeuvre`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
This diff is collapsed.
<?php
class ModeleBd
{
private $connexion;
public function __construct(){
try{
$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());
throw $exception;
}
}
public function deconnexion(){
$this->connexion=null;
}
//renvoie l'id de l'auteur quand on connait son nom.
public function getIdAuteur($auteur){
try{
$request=$this->connexion->prepare("select id_auteur from auteurs where nom_auteur=?");
$request->bindParam(1, $auteur);
$request->execute();
$resultat=$request->fetchAll(PDO::FETCH_COLUMN);
return $resultat[0];
}
catch(PDOException $e){
$this->deconnexion();
die($e->getMessage());
}
}
//renvoie true si l'auteur existe et false sinon.
public function auteurExiste($auteur){
try{
$exist=false;
$requete="select id_auteur from auteurs where nom_auteur=?";
$statement=$this->connexion->prepare($requete);
$statement->execute(array($auteur));
if($statement->fetch()){
$exist=true;
}
return $exist;
}
catch(PDOException $e){
$this->deconnexion();
die($e->getMessage());
}
}
//renvoie l'id de l'oeuvre quand on connait son nom.
public function getIdOeuvre($oeuvre){
try{
$request=$this->connexion->prepare("select id_oeuvre from oeuvres where nom_oeuvre=?");
$request->bindParam(1, $oeuvre);
$request->execute();
$resultat=$request->fetchAll(PDO::FETCH_COLUMN);
return $resultat[0];
}
catch(PDOException $e){
$this->deconnexion();
die($e->getMessage());
}
}
//renvoie true si l'oeuvre existe et false sinon.
public function oeuvreExiste($oeuvre){
try{
$exist=false;
$requete="select id_oeuvre from oeuvres where nom_oeuvre=?";
$statement=$this->connexion->prepare($requete);
$statement->execute(array($oeuvre));
if($statement->fetch()){
$exist=true;
}
return $exist;
}
catch(PDOException $e){
$this->deconnexion();
die($e->getMessage());
}
}
//inserer un auteur
public function insererAuteur($auteur){
try{
$requete="insert into auteurs (nom_auteur) VALUES (?);";
$statement=$this->connexion->prepare($requete);
$statement->execute(array($auteur));
}
catch(PDOException $e){
$this->deconnexion();
die($e->getMessage());
}
}
public function insererOeuvre($oeuvre, $date, $idAuteur){
try{
$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();
die($e->getMessage());
}
}
public function insererCitation($laCitation, $idOeuvre){
try{
$requete="insert into citations(contenu, id_oeuvre) VALUES(?,?);";
$statement=$this->connexion->prepare($requete);
$statement->execute(array($laCitation, $idOeuvre));
}
catch(PDOException $e){
$this->deconnexion();
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->oeuvreExiste($oeuvre)){
$idOeuvre=$this->getIdOeuvre($oeuvre);
}else{
$this->insererOeuvre($oeuvre,$date,$idAuteur);
$idOeuvre=$this->getIdOeuvre($oeuvre);
}
$this->insererCitation($citation,$idOeuvre);
}
}
?>
<p>connexion...</p>
<?php
try{
//$bdd = new PDO('mysql:host=localhost;dbname=testProjet;charset=utf8', 'root', 'cg210298'); //linux
$bdd = new PDO('mysql:host=localhost;dbname=projet_test;charset=utf8', 'root', ''); //windows
}catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
?>
<p> REUSSI </p>
</br>
<p>insertion...</p>
</br>
<?php
ini_set('memory_limit', '-1'); //sur windows pour avoir memoire illimitée
// $fichier="../../data/lesAuteurs.txt";
$fichier="lesAuteurs.txt";
$handle=fopen($fichier,"r");
$content=fread($handle,filesize($fichier));
$split=explode("\n",$content); //on separe pour chaque saut de ligne
$j=0;
$colonneMatrice=0;
$ligneMatrice=0;
//var_dump($split);
//on separe les auteurs de leur oeuvres et dates
$auteurTitreDate=array();
for($i=0;$i<sizeof($split);$i++){
$auteurTitreDate[$i]=explode(",",$split[$i]); //on separe au virgule
}
//a cause de la derniere virgule, il y a une case vide dans chaque sous tableau donc on le supprime
for($j=0;$j<sizeof($auteurTitreDate);$j++){
for($k=0;$k<sizeof($auteurTitreDate[$j]);$k++){
if($auteurTitreDate[$j][$k]==""){
unset($auteurTitreDate[$j][$k]);
}
}
}
echo "taille de split :",sizeof($split);
echo "<br/> taille de auteurTitreDate : ",sizeof($auteurTitreDate);
//echo $auteurTitreDate[1][0];
//var_dump($auteurTitreDate);
/* for($cpt=1;$cpt<sizeof($auteurTitreDate)-1;$cpt++){
echo $auteurTitreDate[$cpt][0]," cpt= ",$cpt,"<br/>";
}
*/ //juste pour afficher les auteurs
for($cpt=0;$cpt<sizeof($split)-1;$cpt++){
$requete=$bdd->prepare("insert into auteur(nom) values(:auteur)");
$requete->execute(array('auteur'=>$auteurTitreDate[$cpt][0]));
}
echo "<br/>insertion reussie";
fclose($handle);
?>
<p>REUSSI </p>
<?php
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title>Test</title>
</head>
<body>
</body>
</html>
<?php
ini_set('memory_limit', '-1'); //sur windows pour avoir memoire illimitée
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;
}
$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;
foreach ($split as $motCourant){
if(stristr($split[$i],'—')){ //on sait que cest la ligne de l'auteur
$colonneMatrice=0;
$string1 = stristr($split[$i], '—'); //ne recupere que la ligne ou il y a —
$split1= explode(",",$string1); //separe la ligne au niveau des virgules
$j=0;
foreach($split1 as $motCourant){ //affichage avec la séparation au niveau des virgules.
if($j==0){ // si cest l'auteur alors on enleve les accents et on met en majuscules
$split1[$j] = strtoupper(suppr_accents($split1[$j])); //enleve accents et met en MAJ
$matrice[$ligneMatrice][$colonneMatrice] = $split1[$j];
//echo $matrice[$ligneMatrice][$colonneMatrice];
$colonneMatrice++;
}
else{ // sinon affichage normal
if($j==1){
if((preg_match("#^[\" \"][^p]#",$split1[$j])))
$matrice[$ligneMatrice][$colonneMatrice] = $split1[$j];
}
else{
$split1[$j] = suppr_accents($split1[$j]);
//echo $split1[$j];
//"#^[^p][(]?[\" \"]?[1|2|3]?[1-9]?[\" \"]?[JAN|FEV|MAR|AVR|MAI|JUI|AOU|SEP|OCT|NOV|DEC]{0,1}[a-zA-Z]*[^p]?[\" \"]?[1|2]?[0-9]{3}[)]?#i"
if(preg_match("#^[\" \"|\"\"][^p][(]?[\" \"]?[1|2|3]?[1-9]?[\" \"]?[JAN|FEV|MAR|AVR|MAI|JUI|AOU|SEP|OCT|NOV|DEC]{0,1}[a-zA-Z]*[^p]?[\" \"]?[1|2]?[0-9]{3}[)]?#i", $split1[$j])){
$matrice[$ligneMatrice][$colonneMatrice] = $split1[$j];
} //fin regex
else{
$matrice[$ligneMatrice][$colonneMatrice] = null;
}
}
$colonneMatrice++;
}
$j++;
}//fin foreach
$ligneMatrice++;
}
$i++;
}
fclose($handle);
$fichierAuteur = fopen("../../data/lesAuteurs.txt","w+");//ecriture seule +écrit à la fin du fichier
//$fichierAuteur = fopen("lesAuteurs.txt","w+");
$i=0;
for($k=0; $k<$ligneMatrice;$k++){
for($c=0;$c<count($matrice[$k]);$c++){
if(isset($matrice[$k][$c]) && ($matrice[$k][$c]!=null)){
fwrite($fichierAuteur,$matrice[$k][$c].",");
//echo $matrice[$k][0];
}/*else{
echo $i."</br>PROBLEME </br>";
}*/
}
$i++;
fwrite($fichierAuteur,"\n");
}
echo $i;
echo "<br/>";
echo count($matrice[0]); //Permet de savoir combien de colonne il y a
fclose($fichierAuteur);
?>
<?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', 3000);//5min
ini_set('memory_limit', '-1');
$fichierCitations="../../data/Toutes.txt";
$handlerCitations=fopen($fichierCitations,"r");
$content=fread($handlerCitations,filesize($fichierCitations));
/*--------AUTEUR+OEUVRE+DATE--------*/
$fichier="../../data/lesAuteurs.txt";
$handle=fopen($fichier,"r");
$content=fread($handle,filesize($fichier));
$split=explode("\n",$content); //on separe pour chaque saut de ligne
$j=0;
$colonneMatrice=0;
$ligneMatrice=0;
//on separe les auteurs de leur oeuvres et dates
$auteurTitreDate=array();
for($i=0;$i<sizeof($split);$i++){
$auteurTitreDate[$i]=explode(",",$split[$i]); //on separe au virgule
}
//a cause de la derniere virgule, il y a une case vide dans chaque sous tableau donc on le supprime
for($j=0;$j<sizeof($auteurTitreDate);$j++){
for($k=0;$k<sizeof($auteurTitreDate[$j]);$k++){
if($auteurTitreDate[$j][$k]==""){
unset($auteurTitreDate[$j][$k]);
}
if(empty($auteurTitreDate[$j][2])){
$auteurTitreDate[$j][2]=NULL;
}
}
}
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($fichierCitations) as $ligne){
if(!stristr($ligne,"—")){
$pre_citations[]=$ligne;
}
else{
$pre_citations[]=null;
}
}
fclose($handlerCitations);
$citationtableau=array();
$index=0;
//init tableau
for($i=0;$i<=200000;$i++){
$citationtableau[$i]="";
}
foreach ($pre_citations as $courant){
if($courant!=null){
$citationtableau[$index]=$citationtableau[$index].$courant;
}
else{
$index++;
}
}
/*------BDD-INSERTION-------------*/