2016-03-28 9 views
0

Ich bin ein Positionsindex mit Hilfe von Java erstellen, die die DocumentID und die Position des Wortes hat zum Beispiel: Wenn wir ein Szenario, das drei Dokumente ein Dokument hatPositional Index Implementierung in JAVA

String [] docs = { "setzt neue Renditen zwischen Absätzen", "Häuser, die in Jersey sind neu", "Hausverkäufe neuen Anstieg im Juli"}

. Der Positionsindex hat wie folgt die Position [word docID: Position des Wortes im Dokument. PS: Jede Phrase im String Array wird als Dokument betrachtet

Wunsch Ausgang put 0 : 0 new 0 : 1 , 1 : 3 , 2 : 2 returns 0 : 2 ....

Hier ist, was ich versucht habe, aber ich bin nicht in der Lage, die Position des Wortes zu bekommen

public static void main(String[] args) { 
    String[] docs = { "put new returns between paragraphs", "houses which are new in jersey", "home sales new rise in july"}; 
    PositionalIndex pi = new PositionalIndex(docs); 
    System.out.print(pi); 

} 

Positional Index

public PositionalIndex(String[] docs) { 

    ArrayList<Integer> docList; 
    docLists = new ArrayList<ArrayList<Integer>>(); 
    termList = new ArrayList<String>(); 
    myDocs = docs; 

    for (int i = 0; i < myDocs.length; i++) { 
     String[] tokens = myDocs[i].split(" "); 
     for (String token : tokens) { 
      if (!termList.contains(token)) {// a new term 
       termList.add(token); 
       docList = new ArrayList<Integer>(); 
       docList.add(new Integer(i)); 
       System.out.println(docList); 
       docLists.add(docList); 
      } else {// an existing term 

       int index = termList.indexOf(token); 
       docList = docLists.get(index); 
       if (!docList.contains(new Integer(i))) { 
        docList.add(new Integer(i)); 
        docLists.set(index, docList); 
       } 
      } 
     } 
    } 
} 

Anzeige

/** 
* Return the string representation of a positional index 
*/ 
public String toString() { 
    String matrixString = new String(); 
    ArrayList<Integer> docList; 
    for (int i = 0; i < termList.size(); i++) { 
     matrixString += String.format("%-15s", termList.get(i)); 
     docList = docLists.get(i); 
     for (int j = 0; j < docList.size(); j++) { 
      matrixString += docList.get(j) + "\t"; 
     } 
     matrixString += "\n"; 
    } 
    return matrixString; 
} 

Antwort

1

Das Problem ist, dass Sie die erweiterte for-Schleife verwenden, die die Indizes verbirgt.

die innere Schleife von

ändern
for (String token : tokens) { 
    ... 

zu

for (int j=0; j<tokens.length;j++) { 
    String token = tokens[j]; 
    ... 

und Sie werden die Position des Wortes haben - j.

Anstelle der ArrayList s Sie derzeit verwenden, um alle Daten, die Sie in Ihrem PositionalIndex müssen zu speichern, schlage ich einen Map<String,Map<Integer,Integer>, wo der Schlüssel des äußeren Map ist der Begriff (Wort) und der Wert ein Map dessen Schlüssel ist der Index eines Dokuments und der Wert ist der Index des Begriffes in diesem Dokument.

+0

Ich zeige mit MatrixString wie kann ich übergeben - j zu dieser Funktion? – shockwave

+0

@shockwave siehe bearbeiten – Eran