I have a class
Class TextChunks extends Token {
ArrayList<Token> arrt = new ArrayList<Token>();
}
extent fron class :
class Token {
String s;
int frequency = 1 ;// Tern frequency in TextChunk
}
Now in token i have arraylist token , i want to update attribute frequency of token in Texchunks when have more than one tokens same .
For clearly a give a example :
Texchunks :” in particular in domain and range in some “
So have 8 token : in,particular,in,domain,and,range,in,some
i want update attribute frequency for token : in this example when i get attribute frequency of token “in” must return 3
it mean when i call : get frequency of Texchunks when dislay :
in 3 particular 1 in 3 domain 1 and 1 range 1 in 3 some 1
here my code :
public TextChunks updateFrequencyOfTokenInTextChunks (TextChunks tc) throws CloneNotSupportedException {
TextChunks result = (TextChunks) tc.clone();
for (int i =0 ; i< result.arrt.size() ; i++ ){
int j=i+1;
if (result.arrt.get(i).compareTwoToken(result.arrt.get(j))== true )
{
// help here how to update attribute result.arrt.get(i)
// and result.arrt.get(J) = ++ and
}
}
return tc;
}
Here is method compare two token
public boolean compareTwoToken(Token tk){
if(this.s.toLowerCase().trim().equals(tk.s.toLowerCase()))
return true;
return false;
}
Advertisement
Answer
Your incomplete algorithm doesn’t work because j doesn’t find in previous position of i.
A posible solution could be:
updateFrequencyOfTokenInTextChunksmethod:public static void updateFrequencyOfTokenInTextChunks (TextChunks tc) { Hashtable<String,Integer> visited = new Hashtable<String,Integer>(); for (Token token : tc.arrt){ if (visited.containsKey(token.s)) { token.frequency = visited.get(token.s); } else { int n = count(token, tc); visited.put(token.s, n); token.frequency = n; } } }
My solution doesn’t return any type, because I understand the update (updateFrequencyOfTokenInTextChunks) should modify the parameter (TextChunks tc) and no return a clone.
countauxiliar method:private static int count(Token t, TextChunks tc) { int cont = 0; for (Token token : tc.arrt) { if ( t.compareTwoToken(token) ) { cont++; } } return cont; }
Good luck!