Hola amigos, tengo una funcion que toma un parrafo y linea por linea analiza la frecuencia de X palabra. El problema que tengo es que la funcion encuentra TODAS la palabras. Por ejemplo: Si quiero la frecuencia de la palabra "dato" tambien cuenta "datos" o "datos_primarios" "eldato", etc. No es capaz de solo contar "dato"
Código:
double calcAbsoluteFreq(string ¶graph, string &word) {
istringstream tempStr(paragraph);
string lineParagraph;
double frecuAbs=0;
while (getline( tempStr, lineParagraph)) {
// Encontrar la frecuencia absoluta de la palabra en la linea
string::size_type word_pos( 0 );
while ( word_pos!=string::npos ) {
word_pos = lineParagraph.find(word, word_pos);
if ( word_pos != string::npos ) {
frecuAbs++;
// Hacer la siguiente busqueda despues de encontrar la palabra en la misma linea
word_pos += word.length();
}
}
}
return frecuAbs;
}
Pense en detectar si del lado izquierdo de la palabra hay un espacio asi como tambien en el lado derecho de la palabra pero me da el error: std::out_of_range.
Código:
while (getline( tempStr, lineParagraph)) {
string::size_type word_pos( 0 );
while ( word_pos!=string::npos ) {
word_pos = lineParagraph.find(word, word_pos);
if ( word_pos != string::npos ) {
if ((lineParagraph.substr(word_pos-1)==" ") &&
(lineParagraph.substr(word_pos+word.length())==" ")) {
frecuAbs++;
}
word_pos += word.length();
}
}
}
Sinceramente no se que pasa ya que si intento ver que hay en esa posición con un cout, el espacio esta allí.. Alguien podría darme alguna luz???...
Gracias de ante mano!!!...