00001
00012 #include <stdio.h>
00013 #include <iostream>
00014 #include <fstream>
00015 #include "NodoTrieS.hpp"
00016
00017 using namespace std;
00018
00019 void insertaNormalizada(string pal, long ndoc, long p, NodoTrieS &t,
00020 bool normalizaPal)
00021 {
00022 if (pal.size() >= MAXCAD) {
00023 pal = pal.substr(0, MAXCAD);
00024 }
00025
00026 if (p >= 0) {
00027 string r;
00028 if (normalizaPal) {
00029 r = normaliza(pal);
00030 } else {
00031 r = pal;
00032 }
00033 if (r.size()>0) {
00034 t.inserta(r, Pos(ndoc, p));
00035
00036 }
00037 }
00038 }
00039
00041 void leeHTML(const char *na, long ndoc, NodoTrieS &t, bool normalizaPal)
00042 {
00043 ASSERT(na!=NULL && na[0] != '\0' && strlen(na)<FILENAME_MAX);
00044 ASSERT(ndoc >= 0);
00045
00046 string pal = "";
00047
00048
00049 ifstream fs(na);
00050
00051 long p;
00052 p = fs.tellg();
00053 int estado = 0;
00058 do {
00059 char c[2];
00060 fs.read(&c[0], 1);
00061 c[1] = '\0';
00062
00063 if (estado == 0 && *c == '<') {
00064 estado = 2;
00065 insertaNormalizada(pal, ndoc, p + 1, t, normalizaPal);
00066
00067 } else if (estado == 2 && *c == '>') {
00068 estado = 0;
00069 p = fs.tellg();
00070 pal = "";
00071
00072 } else if (estado == 0 && isspace(*c)) {
00073 estado = 1;
00074 insertaNormalizada(pal, ndoc, p, t, normalizaPal);
00075 pal = "";
00076
00077 } else if (estado == 1 && *c == '<') {
00078 estado = 2;
00079
00080 } else if (estado == 1 && !isspace(*c)) {
00081 estado = 0;
00082 p = fs.tellg();
00083 pal = (char *)c;
00084
00085 } else if (estado == 0) {
00086 pal = pal + string((const char *)c);
00087 }
00088 } while (!fs.eof());
00089 fs.close();
00090 insertaNormalizada(pal, ndoc, p, t, normalizaPal);
00091 }
00092
00093
00094