精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python中七種主要關鍵詞提取算法的基準測試

開發 后端 算法
我一直在尋找有效關鍵字提取任務算法。 目標是找到一種算法,能夠以有效的方式提取關鍵字,并且能夠平衡提取質量和執行時間,因為我的數據語料庫迅速增加已經達到了數百萬行。

我一直在尋找有效關鍵字提取任務算法。 目標是找到一種算法,能夠以有效的方式提取關鍵字,并且能夠平衡提取質量和執行時間,因為我的數據語料庫迅速增加已經達到了數百萬行。 我對于算法一個主要的要求是提取關鍵字本身總是要有意義的,即使脫離了上下文的語境也能夠表達一定的含義。

[[437010]]

本篇文章使用 2000 個文檔的語料庫對幾種著名的關鍵字提取算法進行測試和試驗。

使用的庫列表

我使用了以下python庫進行研究

NLTK,以幫助我在預處理階段和一些輔助函數

  • RAKE
  • YAKE
  • PKE
  • KeyBERT
  • Spacy

Pandas 和Matplotlib還有其他通用庫

實驗流程

基準測試的工作方式如下

 

 

我們將首先導入包含我們的文本數據的數據集。 然后,我們將為每個算法創建提取邏輯的單獨函數

algorithm_name(str: text) → [keyword1, keyword2, ..., keywordn]

然后,我們創建的一個函數用于提取整個語料庫的關鍵詞。

extract_keywords_from_corpus(algorithm, corpus) → {algorithm, corpus_keywords, elapsed_time}

下一步,使用Spacy幫助我們定義一個匹配器對象,用來判斷關鍵字是否對我們的任務有意義,該對象將返回 true 或 false。

最后,我們會將所有內容打包到一個輸出最終報告的函數中。

數據集

