青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

學(xué)著站在巨人的肩膀上

金融數(shù)學(xué),InformationSearch,Compiler,OS,

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  12 隨筆 :: 0 文章 :: 8 評論 :: 0 Trackbacks

有前面注釋我們可以知道查詢關(guān)鍵字和字典文件準(zhǔn)備好好后,將進(jìn)入用戶關(guān)鍵字分詞階段

//TSESearch.cpp中:

view plaincopy to clipboardprint?
CHzSeg iHzSeg;      //include ChSeg/HzSeg.h  
 
//  
iQuery.m_sSegQuery = iHzSeg.SegmentSentenceMM(iDict, iQuery.m_sQuery);  //將get到的查詢變量分詞分成 "我/        愛/      你們/ 的/      格式"  
 
vector<STRING></STRING> vecTerm;  
iQuery.ParseQuery(vecTerm);     //將以"/"劃分開的關(guān)鍵字一一順序放入一個(gè)向量容器中  
 
set<STRING></STRING> setRelevantRst;   
iQuery.GetRelevantRst(vecTerm, mapBuckets, setRelevantRst);   
 
gettimeofday(&end_tv,&tz);  
// search end  
//搜索完畢 

 CHzSeg iHzSeg;  //include ChSeg/HzSeg.h

 //
 iQuery.m_sSegQuery = iHzSeg.SegmentSentenceMM(iDict, iQuery.m_sQuery); //將get到的查詢變量分詞分成 "我/  愛/  你們/ 的/  格式"
 
 vector vecTerm;
 iQuery.ParseQuery(vecTerm);  //將以"/"劃分開的關(guān)鍵字一一順序放入一個(gè)向量容器中
 
 set setRelevantRst;
 iQuery.GetRelevantRst(vecTerm, mapBuckets, setRelevantRst);
 
 gettimeofday(&end_tv,&tz);
 // search end
 //搜索完畢view plaincopy to clipboardprint?
看CHzSeg 中的這個(gè)方法 

看CHzSeg 中的這個(gè)方法view plaincopy to clipboardprint?
//ChSeg/HzSeg.h 

//ChSeg/HzSeg.hview plaincopy to clipboardprint?
/**  
 * 程序翻譯說明  
 * 進(jìn)一步凈化數(shù)據(jù),轉(zhuǎn)換漢字  
 * @access  public  
 * @param   CDict, string 參數(shù)的漢字說明:字典,查詢字符串  
 * @return  string 0  
 */  
// process a sentence before segmentation  
//在分詞前處理句子  
string CHzSeg::SegmentSentenceMM (CDict &dict, string s1) const  
{  
    string s2="";  
    unsigned int i,len;  
 
    while (!s1.empty())   
    {  
        unsigned char ch=(unsigned char) s1[0];  
        if(ch<128)   
        { // deal with ASCII  
            i=1;  
            len = s1.size();  
            while (i<LEN len="s1.length();" i="0;" 中文標(biāo)點(diǎn)等非漢字字符="" if="" else="" yhf="" s1="s1.substr(i);" by="" added="" ch="=13)" s2="" cr=""></LEN>=161)  
              && (!((unsigned char)s1[i]==161 && ((unsigned char)s1[i+1]>=162 && (unsigned char)s1[i+1]<=168)))  
              && (!((unsigned char)s1[i]==161 && ((unsigned char)s1[i+1]>=171 && (unsigned char)s1[i+1]<=191)))  
              && (!((unsigned char)s1[i]==163 && ((unsigned char)s1[i+1]==172 || (unsigned char)s1[i+1]==161)   
              || (unsigned char)s1[i+1]==168 || (unsigned char)s1[i+1]==169 || (unsigned char)s1[i+1]==186  
              || (unsigned char)s1[i+1]==187 || (unsigned char)s1[i+1]==191)))   
                {   
                    ii=i+2; // 假定沒有半個(gè)漢字  
                }  
 
                if (i==0) ii=i+2;  
 
                // 不處理中文空格  
                if (!(ch==161 && (unsigned char)s1[1]==161))   
                {   
                    if (i <= s1.size())  // yhf  
                        // 其他的非漢字雙字節(jié)字符可能連續(xù)輸出  
                        s2 += s1.substr(0, i) + SEPARATOR;   
                    else break; // yhf  
                }  
 
                if (i <= s1.size())  // yhf  
                    s1s1=s1.substr(i);  
                else break;     //yhf  
 
                continue;  
            }  
        }  
      
 
    // 以下處理漢字串  
 
        i = 2;  
        len = s1.length();  
 
        while(i<LEN></LEN>=176)   
