Colección de citas famosas - Colección de máximas - ¿Cuál de los siguientes no es un operador utilizado en los motores de búsqueda?

¿Cuál de los siguientes no es un operador utilizado en los motores de búsqueda?

Con los comentarios anteriores, podemos saber que después de preparar las palabras clave de consulta y los archivos del diccionario, ingresaremos a la etapa de segmentación de palabras clave del usuario

//En TSESearch.cpp:

[csharp] ver copia simple

CHzSeg iHzSeg; //incluye ChSeg/HzSeg.h

//

iQuery.m_sSegQuery = iHzSeg. SegmentSentenceMM(iDict, iQuery.m_sQuery); //Dividimos la variable de consulta obtenida en "I/love/you/format"

vector vecTerm

iQuery.ParseQuery(vecTerm); //Coloca las palabras clave separadas por "/" en un contenedor vectorial una por una

set setRelevantRst

iQuery. GetRelevantRst(vecTerm, mapBuckets, setRelevantRst);

gettimeofday(&end_tv,&tz

// fin de la búsqueda

//Búsqueda completada

<); p>[php] ver copia simple

Mira este método en CHzSeg

[php] ver copia simple

//ChSeg/HzSeg.h

[html] ver copia simple

/**

* Instrucciones de traducción del programa

* Purifica aún más los datos y convierte caracteres chinos

* @access public

* @param CDict, cadena Descripción del parámetro en caracteres chinos: diccionario, cadena de consulta

* @return cadena 0

*/

// procesar una oración antes de la segmentación

//procesar una oración antes de la segmentación

string CHZSeg::SegmentSentenceMM (CDict &dict, string s1) const

{

string s2="";

unsigned int i,len

while (!s1.empty())

p>

{

unsigned char ch=(unsigned char) s1[0];

if(ch<128)

{ / / trato con ASCII

i=1

len = s1.size();

mientras (i

f="" Puntuación china y otros caracteres no chinos="" i="0;" len="s1.length();">=161)

&& (!( (carácter sin firmar)s1[i]==161 && ((carácter sin firmar)s1[i+1]>=162 && (carácter sin firmar)s1[i+1]<=168)))

&& ( !((carácter sin firmar)s1[i]==161 && ((carácter sin firmar)s1[i+1]>=171 && (carácter sin firmar)s1[i+1]<=191)))

&& (!((carácter sin firmar)s1[i]==163 && ((carácter sin firmar)s1[i+1]==172 || (carácter sin firmar)s1[i+1]==161)

|| (carácter sin firmar)s1[i+1]==168 || (carácter sin firmar)s1[i+1]==169 || (carácter sin firmar)s1[i+1]= =186

|| (carácter sin firmar)s1[i+1]==187 || (carácter sin firmar)s1[i+1]==191)))

{

i=i+2; // Supongamos que no hay medio carácter chino

}

if (i==0) i=i+2

// No procesa espacios chinos

if (!(ch==161 && (unsigned char)s1[1]==161))

{

if (i <= s1.size()) // yhf

// Otros caracteres de doble byte no chinos se pueden generar continuamente

s2 += s1.substr (0, i) + SEPARADOR;

else break; // yhf

}

if (i <= s1. tamaño()) // yhf

s1=s1.substr(i);

else break; //yhf

continuar; p> }

}

// Lo siguiente procesa cadenas de caracteres chinos

i = 2;

len = s1.length();

mientras(i=176)

// mientras(i =128 && (carácter sin firmar)s1[i]!=161)

i+=2

s2+=SegmentHzStrMM(dict, s1.substr(0,i; ));

if (i <= len) // yhf

s1=s1.substr(i);

else break; /p>

}

return s2;

}

[html] ver copia simple

[html] ver copia simple

//Query.cpp

[html] ver copia simple

/** 

* Instrucciones de traducción del programa

* Coloque las palabras clave separadas por "/" en un contenedor vectorial una por una

*

* @access public

* @param vector Descripción en caracteres chinos del parámetro: contenedor de vectores

* @return void

*/

void CQuery::ParseQuery(vector &vecTerm)

{

string::size_type idx

while ( (idx; = m_sSegQuery.find("/ ")) != cadena::npos ) {

vecTerm.push_back(m_sSegQuery.substr(0,idx));

m_sSegQuery = m_sSegQuery. substr(idx+3);

}

}

 

/** 

* Instrucciones de traducción del programa

* Consulta de análisis de correlación, construcción del conjunto de resultados setRelevantRst //El cuello de botella

*

* @access public

p >

* @param vector conjunto de mapas Descripción de parámetros en caracteres chinos: el usuario envía la clave

Segmentación de palabras, mapeo de índice invertido, conjunto de resultados de correlación

* @return string 0

*/

bool CQuery::GetRelevantRst

(

vector &vecTerm,

mapa &mapBuckets,

set &setRelevantRst

) const

{

set setSRst

bool bFirst=true

vector::iterador itTerm = vecTerm.begin();

for ( ; itTerm != vecTerm.end(); ++itTerm )

{

setSRst.clear();

copiar(setRelevantRst.begin(), setRelevantRst.end(), inserter(setSRst,setSRst.begin())); mapa mapRstDoc

string docid

int doccnt;

map::iterator itBuckets = mapBuckets.find(*itTerm);

if (itBuckets != mapBuckets.end())

{

cadena strBucket = (*itBuckets).segundo

cadena: :size_type; idx;

idx = strBucket.find_first_not_of(" ");

strBucket = strBucket.substr(idx);

mientras ( (idx = strBucket .find) (" ")) != cadena::npos )

{

docid = strBucket.substr(0,idx);

doccnt = 0 ; /p>

if (docid.empty()) continuar;

map::iterator it = mapRstDoc.find(docid);

if ( it != mapRstDoc. fin() )

{

doccnt = (*it).segundo + 1;

mapRstDoc.erase(it);

}

mapRstDoc. insert( pair(docid,doccnt) );

strBucket = strBucket.substr(idx+1);

}

// recuerda el último

docid = strBucket;

doccnt = 0;

map::iterator it = mapRstDoc.find(docid); it != mapRstDoc.end() )

{

doccnt = (*it).segundo + 1

mapRstDoc.erase(it); /p>

}

mapRstDoc.insert( pair(docid,doccnt)

}

// ordenar por frecuencia de término

multimapa > nuevoRstDoc;

mapa::iterador it0 = mapRstDoc.begin();

for ( ; it0 != mapRstDoc.end(); ++it0 ) {

newRstDoc.insert( pair((*it0).segundo,(*it0).first)

}

multimap::iterator itNewRstDoc. = newRstDoc.begin();

setRelevantRst.clear();

para ( ; itNewRstDoc != newRstDoc.end(); ++itNewRstDoc ){

cadena docid = (*itNewRstDoc).segundo;

if (bFirst==true) {

setRelevantRst.insert(docid); /p>

}

if ( setSRst.find(docid) != setSRst.end() ){

setRel

evantRst.insert(docid);

}

}

//cout << "setRelevantRst.size(): " << setRelevantRst.size() << "
";

bFirst = falso;

}

devuelve verdadero; /p>

Lo siguiente es la realidad