我使用的是來自互聯網的小文本數數據集。這是一個樣本

 

  1. ['To follow up from my previous questions. . Here is the result!\n'
  2. 'European mead competitions?\nI’d love some feedback on my mead, but entering the Mazer Cup isn’t an option for me, since shipping alcohol to the USA from Europe is illegal. (I know I probably wouldn’t get caught/prosecuted, but any kind of official record of an issue could screw up my upcoming citizenship application and I’m not willing to risk that).\n\nAre there any European mead comps out there? Or at least large beer comps that accept entries in the mead categories and are likely to have experienced mead judges?''Orange Rosemary Booch\n''Well folks, finally happened. Went on vacation and came home to mold.\n''I’m opening a gelato shop in London on Friday so we’ve been up non-stop practicing flavors - here’s one of our most recent attempts!\n'"Does anyone have resources for creating shelf stable hot sauce? Ferment and then water or pressure can?\nI have dozens of fresh peppers I want to use to make hot sauce, but the eventual goal is to customize a recipe and send it to my buddies across the States. I believe canning would be the best way to do this, but I'm not finding a lot of details on it. Any advice?", 'what is the practical difference between a wine filter and a water filter?\nwondering if you could use either', 'What is the best custard base?\nDoes someone have a recipe that tastes similar to Culver’s frozen custard?', 'Mold?\n' 

 

大部分是與食物相關的。我們將使用2000個文檔的樣本來測試我們的算法。

我們現在還沒有對文本進行預處理,因為有一些算法的結果是基于stopwords和標點符號的。

算法

讓我們定義關鍵字提取函數。

 

  1. # initiate BERT outside of functions 
  2. bert = KeyBERT() 
  3. # 1. RAKE 
  4. def rake_extractor(text): 
  5. ""
  6. Uses Rake to extract the top 5 keywords from a text 
  7. Arguments: text (str) 
  8. Returns: list of keywords (list) 
  9. ""
  10. r = Rake() 
  11. r.extract_keywords_from_text(text) 
  12. return r.get_ranked_phrases()[:5] 
  13. # 2. YAKE 
  14. def yake_extractor(text): 
  15. ""
  16. Uses YAKE to extract the top 5 keywords from a text 
  17. Arguments: text (str) 
  18. Returns: list of keywords (list) 
  19. ""
  20. keywords = yake.KeywordExtractor(lan="en", n=3, windowsSize=3, top=5).extract_keywords(text) 
  21. results = [] 
  22. for scored_keywords in keywords: 
  23. for keyword in scored_keywords: 
  24. if isinstance(keyword, str): 
  25. results.append(keyword)  
  26. return results  
  27. # 3. PositionRank 
  28. def position_rank_extractor(text): 
  29. ""
  30. Uses PositionRank to extract the top 5 keywords from a text 
  31. Arguments: text (str) 
  32. Returns: list of keywords (list) 
  33. ""
  34. # define the valid Part-of-Speeches to occur in the graph 
  35. pos = {'NOUN''PROPN''ADJ''ADV'
  36. extractor = pke.unsupervised.PositionRank() 
  37. extractor.load_document(text, language='en'
  38. extractor.candidate_selection(pos=pos, maximum_word_number=5) 
  39. # 4. weight the candidates using the sum of their word's scores that are 
  40. # computed using random walk biaised with the position of the words 
  41. in the document. In the graph, nodes are words (nouns and 
  42. # adjectives only) that are connected if they occur in a window of 
  43. # 3 words. 
  44. extractor.candidate_weighting(window=3, pos=pos) 
  45. # 5. get the 5-highest scored candidates as keyphrases 
  46. keyphrases = extractor.get_n_best(n=5) 
  47. results = [] 
  48. for scored_keywords in keyphrases: 
  49. for keyword in scored_keywords: 
  50. if isinstance(keyword, str): 
  51. results.append(keyword)  
  52. return results  
  53. # 4. SingleRank 
  54. def single_rank_extractor(text): 
  55. ""
  56. Uses SingleRank to extract the top 5 keywords from a text 
  57. Arguments: text (str) 
  58. Returns: list of keywords (list) 
  59. ""
  60. pos = {'NOUN''PROPN''ADJ''ADV'
  61. extractor = pke.unsupervised.SingleRank() 
  62. extractor.load_document(text, language='en'
  63. extractor.candidate_selection(pos=pos) 
  64. extractor.candidate_weighting(window=3, pos=pos) 
  65. keyphrases = extractor.get_n_best(n=5) 
  66. results = [] 
  67. for scored_keywords in keyphrases: 
  68. for keyword in scored_keywords: 
  69. if isinstance(keyword, str): 
  70. results.append(keyword)  
  71. return results  
  72. # 5. MultipartiteRank 
  73. def multipartite_rank_extractor(text): 
  74. ""
  75. Uses MultipartiteRank to extract the top 5 keywords from a text 
  76. Arguments: text (str) 
  77. Returns: list of keywords (list) 
  78. ""
  79. extractor = pke.unsupervised.MultipartiteRank() 
  80. extractor.load_document(text, language='en'
  81. pos = {'NOUN''PROPN''ADJ''ADV'
  82. extractor.candidate_selection(pos=pos) 
  83. # 4. build the Multipartite graph and rank candidates using random walk, 
  84. # alpha controls the weight adjustment mechanism, see TopicRank for 
  85. # threshold/method parameters. 
  86. extractor.candidate_weighting(alpha=1.1, threshold=0.74, method='average'
  87. keyphrases = extractor.get_n_best(n=5) 
  88. results = [] 
  89. for scored_keywords in keyphrases: 
  90. for keyword in scored_keywords: 
  91. if isinstance(keyword, str): 
  92. results.append(keyword)  
  93. return results 
  94. # 6. TopicRank 
  95. def topic_rank_extractor(text): 
  96. ""
  97. Uses TopicRank to extract the top 5 keywords from a text 
  98. Arguments: text (str) 
  99. Returns: list of keywords (list) 
  100. ""
  101. extractor = pke.unsupervised.TopicRank() 
  102. extractor.load_document(text, language='en'
  103. pos = {'NOUN''PROPN''ADJ''ADV'
  104. extractor.candidate_selection(pos=pos) 
  105. extractor.candidate_weighting() 
  106. keyphrases = extractor.get_n_best(n=5) 
  107. results = [] 
  108. for scored_keywords in keyphrases: 
  109. for keyword in scored_keywords: 
  110. if isinstance(keyword, str): 
  111. results.append(keyword)  
  112. return results 
  113. # 7. KeyBERT 
  114. def keybert_extractor(text): 
  115. ""
  116. Uses KeyBERT to extract the top 5 keywords from a text 
  117. Arguments: text (str) 
  118. Returns: list of keywords (list) 
  119. ""
  120. keywords = bert.extract_keywords(text, keyphrase_ngram_range=(3, 5), stop_words="english", top_n=5) 
  121. results = [] 
  122. for scored_keywords in keywords: 
  123. for keyword in scored_keywords: 
  124. if isinstance(keyword, str): 
  125. results.append(keyword) 
  126. return results 

 

每個提取器將文本作為參數輸入并返回一個關鍵字列表。對于使用來講非常簡單。

注意:由于某些原因,我不能在函數之外初始化所有提取器對象。每當我這樣做時,TopicRank和MultiPartiteRank都會拋出錯誤。就性能而言,這并不完美,但基準測試仍然可以完成。

 

Python中7種主要關鍵詞提取算法的基準測試

 

我們已經通過傳遞 pos = {'NOUN', 'PROPN', 'ADJ', 'ADV'} 來限制一些可接受的語法模式——這與 Spacy 一起將確保幾乎所有的關鍵字都是從人類語言視角來選擇的。 我們還希望關鍵字包含三個單詞,只是為了有更具體的關鍵字并避免過于籠統。

從整個語料庫中提取關鍵字

現在讓我們定義一個函數,該函數將在輸出一些信息的同時將單個提取器應用于整個語料庫。

 

  1. def extract_keywords_from_corpus(extractor, corpus): 
  2. """This function uses an extractor to retrieve keywords from a list of documents""" 
  3. extractor_name = extractor.__name__.replace("_extractor"""
  4. logging.info(f"Starting keyword extraction with {extractor_name}"
  5. corpus_kws = {} 
  6. start = time.time() 
  7. # logging.info(f"Timer initiated.") <-- uncomment this if you want to output start of timer 
  8. for idx, text in tqdm(enumerate(corpus), desc="Extracting keywords from corpus..."): 
  9. corpus_kws[idx] = extractor(text) 
  10. end = time.time() 
  11. # logging.info(f"Timer stopped.") <-- uncomment this if you want to output end of timer 
  12. elapsed = time.strftime("%H:%M:%S"time.gmtime(end - start)) 
  13. logging.info(f"Time elapsed: {elapsed}"
  14.  
  15. return {"algorithm": extractor.__name__,  
  16. "corpus_kws": corpus_kws,  
  17. "elapsed_time": elapsed} 

 

這個函數所做的就是將傳入的提取器數據和一系列有用的信息組合成一個字典(比如執行任務花費了多少時間)來方便我們后續生成報告。

語法匹配函數

這個函數確保提取器返回的關鍵字始終(幾乎?)意義。 例如,

 

Python中7種主要關鍵詞提取算法的基準測試

 

我們可以清楚地了解到,前三個關鍵字可以獨立存在,它們完全是有意義的。我們不需要更多信息來理解關鍵詞的含義,但是第四個就毫無任何意義,所以需要盡量避免這種情況。

Spacy 與 Matcher 對象可以幫助我們做到這一點。 我們將定義一個匹配函數,它接受一個關鍵字,如果定義的模式匹配,則返回 True 或 False。

 

  1. def match(keyword): 
  2. """This function checks if a list of keywords match a certain POS pattern""" 
  3. patterns = [ 
  4. [{'POS''PROPN'}, {'POS''VERB'}, {'POS''VERB'}], 
  5. [{'POS''NOUN'}, {'POS''VERB'}, {'POS''NOUN'}], 
  6. [{'POS''VERB'}, {'POS''NOUN'}], 
  7. [{'POS''ADJ'}, {'POS''ADJ'}, {'POS''NOUN'}],  
  8. [{'POS''NOUN'}, {'POS''VERB'}], 
  9. [{'POS''PROPN'}, {'POS''PROPN'}, {'POS''PROPN'}], 
  10. [{'POS''PROPN'}, {'POS''PROPN'}, {'POS''NOUN'}], 
  11. [{'POS''ADJ'}, {'POS''NOUN'}], 
  12. [{'POS''ADJ'}, {'POS''NOUN'}, {'POS''NOUN'}, {'POS''NOUN'}], 
  13. [{'POS''PROPN'}, {'POS''PROPN'}, {'POS''PROPN'}, {'POS''ADV'}, {'POS''PROPN'}], 
  14. [{'POS''PROPN'}, {'POS''PROPN'}, {'POS''PROPN'}, {'POS''VERB'}], 
  15. [{'POS''PROPN'}, {'POS''PROPN'}], 
  16. [{'POS''NOUN'}, {'POS''NOUN'}], 
  17. [{'POS''ADJ'}, {'POS''PROPN'}], 
  18. [{'POS''PROPN'}, {'POS''ADP'}, {'POS''PROPN'}], 
  19. [{'POS''PROPN'}, {'POS''ADJ'}, {'POS''NOUN'}], 
  20. [{'POS''PROPN'}, {'POS''VERB'}, {'POS''NOUN'}], 
  21. [{'POS''NOUN'}, {'POS''ADP'}, {'POS''NOUN'}], 
  22. [{'POS''PROPN'}, {'POS''NOUN'}, {'POS''PROPN'}], 
  23. [{'POS''VERB'}, {'POS''ADV'}], 
  24. [{'POS''PROPN'}, {'POS''NOUN'}], 
  25. matcher = Matcher(nlp.vocab) 
  26. matcher.add("pos-matcher", patterns) 
  27. create spacy object 
  28. doc = nlp(keyword) 
  29. # iterate through the matches 
  30. matches = matcher(doc) 
  31. # if matches is not empty, it means that it has found at least a match 
  32. if len(matches) > 0: 
  33. return True 
  34. return False 

 

基準測試函數

我們馬上就要完成了。 這是啟動腳本和收集結果之前的最后一步。

我們將定義一個基準測試函數,它接收我們的語料庫和一個布爾值,用于對我們的數據進行打亂。 對于每個提取器,它調用

extract_keywords_from_corpus 函數返回一個包含該提取器結果的字典。 我們將該值存儲在列表中。

對于列表中的每個算法,我們計算

  • 平均提取關鍵詞數
  • 匹配關鍵字的平均數量
  • 計算一個分數表示找到的平均匹配數除以執行操作所花費的時間

我們將所有數據存儲在 Pandas DataFrame 中,然后將其導出為 .csv。

 

  1. def get_sec(time_str): 
  2. """Get seconds from time.""" 
  3. h, m, s = time_str.split(':'
  4. return int(h) * 3600 + int(m) * 60 + int(s) 
  5. def benchmark(corpus, shuffle=True): 
  6. """This function runs the benchmark for the keyword extraction algorithms""" 
  7. logging.info("Starting benchmark...\n"
  8.  
  9. # Shuffle the corpus 
  10. if shuffle: 
  11. random.shuffle(corpus) 
  12. # extract keywords from corpus 
  13. results = [] 
  14. extractors = [ 
  15. rake_extractor,  
  16. yake_extractor,  
  17. topic_rank_extractor,  
  18. position_rank_extractor, 
  19. single_rank_extractor, 
  20. multipartite_rank_extractor, 
  21. keybert_extractor, 
  22. for extractor in extractors: 
  23. result = extract_keywords_from_corpus(extractor, corpus) 
  24. results.append(result) 
  25. # compute average number of extracted keywords 
  26. for result in results: 
  27. len_of_kw_list = [] 
  28. for kws in result["corpus_kws"].values(): 
  29. len_of_kw_list.append(len(kws)) 
  30. result["avg_keywords_per_document"] = np.mean(len_of_kw_list) 
  31. # match keywords 
  32. for result in results: 
  33. for idx, kws in result["corpus_kws"].items(): 
  34. match_results = [] 
  35. for kw in kws: 
  36. match_results.append(match(kw)) 
  37. result["corpus_kws"][idx] = match_results 
  38. # compute average number of matched keywords 
  39. for result in results: 
  40. len_of_matching_kws_list = [] 
  41. for idx, kws in result["corpus_kws"].items(): 
  42. len_of_matching_kws_list.append(len([kw for kw in kws if kw])) 
  43. result["avg_matched_keywords_per_document"] = np.mean(len_of_matching_kws_list) 
  44. # compute average percentange of matching keywords, round 2 decimals 
  45. result["avg_percentage_matched_keywords"] = round(result["avg_matched_keywords_per_document"] / result["avg_keywords_per_document"], 2) 
  46.  
  47. create score based on the avg percentage of matched keywords divided by time elapsed (in seconds) 
  48. for result in results: 
  49. elapsed_seconds = get_sec(result["elapsed_time"]) + 0.1 
  50. # weigh the score based on the time elapsed 
  51. result["performance_score"] = round(result["avg_matched_keywords_per_document"] / elapsed_seconds, 2) 
  52.  
  53. delete corpus_kw 
  54. for result in results: 
  55. del result["corpus_kws"
  56. create results dataframe 
  57. df = pd.DataFrame(results) 
  58. df.to_csv("results.csv"index=False
  59. logging.info("Benchmark finished. Results saved to results.csv"
  60. return df 

 

結果

 

  1. results = benchmark(texts[:2000], shuffle=True

 

Python中7種主要關鍵詞提取算法的基準測試

 

下面是產生的報告

 

Python中7種主要關鍵詞提取算法的基準測試

 

我們可視化一下:

 

Python中7種主要關鍵詞提取算法的基準測試

 

根據我們定義的得分公式(

avg_matched_keywords_per_document/time_elapsed_in_seconds), Rake 在 2 秒內處理 2000 個文檔,盡管準確度不如 KeyBERT,但時間因素使其獲勝。

如果我們只考慮準確性,計算為

avg_matched_keywords_per_document 和 avg_keywords_per_document 之間的比率,我們得到這些結果

 

Python中7種主要關鍵詞提取算法的基準測試

 

從準確性的角度來看,Rake 的表現也相當不錯。如果我們不考慮時間的話,KeyBERT 肯定會成為最準確、最有意義關鍵字提取的算法。Rake 雖然在準確度上排第二,但是差了一大截。

 

如果需要準確性,KeyBERT 肯定是首選,如果要求速度的話Rake肯定是首選,因為他的速度塊,準確率也算能接受吧。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2023-07-03 12:47:01

2010-08-31 10:57:36

2011-03-24 14:45:48

2020-07-23 10:20:28

物聯網工業物聯網技術

2011-06-20 14:32:59

關鍵詞

2011-06-07 18:45:41

關鍵詞

2018-02-07 16:38:27

算法自然語言文本

2024-06-13 09:05:12

2011-06-24 17:01:44

關鍵詞

2011-06-14 19:11:38

關鍵詞

2011-06-21 16:48:21

關鍵詞SEO

2011-06-22 18:19:40

2011-06-16 17:25:45

關鍵詞

2013-08-26 15:43:40

AppStore關鍵詞開發者應用選取關鍵詞

2025-05-13 08:20:58

2020-08-27 07:00:00

游戲游戲測試測試技術

2011-06-19 12:20:47

長尾關鍵詞

2011-06-14 10:01:03

長尾關鍵詞

2015-12-21 09:50:07

2011-05-25 17:58:00

點贊
收藏

51CTO技術棧公眾號

国产亚洲高清视频| 2021年精品国产福利在线| 国产网站一区二区| 91在线免费网站| 国产一级做a爱免费视频| 欧美日韩一本| 337p亚洲精品色噜噜噜| 欧美大片在线播放| 91欧美在线视频| 国产精品538一区二区在线| 91精品国产91久久久久| 老司机精品免费视频| 亚洲视频精选| 欧美性大战久久久| 天天夜碰日日摸日日澡性色av| 在线观看二区| gogogo免费视频观看亚洲一| 成人淫片在线看| 无码人妻丰满熟妇精品区| 午夜精品婷婷| 色午夜这里只有精品| aaaa黄色片| 日韩精品视频在线看| 欧美在线短视频| 国产中文字幕视频在线观看| 亚洲性图自拍| 中文一区二区在线观看| 加勒比在线一区二区三区观看| 97超碰人人草| 日韩精品成人一区二区三区| 91极品女神在线| 欧美人与禽zozzo禽性配| 91欧美日韩| 亚洲天堂成人在线| a级在线观看视频| 国产极品模特精品一二| 日韩三级精品电影久久久| www.久久av.com| www.一区| 欧美三区在线视频| 国产一区二区在线免费播放| 蜜桃视频动漫在线播放| 一区二区三区视频在线看| 强开小嫩苞一区二区三区网站| 午夜伦理在线| 中文字幕av一区二区三区高| 色综合久久久久久久久五月| 国产在线观看精品一区| 久久女同性恋中文字幕| 欧美极品一区二区| 美丽的姑娘在线观看免费动漫| www亚洲一区| 久久精品国产综合精品| 青青国产在线| 国产色综合久久| 水蜜桃一区二区三区| www亚洲人| 亚洲欧洲精品一区二区三区不卡| 在线观看福利一区| www视频在线看| 亚洲一区中文日韩| 成人免费视频91| 美女高潮在线观看| 在线免费观看日本欧美| 手机免费av片| 1313精品午夜理伦电影| 亚洲变态欧美另类捆绑| 青青草成人免费视频| 国产aⅴ精品一区二区三区久久| 亚洲精品中文字幕有码专区| 91资源在线播放| 久久精品亚洲人成影院| 欧美福利小视频| 国产成人在线视频观看| 日产国产欧美视频一区精品| 成人写真视频福利网| 精品久久无码中文字幕| 懂色av一区二区三区蜜臀 | 国产精品嫩草影院精东| 国产成人综合亚洲网站| 国产精品一区二区欧美| 毛片在线免费| 亚洲人亚洲人成电影网站色| 男女私大尺度视频| 九九九伊在线综合永久| 日韩一区二区三区电影在线观看 | 国产裸体免费无遮挡| 国产精品诱惑| 亚洲第一区在线| 中文字幕av久久爽一区| 欧美另类综合| 欧美综合第一页| 国产乱淫av免费| www国产成人| 黄色网址在线免费看| 国产美女高潮在线观看| 欧美日韩另类一区| 一级特黄a大片免费| 国产精品久久观看| 日本高清视频精品| www.xxx国产| 久久精品欧美日韩| 美女黄色免费看| 玖玖精品在线| 亚洲美女黄色片| 久久久综合久久久| 久久99精品国产麻豆不卡| 国产一区二区三区高清视频| 黄色片免费在线观看| 狠狠躁夜夜躁人人爽超碰91| 制服下的诱惑暮生| 欧美久久综合网| 国a精品视频大全| 国产免费一区二区三区免费视频| 久久久久综合网| 加勒比海盗1在线观看免费国语版| 国产99在线| 日韩一区二区三区四区| 手机看片国产日韩| 三级久久三级久久| 韩国成人av| 好看的中文字幕在线播放| 777午夜精品免费视频| 免费看污片的网站| 久久国产成人| 国产一区二区三区四区五区在线 | 美女精品久久| 日本一本草久在线中文| 黄色av免费观看| xxxxx99| 久久精品一区二区免费播放| 亚洲熟女一区二区| 最新中文字幕日本| 国产chinese中国hdxxxx| 亚洲一级av无码毛片精品| xxxwww国产| 伊人在线视频观看| 亚洲人体一区| 欧美精品一区二区在线播放| 亚洲免费av在线| 国产精品成人一区二区艾草| 国产欧美综合色| 国产精品国产三级国产普通话99| 国产精品欧美一级免费| 中文字幕日韩一区| 亚洲综合久久久| 黄色成人av网| 欧美天堂一区二区三区| 91精品国产综合久久精品 | 亚洲一区二区三区影院| 亚洲国产欧美在线人成| 午夜精品aaa| 欧美伊人精品成人久久综合97| 欧美日韩一区国产| 精品久久久久香蕉网| 亚洲精品一二区| 久久夜色撩人精品| 欧美专区在线播放| wwwxx欧美| 天天综合色天天综合色hd| 2021狠狠干| 成年人视频在线免费| 少妇欧美激情一区二区三区| www.久久av| 国产亚洲精品久久久久久无几年桃| 五月婷婷开心网| 五月天综合激情网| 无码人妻aⅴ一区二区三区有奶水| 亚洲欧美在线视频免费| 九九九久久久久| 自拍偷拍福利视频| 韩国av网站在线| 亚洲在线免费播放| 天天躁日日躁狠狠躁av麻豆男男| 一区二区三区精品视频在线观看| 久久国产欧美精品| 国产人妖一区| 欧美激情二区三区| 青青操在线视频| 911国产精品| 日本少妇毛茸茸高潮| 国产日产欧美一区| 天堂av在线8| 精品9999| 亚洲国产成人不卡| 国偷自产视频一区二区久| 国产精品aaaa| 人人超在线公开视频| 亚洲精品视频久久| 国产女人18毛片水18精| 亚洲成国产人片在线观看| av手机在线播放| 成人黄色777网| 向日葵污视频在线观看| 亚洲毛片av| 在线观看成人av电影| 神马久久影院| 91精品在线一区| 国产精品伦理| 欧美精品做受xxx性少妇| 国产中文在线视频| 日韩美女天天操| 国产精品无码粉嫩小泬| 亚洲不卡在线观看| 久久精品亚洲a| 久久精品在这里| 中文字幕制服丝袜| 精品一区二区三区久久久| 欧美日韩亚洲第一| 欧美日韩免费| 中文字幕一区二区三区四区五区六区| 日本国产精品| 国产精品12| 台湾天天综合人成在线| 国产成人一区二区三区小说| av资源中文在线天堂| 久久国产精品久久久久久| аⅴ资源新版在线天堂| 精品偷拍各种wc美女嘘嘘| 亚洲精品综合久久| 欧美一区二区三区性视频| 最好看的日本字幕mv视频大全| 精品国产户外野外| 免费看一级一片| 亚洲精品国久久99热| 日韩精品久久久久久久的张开腿让| 久久青草欧美一区二区三区| 91黄色免费视频| 成人精品视频.| 波多野结衣三级视频| 国内外成人在线| 蜜臀一区二区三区精品免费视频| 视频一区免费在线观看| 春日野结衣av| 国产婷婷精品| 熟女少妇在线视频播放| 中文日韩欧美| 日本欧美黄色片| 亚洲人成毛片在线播放女女| 国产美女在线一区| 日韩一区二区免费看| 黄色国产一级视频| 99精品欧美| 精品视频一区二区在线| 美女精品在线| 三级a在线观看| 美日韩一区二区三区| 久久这里只精品| 韩国三级中文字幕hd久久精品| 手机av在线免费| 国产精品1区2区3区| 日本久久久久久久久久| gogo大胆日本视频一区| 在线免费观看日韩av| 国产视频一区二区在线观看| 免费看一级黄色| 亚洲黄色录像片| 国产乡下妇女做爰| 一本大道久久a久久精品综合| 色老头一区二区| 欧美日韩你懂得| 国产成人毛毛毛片| 亚洲精品国产美女| 国产三级视频在线播放线观看| 深夜福利亚洲导航| h片在线免费观看| 91精品国产91久久久久久| 婷婷激情一区| 成人黄色影片在线| 韩国精品福利一区二区三区| 欧美高清性xxxxhdvideosex| 欧美疯狂party性派对| 国产亚洲精品久久久久久久| 99精品国产一区二区青青牛奶| 99视频精品免费| 国模大尺度一区二区三区| 中文字幕人妻一区二区三区| 国产午夜久久久久| 午夜精品福利在线视频| 午夜精品福利在线| 中文在线观看av| 亚洲精品一线二线三线无人区| 毛片免费在线| 欧美成人高清视频| 不卡一二三区| 亚洲综合色激情五月| 免费黄色成人| 日韩精品福利片午夜免费观看| 国产精品日韩精品欧美精品| 成人av毛片在线观看| 波多野结衣中文一区| 手机免费观看av| 午夜久久福利影院| 国产精品久久久国产盗摄| 亚洲精品美女视频| а√中文在线8| 国产成人av在线播放| 91精品啪在线观看国产手机| 日韩欧美第二区在线观看| 狠狠88综合久久久久综合网| 一区二区三区 日韩| 成人免费精品视频| 国精产品视频一二二区| 欧美午夜女人视频在线| 国产黄色片网站| 中文字幕日韩av电影| 川上优av中文字幕一区二区| 亚洲综合在线做性| 成人看的视频| 成人三级视频在线播放| 成人精品视频一区| 欧美精品久久久久性色| 7777精品伊人久久久大香线蕉 | 精品深夜av无码一区二区老年| 在线观看欧美精品| 爽爽视频在线观看| 欧美肥婆姓交大片| 国产麻豆精品| 亚洲一区二区三区精品动漫| 鲁大师成人一区二区三区| 男人的天堂影院| 一区二区三区加勒比av| 97人妻精品一区二区三区软件 | 免费成人在线网站| 亚洲一级中文字幕| 精品电影在线观看| 人妻少妇精品无码专区久久| 欧美激情一区二区三级高清视频| 在线免费观看亚洲| 中文精品一区二区三区| 麻豆国产欧美一区二区三区| 中文字幕在线1| 色哟哟国产精品| 视频在线不卡| 欧美一区二区三区图| 欧美一级全黄| 欧美丰满熟妇bbbbbb百度| 播五月开心婷婷综合| 国产成人无码一区二区三区在线| 亚洲国产日韩欧美在线图片| 成人影院在线播放| 国产美女精品在线观看| 亚洲激情社区| 搡老熟女老女人一区二区| 欧美日韩国产精品专区| 青青草免费在线| 国产精品91久久| 青青草原综合久久大伊人精品| 亚洲一区二区蜜桃| 国产精品美女久久久久久| 97视频免费在线| 九色精品免费永久在线| 6080成人| 女人天堂av手机在线| 久久精品欧美一区二区三区麻豆| 中文字幕 日韩有码| 久久精品在线视频| 在线观看视频一区二区三区 | 日本免费新一区视频| 国产7777777| 555www色欧美视频| 青青草原av在线| 久久久久久高清| 青青草国产成人av片免费| 国内毛片毛片毛片毛片毛片| 日韩一区二区在线看片| 九九色在线视频| 欧美日韩一区二 | 亚洲日本视频| 扒开jk护士狂揉免费| 在线观看91精品国产麻豆| 亚洲小说区图片区都市| 欧美国产视频在线观看| 久久99在线观看| 日本五十熟hd丰满| 在线视频免费一区二区| 视频二区欧美| 国产福利视频在线播放| 亚洲日本电影在线| 午夜在线视频免费| 国产一区私人高清影院| 伊人久久成人| 青青青视频在线播放| 精品久久久久久久久久久久包黑料 | 91在线播放视频| 乱人伦精品视频在线观看| 日韩三级久久久| 精品视频在线观看日韩| 久久69成人| 国产欧美日韩网站| 国产精品九色蝌蚪自拍| 日韩精品一二| 91香蕉嫩草影院入口| 午夜在线精品偷拍| 国产精品九九九九九九| 亚洲一区二区久久久| 国产成人在线中文字幕| 天天干天天玩天天操| 欧美视频在线看| 欧美人与牲禽动交com |