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

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

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

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  12 隨筆 :: 0 文章 :: 8 評(píng)論 :: 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> 
接下來(lái)的就是現(xiàn)實(shí)了,前面都只是處理數(shù)據(jù)得到 setRelevantRst 這個(gè)查詢結(jié)構(gòu)集合,這里就不多說了下面就和php之類的腳本語(yǔ)言差不多,格式化結(jié)果集合并顯示出來(lái)。 

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;
}

接下來(lái)的就是現(xiàn)實(shí)了,前面都只是處理數(shù)據(jù)得到 setRelevantRst 這個(gè)查詢結(jié)構(gòu)集合,這里就不多說了下面就和php之類的腳本語(yǔ)言差不多,格式化結(jié)果集合并顯示出來(lái)。
//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é)者站在巨人的肩膀上 閱讀(1006) 評(píng)論(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>
            亚洲精品一区二区在线| 国产亚洲美州欧州综合国| 欧美精品一区在线播放| 国产精品多人| 久久福利视频导航| 久久野战av| 亚洲图中文字幕| 久久国产色av| 在线亚洲欧美视频| 欧美在线一二三| av不卡在线| 久久精品在这里| 亚洲永久免费| 欧美jizz19hd性欧美| 欧美中文字幕精品| 欧美日韩日日骚| 欧美成人午夜激情在线| 国产精品美女视频网站| 欧美黄色aa电影| 狠狠色丁香婷婷综合久久片| 日韩一区二区精品| 亚洲精品小视频| 久久躁日日躁aaaaxxxx| 欧美一区二区国产| 欧美日韩xxxxx| 欧美福利专区| 韩国av一区二区| 午夜欧美不卡精品aaaaa| 亚洲一卡久久| 欧美啪啪一区| 亚洲国产欧美一区二区三区久久| 国产精品香蕉在线观看| 日韩视频不卡中文| 亚洲精品一区二区三区四区高清 | 欧美日韩国产123| 美女露胸一区二区三区| 国产精品久久久久久久免费软件 | 亚洲激情在线激情| 久久大逼视频| 久久精品99无色码中文字幕| 欧美四级电影网站| 亚洲精品国产日韩| 99热免费精品| 欧美另类一区| 日韩一区二区电影网| 宅男精品视频| 欧美日韩欧美一区二区| 亚洲精品在线视频观看| 亚洲精品国产品国语在线app| 久久久久一区二区三区四区| 裸体歌舞表演一区二区| 在线电影欧美日韩一区二区私密| 久久久精品动漫| 免费国产一区二区| 亚洲第一偷拍| 欧美电影免费观看网站| 最新国产乱人伦偷精品免费网站 | 欧美在线三区| 麻豆精品视频在线观看| 91久久精品国产91久久性色tv| 1024成人网色www| 美女久久一区| 亚洲激情欧美| 亚洲午夜av在线| 国产欧美精品va在线观看| 亚洲尤物影院| 麻豆免费精品视频| 亚洲精品欧美一区二区三区| 欧美日韩系列| 午夜在线播放视频欧美| 久久香蕉国产线看观看av| 亚洲人线精品午夜| 国产精品美女久久久| 欧美在线视频一区二区三区| 欧美激情网友自拍| 亚洲视频一区二区在线观看| 国产精品永久免费在线| 久久久久久久一区二区| 亚洲精品视频二区| 欧美在线影院| 91久久久久久国产精品| 欧美日韩在线播放一区二区| 亚洲欧美中文在线视频| 欧美成年人网站| 亚洲综合电影一区二区三区| 黄色成人精品网站| 欧美日韩一区二区免费在线观看 | 亚洲国产成人久久综合一区| 欧美日韩一区二区在线视频| 香蕉av福利精品导航| 欧美大片免费久久精品三p| 亚洲一区二区免费| 在线免费观看日本欧美| 欧美午夜不卡| 久久综合色88| 亚洲综合日韩| 亚洲欧洲日韩综合二区| 久久福利视频导航| 在线视频免费在线观看一区二区| 国语自产在线不卡| 国产精品久久久久久久久免费 | 久久精品青青大伊人av| 99www免费人成精品| 国产精品永久| 欧美日韩国产123区| 久久久九九九九| 亚洲少妇一区| 亚洲欧洲在线看| 美国成人直播| 欧美在线国产精品| 亚洲一二三四久久| 亚洲人成网站影音先锋播放| 国产人成一区二区三区影院| 欧美日韩免费观看一区三区| 久色婷婷小香蕉久久| 午夜精品婷婷| 亚洲午夜激情在线| 日韩视频一区二区三区在线播放| 欧美国产日韩视频| 久久伊人亚洲| 久久精品视频在线播放| 午夜久久久久久久久久一区二区| 亚洲精品偷拍| 最新成人在线| 亚洲福利国产精品| 一区二区三区在线免费观看| 国产伦理一区| 国产精品九色蝌蚪自拍| 正在播放欧美一区| 欧美一级视频一区二区| 亚洲国产合集| 亚洲第一网站| 亚洲国产精品成人综合色在线婷婷 | 韩国成人福利片在线播放| 国产精品久久久久久久久搜平片 | 亚洲国产一区二区三区青草影视| 久久久噜噜噜久噜久久| 欧美在线免费| 欧美在线播放| 欧美影院久久久| 久久成人18免费网站| 久久国产直播| 久久婷婷综合激情| 麻豆av一区二区三区| 老司机午夜精品视频在线观看| 久久久久久精| 欧美大片va欧美在线播放| 欧美电影免费网站| 亚洲高清久久| 亚洲精品日产精品乱码不卡| 亚洲国产专区| 一区二区高清在线观看| 在线亚洲伦理| 亚洲欧美卡通另类91av| 欧美一级理论片| 久久久久久久久久码影片| 久久天堂精品| 欧美大片免费久久精品三p| 欧美极品一区| 国产精品视频久久| 海角社区69精品视频| 91久久国产综合久久91精品网站| 亚洲精品国产精品国产自| 99精品国产在热久久婷婷| 亚洲午夜日本在线观看| 欧美有码视频| 欧美第一黄网免费网站| 亚洲裸体在线观看| 欧美一区二区久久久| 免费欧美网站| 国产精品免费网站| 一区二区在线观看视频| 亚洲人精品午夜| 亚洲制服丝袜在线| 久久综合伊人77777麻豆| 亚洲国产成人久久综合| 在线亚洲电影| 久久综合色8888| 欧美午夜剧场| 激情视频一区| 亚洲一区二区精品视频| 久久综合久久88| 一本色道久久综合亚洲精品按摩| 久久se精品一区精品二区| 欧美激情欧美狂野欧美精品| 国产女人精品视频| 日韩一级网站| 美女91精品| 亚洲综合第一| 欧美日本免费| 影音先锋成人资源站| 午夜国产精品视频免费体验区| 欧美成人激情视频免费观看| 亚洲在线观看| 欧美人与禽猛交乱配| 伊人精品久久久久7777| 亚洲欧美日韩高清| 亚洲精选在线观看| 蜜月aⅴ免费一区二区三区| 国产亚洲精品自拍|