//    while(i<LEN></LEN>=128 && (unsigned char)s1[i]!=161)  
            i+=2;  
 
        s2+=SegmentHzStrMM(dict, s1.substr(0,i));  
 
        if (i <= len)    // yhf  
            s1s1=s1.substr(i);  
        else break; // yhf  
    }  
 
    return s2;  

/**
 * 程序翻譯說明
 * 進(jìn)一步凈化數(shù)據(jù),轉(zhuǎn)換漢字
 * @access  public
 * @param   CDict, string 參數(shù)的漢字說明:字典,查詢字符串
 * @return  string 0
 */
// process a sentence before segmentation
//在分詞前處理句子
string CHzSeg::SegmentSentenceMM (CDict &dict, string s1) const
{
 string s2="";
 unsigned int i,len;

 while (!s1.empty())
 {
  unsigned char ch=(unsigned char) s1[0];
  if(ch<128)
  { // deal with ASCII
   i=1;
   len = s1.size();
   while (i=161)
              && (!((unsigned char)s1[i]==161 && ((unsigned char)s1[i+1]>=162 && (unsigned char)s1[i+1]<=168)))
              && (!((unsigned char)s1[i]==161 && ((unsigned char)s1[i+1]>=171 && (unsigned char)s1[i+1]<=191)))
              && (!((unsigned char)s1[i]==163 && ((unsigned char)s1[i+1]==172 || (unsigned char)s1[i+1]==161)
              || (unsigned char)s1[i+1]==168 || (unsigned char)s1[i+1]==169 || (unsigned char)s1[i+1]==186
              || (unsigned char)s1[i+1]==187 || (unsigned char)s1[i+1]==191)))
    {
     i=i+2; // 假定沒有半個(gè)漢字
    }

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

    // 不處理中文空格
    if (!(ch==161 && (unsigned char)s1[1]==161))
    {
     if (i <= s1.size()) // yhf
      // 其他的非漢字雙字節(jié)字符可能連續(xù)輸出
      s2 += s1.substr(0, i) + SEPARATOR;
     else break; // yhf
    }

    if (i <= s1.size()) // yhf
     s1=s1.substr(i);
    else break;  //yhf

    continue;
   }
  }
   

    // 以下處理漢字串

  i = 2;
  len = s1.length();

  while(i=176)
//    while(i=128 && (unsigned char)s1[i]!=161)
   i+=2;

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

  if (i <= len) // yhf
   s1=s1.substr(i);
  else break; // yhf
 }

 return s2;
}view plaincopy to clipboardprint?
  

 view plaincopy to clipboardprint?
//Query.cpp 

//Query.cppview plaincopy to clipboardprint?
<PRE class=csharp name="code">/**  
 * 程序翻譯說明  
 * 將以"/"劃分開的關(guān)鍵字一一順序放入一個(gè)向量容器中  
 *  
 * @access  public  
 * @param   vector<STRING></STRING> 參數(shù)的漢字說明:向量容器  
 * @return  void  
 */  
void CQuery::ParseQuery(vector<STRING></STRING> &vecTerm)  
{  
    string::size_type idx;   
    while ( (idx = m_sSegQuery.find("/  ")) != string::npos ) {   
        vecTerm.push_back(m_sSegQuery.substr(0,idx));   
        m_sSegQuerym_sSegQuery = m_sSegQuery.substr(idx+3);   
    }  
}  
</PRE> 
<PRE class=csharp name="code"> </PRE> 
<PRE class=csharp name="code"><PRE class=csharp name="code">/**  
 * 程序翻譯說明  
 * 相關(guān)性分析查詢,構(gòu)造結(jié)果集合setRelevantRst //瓶頸所在  
 *  
 * @access  public  
 * @param   vector<STRING></STRING> map set<STRING></STRING> 參數(shù)的漢字說明: 用戶提交關(guān)鍵字的分詞組,倒排索引映射,相關(guān)性結(jié)果集合  
 * @return  string 0  
 */  
