Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/02/2012, 14:02
Avatar de Der_Gregor
Der_Gregor
 
Fecha de Ingreso: enero-2012
Ubicación: España
Mensajes: 9
Antigüedad: 12 años, 2 meses
Puntos: 0
Funcion para encontrar la frecuencia absoluta en parrafos

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 &paragraph, 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!!!...