Querying the Document

  • + 0 comments
    char* kth_word_in_mth_sentence_of_nth_paragraph(char**** document, int k, int m, int n) {
        return document[n-1][m-1][k-1];
    }
    
    char** kth_sentence_in_mth_paragraph(char**** document, int k, int m) { 
        return document[m-1][k-1];
    }
    
    char*** kth_paragraph(char**** document, int k) {
        return document[k-1];
    }
    
    char**** get_document(char* text) {
        int i=0,j=0,k=0,n_para = 0, n_sent[MAX_PARAGRAPHS] = {0}, n_word[MAX_PARAGRAPHS][MAX_CHARACTERS] = {{0}};
        char ****doc = NULL;
        text[strlen(text)] = '\n';
        text[strlen(text)] = '\0';
        //printf("%s\n", text);
        while(text[i] != '\0') {
            if(text[i] == ' ') {
                n_word[n_para][n_sent[n_para]]++;
                i++;
                continue;
            }
            else if(text[i] == '.') {
                n_word[n_para][n_sent[n_para]]++;
                n_sent[n_para]++;
                i++;
                continue;
            }
            else if(text[i] == '\n') {
                n_para++;
                i++;
            } else {
                i++;
            }
        }
        doc = (char ****)calloc(n_para, sizeof(char ***));
        char *str = text;
        char *reserve = NULL;
        for(i = 0; i < n_para; i++) {
            *(doc+i) = (char ***) calloc(n_sent[i], sizeof(char **));
            //printf("n_sent[%d] = %d\n", i, n_sent[i]);
            for(j = 0; j < n_sent[i]; j++) {
                *(*(doc+i)+j) = (char **) calloc(n_word[i][j], sizeof(char *));
                //printf("n_word[%d][%d] = %d\n", i, j, n_word[i][j]);
                for(k = 0; k < n_word[i][j]; k++) {
                    *(*(*(doc+i)+j)+k) = (char *)calloc(100, sizeof(char));
                    doc[i][j][k] = strtok_r(str, " .\n", &reserve);
                    if(i == 0 && j == 0 && k == 0)
                        str = NULL;
                }
            }
        }
        return doc;
    }