bool CQuery::GetRelevantRst  
(  
    vector<STRING></STRING> &vecTerm,   
    map &mapBuckets,   
    set<STRING></STRING> &setRelevantRst  
) const  
{  
    set<STRING></STRING> setSRst;  
 
    bool bFirst=true;  
    vector<STRING></STRING>::iterator itTerm = vecTerm.begin();  
 
    for ( ; itTerm != vecTerm.end(); ++itTerm )  
    {  
 
        setSRst.clear();  
        copy(setRelevantRst.begin(), setRelevantRst.end(), inserter(setSRst,setSRst.begin()));  
 
        map mapRstDoc;  
        string docid;  
        int doccnt;  
 
        map::iterator itBuckets = mapBuckets.find(*itTerm);  
        if (itBuckets != mapBuckets.end())  
        {  
            string strBucket = (*itBuckets).second;  
            string::size_type idx;  
            idx = strBucket.find_first_not_of(" ");  
            strBucketstrBucket = strBucket.substr(idx);  
 
            while ( (idx = strBucket.find(" ")) != string::npos )   
            {  
                docid = strBucket.substr(0,idx);  
                doccnt = 0;  
 
                if (docid.empty()) continue;  
 
                map::iterator it = mapRstDoc.find(docid);  
                if ( it != mapRstDoc.end() )  
                {  
                    doccnt = (*it).second + 1;  
                    mapRstDoc.erase(it);  
                }  
                mapRstDoc.insert( pair(docid,doccnt) );  
 
                strBucketstrBucket = strBucket.substr(idx+1);  
            }  
 
            // remember the last one  
            docid = strBucket;  
            doccnt = 0;  
            map::iterator it = mapRstDoc.find(docid);  
            if ( it != mapRstDoc.end() )  
            {  
                doccnt = (*it).second + 1;  
                mapRstDoc.erase(it);  
            }  
            mapRstDoc.insert( pair(docid,doccnt) );  
        }  
 
        // sort by term frequencty  
        multimap > newRstDoc;  
        map::iterator it0 = mapRstDoc.begin();  
        for ( ; it0 != mapRstDoc.end(); ++it0 ){  
            newRstDoc.insert( pair((*it0).second,(*it0).first) );  
        }  
 
        multimap::iterator itNewRstDoc = newRstDoc.begin();  
        setRelevantRst.clear();  
        for ( ; itNewRstDoc != newRstDoc.end(); ++itNewRstDoc ){  
            string docid = (*itNewRstDoc).second;  
 
            if (bFirst==true) {  
                setRelevantRst.insert(docid);  
                continue;  
            }  
 
            if ( setSRst.find(docid) != setSRst.end() ){      
                setRelevantRst.insert(docid);  
            }  
        }  
 
        //cout << "setRelevantRst.size(): " << setRelevantRst.size() << "<BR>";  
        bFirst = false;  
    }  
    return true;  
}</PRE> 
</PRE> 
接下來的就是現(xiàn)實(shí)了,前面都只是處理數(shù)據(jù)得到 setRelevantRst 這個(gè)查詢結(jié)構(gòu)集合,這里就不多說了下面就和php之類的腳本語言差不多,格式化結(jié)果集合并顯示出來。 

view plaincopy to clipboardprint?/**   * 程序翻譯說明   * 將以"/"劃分開的關(guān)鍵字一一順序放入一個(gè)向量容器中   *   * @access  public   * @param   vector<STRING></STRING> 參數(shù)的漢字說明:向量容器   * @return  void   */  void CQuery::ParseQuery(vector<STRING></STRING> &vecTerm)   {       string::size_type idx;        while ( (idx = m_sSegQuery.find("/  ")) != string::npos ) {            vecTerm.push_back(m_sSegQuery.substr(0,idx));            m_sSegQuery = m_sSegQuery.substr(idx+3);        }   }  /**
 * 程序翻譯說明
 * 將以"/"劃分開的關(guān)鍵字一一順序放入一個(gè)向量容器中
 *
 * @access  public
 * @param   vector 參數(shù)的漢字說明:向量容器
 * @return  void
 */
