| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 
 |  
package calculFrequences;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
 
import com.sun.org.apache.xerces.internal.parsers.DOMParser;
 
public class ArticleXml {
//	 Champs
	private Document doc;
	//	 Hash Lemme => fréquence
	private Map<String,Integer> lemFreq = new HashMap<String, Integer>(); 
	// Hash Forme => fréquence
	private Map<String,Integer> formFreq = new HashMap<String, Integer>(); 
	// Hash String sn => Objet sn
	private  Map<String,Sn> hash_sn = new HashMap<String, Sn>();
	//  Hash String sn => int poids
	//private Map<String,Integer> snPoids = new HashMap();
	// Nb de mots dans le doc
	private int nbmots;
	// Date
	private String date;
 
	// Constructeur
 
	ArticleXml(){}
	public ArticleXml(String adresse){
		DOMParser parser = new DOMParser();
		try {parser.parse(adresse);}  // <= ligne 39
		catch (SAXException e) {e.printStackTrace();} 
		catch (IOException e) {e.printStackTrace();}
		doc=parser.getDocument();  
		calculeFreq();
		rechercheSn();
		doc=null;
	}
 
 
 
 
	// Méthodes Publiques
 
	public Collection<Sn> getListeSnAsObj(){
		return hash_sn.values();
	}
	public int nbMots(){
		return nbmots;
	}
	public void setDate (String date){
		this.date=date;
	}
	public String getDate(){
		return date;
	}
 
 
	// Méthodes Privées
 
 
	// Fréquences des lemmes et des formes
	private void calculeFreq (){
		NodeList words = doc.getElementsByTagName("w");
		for (int i = 0; i< words.getLength();i++){
			NamedNodeMap attributs= words.item(i).getAttributes();
 
			// valeur de l'attribut lem
			String lemme = attributs.getNamedItem("lem").getNodeValue();
			// -> dans Hash
			if (lemFreq.containsKey(lemme)){lemFreq.put(lemme, (lemFreq.get(lemme)+1));}
			else {lemFreq.put(lemme,1);}
 
			// forme 
			String forme = words.item(i).getTextContent();
			// -> dans Hash
			if (formFreq.containsKey(forme)){formFreq.put(forme, (formFreq.get(forme)+1));}
			else {formFreq.put(forme,1);}
		}
		nbmots=words.getLength();
	}
	//Recherche des Sn
	private void rechercheSn(){
		NodeList sn_list = doc.getElementsByTagName("sn");
		for (int i=0;i<sn_list.getLength();i++){
			// récolte la liste de Mot sous <sn>, construit un objet Sn, le passe dans hash_sn : String => Sn
			toHash(getSn(sn_list.item(i)));
		}
	}
 
 
 
	// Autres méthodes (anciennes fonctions)
	private void toHash (Sn un_sn){
		if (hash_sn.containsKey(un_sn.asString())){
			hash_sn.get(un_sn.asString()).incFreq(1);
		}
		else {
			un_sn.setFreq(1);
			hash_sn.put(un_sn.asString(), un_sn);
		}
	}
 
	private Sn getSn(Node noeud_sn){
 
		List<Mot> liste_mots = new ArrayList<Mot>();
 
		// sn tete
		NodeList cat_filles_sn = noeud_sn.getChildNodes();
		for(int i=0;i<cat_filles_sn.getLength();i++){
			liste_mots.addAll(getMots(cat_filles_sn.item(i)));
		}
 
		// sp extension
		Node pere = noeud_sn.getParentNode();
		NodeList freres = pere.getChildNodes();
		for (int i=0;i<freres.getLength();i++){
			if (freres.item(i).getNodeName().equals("SP")){
 
				// sn tête rajouté dans hash_sn à la volée
				Sn sn_tete = new Sn(liste_mots);
				toHash(sn_tete);
 
				NodeList cat_filles_sp=freres.item(i).getChildNodes();
				for (int j=0;j<cat_filles_sp.getLength();j++){
 
					if(cat_filles_sp.item(j).getNodeName().equals("prep")){
						liste_mots.addAll(getMots(cat_filles_sp.item(j)));
					}
					else if(cat_filles_sp.item(j).getNodeName().equals("SN")){
						NodeList fils_SN= cat_filles_sp.item(j).getChildNodes();
						for (int k=0;k<fils_SN.getLength();k++){
							if(fils_SN.item(k).getNodeName().equals("det")){
								liste_mots.addAll(getMots(fils_SN.item(k)));
							}
							else if(fils_SN.item(k).getNodeName().equals("sn")){
								// appel récursif
								// sn renvoyé : sn tete + extension
								liste_mots.addAll(getSn(fils_SN.item(k)).getMots());
							}
						}
					}
				}
			}
		}
		Sn sn = new Sn(liste_mots);
		return sn;
	}
 
	// fonction traitement d'un noeud de catégorie => renvoie la liste des Mot
	private  List<Mot> getMots(Node noeud_cat){
		List<Mot> mots= new ArrayList<Mot>();
		NodeList words = noeud_cat.getChildNodes();
		for (int i=0;i<words.getLength();i++){
			if (words.item(i).getNodeName().equals("w")){
				NamedNodeMap attributs= words.item(i).getAttributes();
				Mot un_mot = new Mot(
						noeud_cat.getNodeName(),
						words.item(i).getTextContent(),
						attributs.getNamedItem("lem").getNodeValue()
						);
				// Set les fréquences des lemmes et des formes
				un_mot.setFreqLem(lemFreq.get(un_mot.getLem()));
				un_mot.setFreqForm(formFreq.get(un_mot.getForm()));
				mots.add(un_mot);
			}
		}
		return (List<Mot>) mots;
	}
} | 
Partager