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

學著站在巨人的肩膀上

金融數學,InformationSearch,Compiler,OS,

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

有前面注釋我們可以知道查詢關鍵字和字典文件準備好好后,將進入用戶關鍵字分詞階段

//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);     //將以"/"劃分開的關鍵字一一順序放入一個向量容器中  
 
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);  //將以"/"劃分開的關鍵字一一順序放入一個向量容器中
 
 set setRelevantRst;
 iQuery.GetRelevantRst(vecTerm, mapBuckets, setRelevantRst);
 
 gettimeofday(&end_tv,&tz);
 // search end
 //搜索完畢view plaincopy to clipboardprint?
看CHzSeg 中的這個方法 

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

//ChSeg/HzSeg.hview plaincopy to clipboardprint?
/**  
 * 程序翻譯說明  
 * 進一步凈化數據,轉換漢字  
 * @access  public  
 * @param   CDict, string 參數的漢字說明:字典,查詢字符串  
 * @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;" 中文標點等非漢字字符="" 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; // 假定沒有半個漢字  
                }  
 
                if (i==0) ii=i+2;  
 
                // 不處理中文空格  
                if (!(ch==161 && (unsigned char)s1[1]==161))   
                {   
                    if (i <= s1.size())  // yhf  
                        // 其他的非漢字雙字節字符可能連續輸出  
                        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;  

/**
 * 程序翻譯說明
 * 進一步凈化數據,轉換漢字
 * @access  public
 * @param   CDict, string 參數的漢字說明:字典,查詢字符串
 * @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; // 假定沒有半個漢字
    }

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

    // 不處理中文空格
    if (!(ch==161 && (unsigned char)s1[1]==161))
    {
     if (i <= s1.size()) // yhf
      // 其他的非漢字雙字節字符可能連續輸出
      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">/**  
 * 程序翻譯說明  
 * 將以"/"劃分開的關鍵字一一順序放入一個向量容器中  
 *  
 * @access  public  
 * @param   vector<STRING></STRING> 參數的漢字說明:向量容器  
 * @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">/**  
 * 程序翻譯說明  
 * 相關性分析查詢,構造結果集合setRelevantRst //瓶頸所在  
 *  
 * @access  public  
 * @param   vector<STRING></STRING> map set<STRING></STRING> 參數的漢字說明: 用戶提交關鍵字的分詞組,倒排索引映射,相關性結果集合  
 * @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> 
接下來的就是現實了,前面都只是處理數據得到 setRelevantRst 這個查詢結構集合,這里就不多說了下面就和php之類的腳本語言差不多,格式化結果集合并顯示出來。 

view plaincopy to clipboardprint?/**   * 程序翻譯說明   * 將以"/"劃分開的關鍵字一一順序放入一個向量容器中   *   * @access  public   * @param   vector<STRING></STRING> 參數的漢字說明:向量容器   * @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);        }   }  /**
 * 程序翻譯說明
 * 將以"/"劃分開的關鍵字一一順序放入一個向量容器中
 *
 * @access  public
 * @param   vector 參數的漢字說明:向量容器
 * @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">/**   * 程序翻譯說明   * 相關性分析查詢,構造結果集合setRelevantRst //瓶頸所在   *   * @access  public   * @param   vector<STRING></STRING> map set<STRING></STRING> 參數的漢字說明: 用戶提交關鍵字的分詞組,倒排索引映射,相關性結果集合   * @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?/**   * 程序翻譯說明   * 相關性分析查詢,構造結果集合setRelevantRst //瓶頸所在   *   * @access  public   * @param   vector<STRING></STRING> map set<STRING></STRING> 參數的漢字說明: 用戶提交關鍵字的分詞組,倒排索引映射,相關性結果集合   * @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;   }  /**
 * 程序翻譯說明
 * 相關性分析查詢,構造結果集合setRelevantRst //瓶頸所在
 *
 * @access  public
 * @param   vector map set 參數的漢字說明: 用戶提交關鍵字的分詞組,倒排索引映射,相關性結果集合
 * @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;
}

接下來的就是現實了,前面都只是處理數據得到 setRelevantRst 這個查詢結構集合,這里就不多說了下面就和php之類的腳本語言差不多,格式化結果集合并顯示出來。
//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 學者站在巨人的肩膀上 閱讀(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>
            亚洲一本大道在线| 国产欧美精品在线| 一区久久精品| 欧美国产日韩一二三区| 欧美激情久久久| 亚洲一区在线直播| 久久国产一区| 99视频有精品| 亚洲免费影视第一页| 尤妮丝一区二区裸体视频| 亚洲人成免费| 国产精品美女久久久浪潮软件| 久久久久国产精品www| 欧美精品97| 国产精品久久久久久久7电影| 在线视频成人| 亚洲视频在线一区| 亚洲大胆av| 午夜影视日本亚洲欧洲精品| 亚洲美女区一区| 亚洲九九爱视频| 国内精品久久久久久影视8 | 亚洲福利专区| 欧美在线看片a免费观看| 一区二区三区日韩欧美| 欧美成人激情在线| 久久在精品线影院精品国产| 亚洲第一毛片| 欧美午夜精品久久久久免费视 | 亚洲视频999| 麻豆精品一区二区综合av| 欧美电影免费观看大全| 亚洲欧美日韩中文在线制服| 欧美日韩国产欧美日美国产精品| 一区二区欧美激情| 激情五月婷婷综合| 欧美一级免费视频| 亚洲国产成人在线视频| 久久久久久久激情视频| 亚洲靠逼com| 欧美 日韩 国产精品免费观看| 亚洲三级视频在线观看| 欧美日韩一区二区在线播放| 国产精品高潮呻吟久久av无限| 亚洲国产精品123| 久久国产精品免费一区| 欧美激情导航| 鲁大师影院一区二区三区| 国产精品毛片a∨一区二区三区|国| 亚洲第一精品在线| 亚洲成人在线| 久久三级福利| 欧美aⅴ99久久黑人专区| 美女成人午夜| 一区二区三欧美| 欧美精品久久一区| 欧美大片在线观看一区| 影音先锋久久精品| 美女视频黄免费的久久| 欧美成人精品在线| 亚洲激情国产| 欧美激情性爽国产精品17p| 欧美激情中文字幕一区二区 | 羞羞答答国产精品www一本 | 欧美成人一区二免费视频软件| 精品电影在线观看| 鲁鲁狠狠狠7777一区二区| 欧美激情欧美激情在线五月| 最近中文字幕mv在线一区二区三区四区| 久久伊人亚洲| 亚洲国产日韩综合一区| 一二三区精品| 国产精品裸体一区二区三区| 午夜精品久久久久久久久久久久久 | 亚洲大片免费看| 亚洲精品资源| 国产精品理论片| 久久亚洲私人国产精品va媚药| 欧美电影美腿模特1979在线看| 亚洲久久视频| 国产精品一二三| 久久网站免费| 日韩视频免费看| 久久久久久伊人| 亚洲毛片在线看| 国产精品一区二区男女羞羞无遮挡| 久久国产精品99国产| 亚洲欧洲一区| 久久久久九九九九| 亚洲免费观看高清完整版在线观看熊 | 香港久久久电影| 久久中文字幕一区| 日韩午夜av在线| 国产亚洲精品资源在线26u| 免播放器亚洲一区| 一本色道**综合亚洲精品蜜桃冫| 久久久久se| 亚洲天堂av在线免费| 经典三级久久| 国产精品www色诱视频| 久久综合伊人77777尤物| 日韩午夜激情| 美女黄网久久| 亚洲欧美日本伦理| 最新成人av网站| 国产一在线精品一区在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲线精品一区二区三区八戒| 欧美福利视频| 久久露脸国产精品| 亚洲在线一区二区| 91久久精品国产91性色tv| 国产婷婷色一区二区三区| 欧美日韩在线免费观看| 蜜臀av一级做a爰片久久 | 久久精品一区二区三区四区 | 国自产拍偷拍福利精品免费一| 欧美激情一区二区三区成人| 欧美一级视频| 亚洲视频一区二区| 亚洲激情成人网| 久久五月天婷婷| 亚洲一区免费| 亚洲视频免费在线观看| 亚洲毛片网站| 亚洲欧洲视频| 亚洲国产精品尤物yw在线观看| 国内精品美女在线观看| 国产欧美另类| 国产情侣一区| 国产精品麻豆va在线播放| 欧美日韩视频第一区| 欧美精品二区| 欧美精品成人在线| 欧美精品v日韩精品v国产精品| 久久资源在线| 久久综合999| 免费成人av| 免费欧美在线| 欧美成人免费小视频| 欧美99久久| 欧美第十八页| 欧美/亚洲一区| 久久久噜噜噜久久久| 久久精品99国产精品日本| 久久精品免费电影| 欧美一区二区日韩一区二区| 久久成人18免费网站| 久久精品综合网| 久久综合久久综合久久综合| 另类av导航| 亚洲第一福利在线观看| 欧美激情久久久| 99riav1国产精品视频| 日韩一二在线观看| 亚洲一区二区三区高清| 亚洲欧美国产另类| 久久视频免费观看| 欧美大片在线观看一区| 欧美日韩高清在线| 国产精品日韩精品| 国产一区二区三区视频在线观看 | 亚洲欧美日韩国产综合在线 | 亚洲剧情一区二区| 亚洲一区在线直播| 先锋资源久久| 欧美aⅴ99久久黑人专区| 亚洲第一中文字幕| 宅男精品导航| 欧美专区在线观看一区| 美女主播精品视频一二三四| 欧美精品一区在线发布| 国产精品夜夜夜一区二区三区尤| 国产在线观看一区| 日韩一级在线观看| 欧美影院一区| 亚洲福利视频二区| 亚洲一区二区免费看| 久久久噜噜噜久久中文字幕色伊伊| 欧美成人免费播放| 国产精品午夜在线观看| …久久精品99久久香蕉国产| 亚洲美女精品久久| 久久久久亚洲综合| 亚洲欧洲一区二区在线观看| 久久久久久久一区| 欧美一区二区三区日韩视频| 免费观看在线综合| 一区二区三区|亚洲午夜| 久久精品国产一区二区电影| 欧美理论在线| 怡红院精品视频| 亚洲欧美福利一区二区| 久久只有精品| 亚洲免费在线视频一区 二区| 男人的天堂成人在线| 国产偷国产偷精品高清尤物| 亚洲欧洲三级| 久久久久久久一区| 亚洲图色在线|