void CQuery::ParseQuery(vector &vecTerm)
{
 string::size_type idx;
 while ( (idx = m_sSegQuery.find("/  ")) != string::npos ) {
  vecTerm.push_back(m_sSegQuery.substr(0,idx));
  m_sSegQuery = m_sSegQuery.substr(idx+3);
 }
}

view plaincopy to clipboardprint?   
view plaincopy to clipboardprint?<PRE class=csharp name="code">/**   * 程序翻譯說明   * 相關(guān)性分析查詢,構(gòu)造結(jié)果集合setRelevantRst //瓶頸所在   *   * @access  public   * @param   vector<STRING></STRING> map set<STRING></STRING> 參數(shù)的漢字說明: 用戶提交關(guān)鍵字的分詞組,倒排索引映射,相關(guān)性結(jié)果集合   * @return  string 0   */  bool CQuery::GetRelevantRst   (       vector<STRING></STRING> &vecTerm,        map &mapBuckets,        set<STRING></STRING> &setRelevantRst   ) const  {       set<STRING></STRING> setSRst;         bool bFirst=true;       vector<STRING></STRING>::iterator itTerm = vecTerm.begin();         for ( ; itTerm != vecTerm.end(); ++itTerm )       {             setSRst.clear();           copy(setRelevantRst.begin(), setRelevantRst.end(), inserter(setSRst,setSRst.begin()));             map mapRstDoc;           string docid;           int doccnt;             map::iterator itBuckets = mapBuckets.find(*itTerm);           if (itBuckets != mapBuckets.end())           {               string strBucket = (*itBuckets).second;               string::size_type idx;               idx = strBucket.find_first_not_of(" ");               strBucket = strBucket.substr(idx);                 while ( (idx = strBucket.find(" ")) != string::npos )                {                   docid = strBucket.substr(0,idx);                   doccnt = 0;                     if (docid.empty()) continue;                     map::iterator it = mapRstDoc.find(docid);                   if ( it != mapRstDoc.end() )                   {                       doccnt = (*it).second + 1;                       mapRstDoc.erase(it);                   }                   mapRstDoc.insert( pair(docid,doccnt) );                     strBucket = strBucket.substr(idx+1);               }                 // remember the last one               docid = strBucket;               doccnt = 0;               map::iterator it = mapRstDoc.find(docid);               if ( it != mapRstDoc.end() )               {                   doccnt = (*it).second + 1;                   mapRstDoc.erase(it);               }               mapRstDoc.insert( pair(docid,doccnt) );           }             // sort by term frequencty           multimap > newRstDoc;           map::iterator it0 = mapRstDoc.begin();           for ( ; it0 != mapRstDoc.end(); ++it0 ){               newRstDoc.insert( pair((*it0).second,(*it0).first) );           }             multimap::iterator itNewRstDoc = newRstDoc.begin();           setRelevantRst.clear();           for ( ; itNewRstDoc != newRstDoc.end(); ++itNewRstDoc ){               string docid = (*itNewRstDoc).second;                 if (bFirst==true) {                   setRelevantRst.insert(docid);                   continue;               }                 if ( setSRst.find(docid) != setSRst.end() ){                       setRelevantRst.insert(docid);               }           }             //cout << "setRelevantRst.size(): " << setRelevantRst.size() << "<BR>";           bFirst = false;       }       return true;   }</PRE>  view plaincopy to clipboardprint?/**   * 程序翻譯說明   * 相關(guān)性分析查詢,構(gòu)造結(jié)果集合setRelevantRst //瓶頸所在   *   * @access  public   * @param   vector<STRING></STRING> map set<STRING></STRING> 參數(shù)的漢字說明: 用戶提交關(guān)鍵字的分詞組,倒排索引映射,相關(guān)性結(jié)果集合   * @return  string 0   */  bool CQuery::GetRelevantRst   (       vector<STRING></STRING> &vecTerm,        map &mapBuckets,        set<STRING></STRING> &setRelevantRst   ) const  {       set<STRING></STRING> setSRst;         bool bFirst=true;       vector<STRING></STRING>::iterator itTerm = vecTerm.begin();         for ( ; itTerm != vecTerm.end(); ++itTerm )       {             setSRst.clear();           copy(setRelevantRst.begin(), setRelevantRst.end(), inserter(setSRst,setSRst.begin()));             map mapRstDoc;           string docid;           int doccnt;             map::iterator itBuckets = mapBuckets.find(*itTerm);           if (itBuckets != mapBuckets.end())           {               string strBucket = (*itBuckets).second;               string::size_type idx;               idx = strBucket.find_first_not_of(" ");               strBucket = strBucket.substr(idx);                 while ( (idx = strBucket.find(" ")) != string::npos )                {                   docid = strBucket.substr(0,idx);                   doccnt = 0;                     if (docid.empty()) continue;                     map::iterator it = mapRstDoc.find(docid);                   if ( it != mapRstDoc.end() )                   {                       doccnt = (*it).second + 1;                       mapRstDoc.erase(it);                   }                   mapRstDoc.insert( pair(docid,doccnt) );                     strBucket = strBucket.substr(idx+1);               }                 // remember the last one               docid = strBucket;               doccnt = 0;               map::iterator it = mapRstDoc.find(docid);               if ( it != mapRstDoc.end() )               {                   doccnt = (*it).second + 1;                   mapRstDoc.erase(it);               }               mapRstDoc.insert( pair(docid,doccnt) );           }             // sort by term frequencty           multimap > newRstDoc;           map::iterator it0 = mapRstDoc.begin();           for ( ; it0 != mapRstDoc.end(); ++it0 ){               newRstDoc.insert( pair((*it0).second,(*it0).first) );           }             multimap::iterator itNewRstDoc = newRstDoc.begin();           setRelevantRst.clear();           for ( ; itNewRstDoc != newRstDoc.end(); ++itNewRstDoc ){               string docid = (*itNewRstDoc).second;                 if (bFirst==true) {                   setRelevantRst.insert(docid);                   continue;               }                 if ( setSRst.find(docid) != setSRst.end() ){                       setRelevantRst.insert(docid);               }           }             //cout << "setRelevantRst.size(): " << setRelevantRst.size() << "<BR>";           bFirst = false;       }       return true;   }  /**
 * 程序翻譯說明
 * 相關(guān)性分析查詢,構(gòu)造結(jié)果集合setRelevantRst //瓶頸所在
 *
 * @access  public
 * @param   vector map set 參數(shù)的漢字說明: 用戶提交關(guān)鍵字的分詞組,倒排索引映射,相關(guān)性結(jié)果集合
 * @return  string 0
 */
bool CQuery::GetRelevantRst
(
 vector &vecTerm,
 map &mapBuckets,
 set &setRelevantRst
) const
{
 set setSRst;

 bool bFirst=true;
 vector::iterator itTerm = vecTerm.begin();

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

  setSRst.clear();
  copy(setRelevantRst.begin(), setRelevantRst.end(), inserter(setSRst,setSRst.begin()));

  map mapRstDoc;
  string docid;
  int doccnt;

  map::iterator itBuckets = mapBuckets.find(*itTerm);
  if (itBuckets != mapBuckets.end())
  {
   string strBucket = (*itBuckets).second;
   string::size_type idx;
   idx = strBucket.find_first_not_of(" ");
   strBucket = strBucket.substr(idx);

   while ( (idx = strBucket.find(" ")) != string::npos )
   {
    docid = strBucket.substr(0,idx);
    doccnt = 0;

    if (docid.empty()) continue;

    map::iterator it = mapRstDoc.find(docid);
    if ( it != mapRstDoc.end() )
    {
     doccnt = (*it).second + 1;
     mapRstDoc.erase(it);
    }
    mapRstDoc.insert( pair(docid,doccnt) );

    strBucket = strBucket.substr(idx+1);
   }

   // remember the last one
   docid = strBucket;
   doccnt = 0;
   map::iterator it = mapRstDoc.find(docid);
   if ( it != mapRstDoc.end() )
   {
    doccnt = (*it).second + 1;
    mapRstDoc.erase(it);
   }
   mapRstDoc.insert( pair(docid,doccnt) );
  }

  // sort by term frequencty
  multimap > newRstDoc;
  map::iterator it0 = mapRstDoc.begin();
  for ( ; it0 != mapRstDoc.end(); ++it0 ){
   newRstDoc.insert( pair((*it0).second,(*it0).first) );
  }

  multimap::iterator itNewRstDoc = newRstDoc.begin();
  setRelevantRst.clear();
  for ( ; itNewRstDoc != newRstDoc.end(); ++itNewRstDoc ){
   string docid = (*itNewRstDoc).second;

   if (bFirst==true) {
    setRelevantRst.insert(docid);
    continue;
   }

   if ( setSRst.find(docid) != setSRst.end() ){ 
    setRelevantRst.insert(docid);
   }
  }

  //cout << "setRelevantRst.size(): " << setRelevantRst.size() << "";
  bFirst = false;
 }
 return true;
}

接下來的就是現(xiàn)實(shí)了,前面都只是處理數(shù)據(jù)得到 setRelevantRst 這個(gè)查詢結(jié)構(gòu)集合,這里就不多說了下面就和php之類的腳本語言差不多,格式化結(jié)果集合并顯示出來。
//TSESearch.cpp

view plaincopy to clipboardprint?
//下面開始顯示  
    CDisplayRst iDisplayRst;   
    iDisplayRst.ShowTop();   
 
    float used_msec = (end_tv.tv_sec-begin_tv.tv_sec)*1000   
        +((float)(end_tv.tv_usec-begin_tv.tv_usec))/(float)1000;   
 
    iDisplayRst.ShowMiddle(iQuery.m_sQuery,used_msec,   
            setRelevantRst.size(), iQuery.m_iStart);  
 
    iDisplayRst.ShowBelow(vecTerm,setRelevantRst,vecDocIdx,iQuery.m_iStart);

 

posted on 2009-12-10 22:53 學(xué)者站在巨人的肩膀上 閱讀(1004) 評論(0)  編輯 收藏 引用 所屬分類: 中文文本信息處理
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产成人精品视频| 亚洲精品乱码久久久久久久久| 在线亚洲激情| 亚洲乱码国产乱码精品精| 欧美在线观看日本一区| 亚洲综合成人婷婷小说| 亚洲深夜福利视频| 亚洲一区成人| 欧美在线视频一区二区| 噜噜噜91成人网| 亚洲国内自拍| 中国女人久久久| 久久精品成人一区二区三区| 免费在线亚洲| 国产精品国产三级国产专播精品人| 国产精品日日做人人爱| 精品动漫3d一区二区三区| 亚洲人成绝费网站色www| 亚洲一区二区三区免费视频| 久久久久se| 亚洲精品视频在线播放| 欧美在线视频网站| 欧美日韩综合久久| 狠狠狠色丁香婷婷综合久久五月 | 亚洲图片自拍偷拍| 久久久久一区二区三区| 91久久久一线二线三线品牌| 亚洲一级黄色av| 蜜乳av另类精品一区二区| 国产精品电影观看| 亚洲黄色小视频| 欧美在线视频日韩| 日韩天堂av| 欧美成人久久| 黄色亚洲精品| 欧美在线影院| 亚洲网站视频福利| 欧美紧缚bdsm在线视频| 国内精品伊人久久久久av一坑| 亚洲一区二区精品| 亚洲国产女人aaa毛片在线| 亚洲永久免费| 欧美无砖砖区免费| 日韩网站在线| 亚洲国产高清在线观看视频| 欧美在线视频播放| 国产揄拍国内精品对白| 欧美一区二区三区的| 99精品视频网| 欧美日韩在线亚洲一区蜜芽| 亚洲国产精品久久久久| 久久视频免费观看| 欧美制服丝袜| 国产亚洲一区精品| 久久精品欧洲| 久久av资源网站| 国产一区在线观看视频| 久久久久91| 久久超碰97人人做人人爱| 欧美精品乱人伦久久久久久| 国产九区一区在线| 亚洲一区二区在| 日韩午夜一区| 欧美日韩亚洲网| 一区二区三区日韩| 一本色道久久综合亚洲精品婷婷| 欧美精品一区二区精品网| 亚洲精品乱码久久久久久蜜桃91| 亚洲丰满少妇videoshd| 欧美mv日韩mv国产网站| 亚洲精品一区二区三区不| 亚洲欧洲日韩女同| 欧美日韩三区四区| 午夜天堂精品久久久久 | 在线一区二区三区四区五区| 欧美色图麻豆| 校园激情久久| 久久精品一级爱片| 亚洲韩国青草视频| 日韩网站在线| 国产女人18毛片水18精品| 久久国产免费| 裸体丰满少妇做受久久99精品 | 91久久精品一区二区别| 亚洲精品免费观看| 国产精品久久久久久久久| 久久爱91午夜羞羞| 狼狼综合久久久久综合网 | 久久免费视频在线观看| 久久一区二区三区国产精品| 亚洲美女尤物影院| 亚洲永久在线观看| 在线日本高清免费不卡| 亚洲精品小视频在线观看| 国产九区一区在线| 亚洲欧洲在线观看| 国产中文一区| 亚洲视频一区二区免费在线观看| 国产在线视频欧美| 夜夜嗨av一区二区三区| 在线成人av网站| 亚洲性图久久| 亚洲精品日韩综合观看成人91| 亚洲午夜精品国产| 日韩午夜激情av| 久久天天狠狠| 欧美在线观看视频一区二区| 欧美激情视频在线播放| 久久婷婷国产综合国色天香| 欧美日韩亚洲在线| 亚洲高清av| 一区免费观看视频| 亚洲欧美清纯在线制服| 一本久久知道综合久久| 久久综合九色综合久99| 久久久99免费视频| 国产精品毛片大码女人| 亚洲第一区色| 激情久久久久久| 老牛嫩草一区二区三区日本| 国产欧美日韩免费| 亚洲精品国精品久久99热一| 精品1区2区3区4区| 欧美在线精品一区| 久久九九热免费视频| 国产精品亚洲成人| 亚洲图片你懂的| 亚洲在线观看| 国产精品成人在线| 亚洲视频在线观看视频| 一区二区三区视频在线播放| 欧美国产日韩二区| 亚洲日本欧美在线| 一区二区三区日韩欧美| 欧美精品一区三区| 亚洲欧洲在线一区| 亚洲另类视频| 欧美日本在线看| 99国产一区| 亚洲四色影视在线观看| 欧美日韩亚洲综合一区| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美大学生性色视频| 激情久久久久| 毛片av中文字幕一区二区| 免费观看亚洲视频大全| 极品少妇一区二区三区精品视频| 久久www成人_看片免费不卡| 久久视频一区| 亚洲乱码久久| 国产精品wwwwww| 欧美一区二区在线免费播放| 免费亚洲电影| 一本久久综合亚洲鲁鲁五月天| 欧美日韩亚洲一区二区三区在线| 亚洲天堂av电影| 免费一级欧美在线大片| 亚洲黄色成人| 欧美午夜免费电影| 91久久线看在观草草青青| 久久深夜福利免费观看| 欧美一级二级三级蜜桃| 欧美.com| 一区二区欧美日韩视频| 日韩亚洲欧美高清| 国产精品一区二区女厕厕| 欧美伊人久久久久久久久影院| 亚洲一区二区三区欧美| 国产女人aaa级久久久级| 久久亚洲综合网| 欧美xart系列高清| 亚洲在线国产日韩欧美| 午夜精品久久久久久| 在线免费观看一区二区三区| 亚洲精品久久久久久久久久久| 欧美日韩一区自拍| 欧美在线你懂的| 亚洲综合色视频| 欧美国产亚洲精品久久久8v| 欧美精品福利在线| 99伊人成综合| 久久亚洲私人国产精品va媚药 | 欧美xxx在线观看| 亚洲午夜高清视频| 亚洲国产日韩精品| 久久国产精品99国产| 日韩一级精品视频在线观看| 国产精品日韩二区| 欧美激情区在线播放| 久久gogo国模裸体人体| 亚洲新中文字幕| 亚洲毛片一区| 欧美激情在线观看| 美女久久一区| 久久精品国产清高在天天线| 一本一本久久| 99这里只有久久精品视频| 在线观看日韩av电影| 国产精品一卡二| 国产精品成人一区二区艾草|