Salut,
Je suis sur ce problème depuis un petit moment et pas moyen de trouver la solution par moi-même ou avec l'aide de mon bon ami google !
Alors pour résumer j'essaye de programmer une application qui récupère un fichier .txt (environ 3mo) dans assets et qui lit les lignes une a une de ce fichier (environ 234000).
Chaque ligne se compose d'un mot suivie de sa classe grammaticale et d'un token, tout ca separé par le regex "-". ex: hello-N-T.
Je souhaite grâce à ma classe WriteDictionnary enregistrer cela dans une ArrayMap avec le mot pour clé et la classe grammaticale et le token en valeur.
(Si je fait cela c'est pour que la recherche soit extrêmement rapide ensuite et facile avec la clé ).
Jusque la pas de soucis, ça marche. Mais mon problème c'est que ça marche mal, meme très mal !
Plusieurs dizaine de minutes pour faire le traitement (j'ai pas attendu jusque la fin)...
Qu'est-ce qui ne vas pas dans mon code ?
Ma classe WriteDictionary :
et ma classe Dictionnary qui représente ma map:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
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 package com.model; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import android.util.Log; import com.diana.MainActivity; import com.diana.R; /***************************** IMPORT *****************************/ public class WriteDictionnary { /************ DECLARATIONS ***************/ private Dictionary dico; private MainActivity mainActivity; /************ CONSTRUCTOR ****************/ public WriteDictionnary(Dictionary dico, MainActivity mActivity){ this.dico = dico; this.mainActivity = mActivity; try { FromTxtCreateDictionary(); } catch (IOException e) { e.printStackTrace(); } // if(this.dico.getMap().get("hello").getToken() == null){ } /************** METHODES *****************/ public void FromTxtCreateDictionary() throws java.io.IOException{ String mLine; String separator = mainActivity.getString(R.string.wordType_separator); String[] SplitLine; BufferedReader reader =new BufferedReader(new InputStreamReader(this.mainActivity.getApplicationContext().getAssets().open("dictionary.txt"))); mLine = reader.readLine(); while (mLine != null) { SplitLine = mLine.split(separator); //Add word, wordType, token in the dictionary this.dico.addWordsInMap(SplitLine[0],SplitLine[0],SplitLine[0]); //Read the next line mLine = reader.readLine(); } reader.close(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
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 package com.model; /***************************** IMPORT *****************************/ import android.util.ArrayMap; public class Dictionary { /************ DECLARATIONS ***************/ private ArrayMap<String, WordFunction> map; /************ CONSTRUCTOR ****************/ public Dictionary(){ this.map = new ArrayMap<String, WordFunction>(); } /************** METHODES *****************/ /** * @brief Add received word and his word function (token+type) on the map. * @param word : word received (key). * @param token : token received (value). * @param wordType : type of the word received (value). */ public void addWordsInMap(String word, String wordType, String token){ this.map.put(word,new WordFunction(wordType, token)); } /************* ACCESSORS *************/ public ArrayMap<String, WordFunction> getMap() { return map; } public void setMap(ArrayMap<String, WordFunction> map) { this.map = map; } }
Merci d'avance.
Partager