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

TextIn vs. DeepDoc性能測評:RAGFlow解析升級完整教程(附二開代碼)

人工智能
解析工具的開源和商業化產品分類、API 和本地部署的兩種調用方式、在三類場景(純文本、表格、圖片)下TextIn與 Deepdoc 的效果對比、TextIn在 RAGFlow中二開的兩種實現方式等。

兩個月前在星球的會員群中,有人推薦了TextIn這款解析工具。我當時也是第一次聽說,最近一段時間陸續在手頭項目上測試了些以往認為是 Corner Case 的復雜布局文檔后,發現居然都有不錯的表現。后續了解到TextIn背后的公司叫合合信息,看起來還是有點陌生,不過這家公司旗下另外一款叫做“掃描全能王”的產品各位應該聽說過或者用過。

本著 Garbage in, Garbage out 的理念,構建健壯企業級RAG應用涉及的眾多復雜組件集成與優化中,解析組件的選擇無疑是首當其沖的重點命題。我在之前的文章里已經介紹了幾期關于原生開發和使用 Langchian、Llamaindex 框架開發 RAG 應用的示例。為了針對性的評測 TextIn 的實際解析效果,這篇就結合 RAGFlow 框架(v0.20.4版本)來做個整體演示。

這篇試圖說清楚:

解析工具的開源和商業化產品分類、API 和本地部署的兩種調用方式、在三類場景(純文本、表格、圖片)下TextIn與 Deepdoc 的效果對比、TextIn在 RAGFlow中二開的兩種實現方式等。

1、解析工具分類

1.1是否開源

文檔解析工具分為開源和閉源兩大類,在開放性、可控性、成本和功能深度上存在明顯差別。開源工具例如 PyMuPDF、MinerU、Marker 等,商業化產品例如這篇要介紹的TextIn。

開源產品

開源產品的優勢首先肯定是免費,其次就是高透明度,可以根據需求進行二開。當然,活躍的開源社區可以貢獻代碼、修復漏洞、提供支持等。

但同時劣勢也很明顯,首先技術門檻高是繞不開的問題,對非技術團隊或資源有限的組織挑戰較大。同時,因為要依賴社區支持,響應速度和問題解決的專業性、保障性通常不如商業閉源產品的官方支持。最后也是最重要的,就是特定場景功能不足。針對特定行業場景(例如復雜的財務表格、醫療報告結構化)的預訓練模型或精細化處理能力,可能不如成熟的商業閉源產品。

商業化產品

商業化產品的劣勢在于使用成本與低透明度(無法直接修改核心代碼)。優勢也很明顯,就是開箱即用,易于集成。通常都會提供完善的前端界面、SDK、清晰的文檔和示例,集成相對簡單快捷,使用技術門檻低。技術支持、問題響應上也都比較成熟。其次,在深度優化與特定功能上往往都會比開源工具表現更為出色。 畢竟這些廠商投入大量資源進行核心算法研發、模型訓練(尤其在特定領域如法律合同、醫學文獻、復雜表格識別)和性能優化,總會在精度、特定場景覆蓋和功能深度上具備技術優勢。當然,還有個持續更新與維護的好處。 

1.2調用方式

在使用方法這個維度,主要有 API 調用和本地化部署兩類。

API 調用方法可以快速啟動,零運維。通常按需付費,避免了前期高昂的硬件和軟件許可投資。這點對于中小企業來說比較友好。但同時,對于中大型企業或者特定行業(金融,軍工等)往往不符合企業的數據合規要求。

本地部署模式反之最直接的好處,是可以保障數據安全與合規性。 文檔數據不用出本地,更容易滿足嚴格的合規和監管要求。劣勢就是相應的前期高投入,運維負擔重。部署復雜和上線周期長等問題。

總體來說,具體選擇往往取決于具體需求和資源情況。接下來的三個場景演示中,考慮便捷程度,演示環節選擇直接在TextIn的官網和RAGFlow的知識庫頁面進行直接評測對比,在RAGFlow的二開環節選擇直接集成Textin的 API 方式。

2、三類場景測評效果

為了盡可能的完整對比 Deepdoc 和 TextIn 在不同場景下的解析效果表現,這里用我歷史做過的項目中的幾個真實的 case 中純文本、復雜表格、圖文混排等三種類型的文檔,進行一個具體的測試。

2.1合同中的條款

首先是常見的法律法規類的純文本合同。這類文檔的格式相對比較規范,一般不涉及圖表,更多的是如何在分塊上能夠比較穩定的進行按照條款級進行切分。

上圖可以看到Textin 的條款識別是比較準確清晰的。同時,下圖可以看到 RAGFlow在Deepdoc 模式下對于條款的識別同樣沒什么問題。而且得益于 RAGFlow 提供了多種面向特定文檔類型的分塊策略(這里選擇是的 Law),所以針對這種典型的法規類文本可以精準的按照條款級進行分塊。這樣有利于保障每個分塊的語義獨立性和完整性。

從這個純文本的角度來看,Deepdoc 和 Textin 應該說是平分秋色,或者說 Deepdoc 作為原生集成的解析組件,使用起來無疑更加方便些。

2.2財報中的表格

緊接著來測試下更為常見的一些復雜表格的識別。這里選擇兩種情形。一種是涉及到跨頁的表格看下是否能夠正常的完成拼接。其次重要看下對于合并單元格的情形,看下是否會有文字錯位的情形。

跨頁表格

下面依次展示的是 Textin 和 Deepdoc 的解析結果,可以看到兩個解析效果依然是不分伯仲,都很好的完成了跨頁表格的重組。猜測二者都對這種情景做過單獨的優化。

合并單元格識別

以下展示的是 Deepdoc 與 Textin 的識別效果對比。二者在表格的主體內容上都完成了很準確的解析。包括表頭的合并單元的解析也都是準確的。但 Deepdoc 在這里犯了一個不小的錯誤是,把原本在“固定資產”和“應付賬款”兩行最后的一列備注(重大變動說明)內容進行了合并處理,而且還莫名的產生了合并單元格。而 Textin 則表現得依舊穩定。

Deepdoc 的這個錯誤看起來似乎不大,但是當用戶問及固定資產或者應付賬款的一些變動原因的時候,即使能夠召回這個分塊作為上下文,但是由于對應的說明內容被混在了一起,大模型可能無法準確的還原出財報上原本的解釋含義。

2.3圖文混排關聯

說完了文本和表格之后,肯定要來對比下圖片部分的處理效果了。為了提高測試難度,這部分以歷史文章中介紹過工程機械維保案例文檔(表格內嵌圖片)的一個頁面來看下。下圖依次是 Textin 和 Deepdoc 的回答,可以看出 Textin 比較完整的還原出了原始表格的布局。而 Deepdoc 則在圖示中丟失了原始的圖片,取而代之的是 v0.19 版本之后更新的原生快照。但這張快照是整個 PDF 頁面的完整截圖,而非案例中的具體故障部件圖片。

為了更好理解RAGFlow的原生圖文問答邏輯,手繪了下圖供各位做個參考。

進一步來說,當手動下載 Textin 解析好的MD文檔之后可以發現,其中的圖片是存到了Textin的服務器上,并通過一個公開訪問的鏈接回填到了文檔的對應位置。這和歷史文章中介紹過的通過預處理把文檔中的圖片先保存到 RAGFlow 的 Minio 實例上然后返回一個公開訪問 URL 鏈接的做法殊途同歸。

這種URL的方案關鍵優勢在于大模型生成答案會自然繼承源分塊中的<img>標簽,當包含 HTML 標簽的答案返回前端時,瀏覽器會自動解析<img>標簽并根據 URL 顯示圖片,最終實現圖文回答呈現。

簡單小結一下來說,Textin 作為一款成熟的商業解析工具,在復雜布局的圖表文檔上,相比與 RAGFlow 內置的 Deepdoc 而言是略勝一籌。關于在實際生產場景中如何使用的問題,肯定不是上述演示的那樣通過Textin 的官方或者本地調用Textin api 進行預處理之后再上傳到 RAGFlow 知識庫。更方便的方式還是進行系統層面的整合集成。以下演示置換和集成Deepdoc 的兩種做法。

3、Deepdoc 的解析器置換

如果你傾向于直接使用 TextIn 替換掉 Deepdoc,但又不想對 RAGFlow 的核心分塊邏輯進大改。關鍵是找到解析和分塊之間的解耦點,進行一次模塊置換。

3.1代碼溯源分析

為了找到這個解耦點,我深入分析了 RAGFlow 處理 PDF 的源碼,路徑位于 ragflow/rag/app/naive.py。整個流程的關鍵在于 chunk 函數。它通過調用 Pdf 類實例來獲得兩個核心變量:sections (文本段落列表) 和 tables (表格列表)。這兩個變量就是連接解析和分塊的數據總線。所以,理論上只要用 TextIn 生成同樣格式的 sections 和 tables,就能實現無縫替換。

3.2兩步走的改造方案

整個解析器的置換過程分為兩步,全部圍繞著 ragflow/rag/app/naive.py 文件展開。在開始之前,先通過 docker exec -it ragflow-server /bin/bash 進入容器,并備份一下原始文件,以防萬一。

cp /ragflow/rag/app/naive.py /ragflow/rag/app/naive.py.bak

改造 Pdf 解析類

首要任務是讓 RAGFlow 放棄調用自帶的 DeepDoc 解析流程。在 naive.py 文件中,找到 class Pdf(PdfParser): 這個類定義。這個類的 call 方法是 DeepDoc 執行 PDF 解析的入口。它原本包含了一系列復雜的步驟,如布局分析、表格識別等。沒必要全部刪除,只需要讓它提前結束即可。同時,可以保留第一步 self.images(...)的調用,因為 RAGFlow 在前端展示分塊對應的原文位置時,需要用到 PDF 的頁面截圖。將 call 方法修改如下:

# 文件路徑: /ragflow/rag/app/naive.py


class Pdf(PdfParser):
    def init(self):
        super().init()


    def call(self, filename, binary=None, from_page=0,
                 to_page=100000, zoomin=3, callback=None, separate_tables_figures=False):
        # ... (前面的代碼保持不變)


        # 保留這一步,為前端提供頁面截圖,確保原文定位功能正常
        self.images(
            filename if not binary else binary,
            zoomin,
            from_page,
            to_page,
            callback
        )
        # ... (前面的日志和回調保持不變)


        # 關鍵改造!直接返回空列表,讓DeepDoc的后續工作短路
        return [], []


        # ---- 以下所有DeepDoc的原生代碼都將被跳過,不再執行 ----
        # start = timer()
        # self._layouts_rec(zoomin)
        # ...

通過在中間插入一行 return [], [],就巧妙地架空了 DeepDoc。Pdf 這個類依然可以被正常調用,但它不再進行任何實質性的解析工作,只會返回兩個空的列表,為下一步注入 TextIn 的數據做好了鋪墊。

改造 chunk 調度函數

在同一個文件中,找到 def chunk(...) 函數,并定位到處理 PDF 的邏輯分支 elif re.search(r".pdf$", filename, re.IGNORECASE):,再找到 if layout_recognizer == "DeepDOC": 的內部代碼塊。這里是整個流程的總指揮室。就在這里注入調用 TextIn API 的代碼,然后寫一個適配器,把 API 返回的 JSON 數據,精確地轉換成 RAGFlow 內部流通的 sections 和 tables 數據格式。參考下述代碼,把 if layout_recognizer == "DeepDOC": 內部的代碼塊替換為以下內容:

# 文件路徑: /ragflow/rag/app/naive.py -> def chunk(...) -> if layout_recognizer == "DeepDOC":


            pdf_parser = Pdf()
            # 調用我們改造過的Pdf類,此時sections和tables都是空列表[]
            sections, tables = pdf_parser(filename if not binary else binary, from_page=from_page, to_page=to_page, callback=callback)


            # 【↓↓↓ TextIn注入模塊開始 ↓↓↓】
            import requests


            # 1. 設置API認證信息 (請替換成您自己的Key)
            headers = {
                'x-ti-app-id': 'YOUR_TEXTIN_APP_ID',
                'x-ti-secret-code': 'YOUR_TEXTIN_SECRET_CODE',
                'Content-Type': 'application/octet-stream'
            }


            # 2. 調用TextIn云端解析API
            result = requests.post(
                'https://api.textin.com/ai/service/v1/pdf_to_markdown',
                data=binary,
                headers=headers,
                params={ # 這里可以按需調整參數
                    'paratext_mode': 'none',
                    'formula_level': 2, # 關閉latex公式識別,節省資源
                    'page_start': from_page + 1,
                    'page_count': to_page - from_page
                }
            )


            # 3. 核心:構建適配器,將TextIn的JSON輸出轉換為RAGFlow內部格式
            json_data = result.json()
            detail = json_data.get('result', {}).get('detail', {})


            # 清空從pdf_parser那里繼承來的空列表,準備填充新數據
            sections = []
            tables = []


            for item in detail:
                page_id = item.get('page_id')
                text = item.get('text')


                # 清洗Markdown格式,因為分塊模塊需要的是純文本
                text = re.sub(r'\*\*(.+?)\*\*', r'\1', text)    # 去除加粗
                text = re.sub(r'_(.+?)_', r'\1', text)          # 去除斜體
                text = re.sub(r'!\[.*?\]\((.*?)\)', '', text)   # 刪除圖片標記


                type = item.get('type')
                position = item.get('position')


                # 坐標系轉換:TextIn的默認ppi是144,DeepDoc是72,需要除以2
                x0, y0, x1, y1  = position[0]/2.0, position[1]/2.0, position[4]/2.0, position[5]/2.0


                if type == 'paragraph':
                    # 按需篩選需要的文本類型,可以過濾掉頁眉頁腳等
                    if item.get('sub_type') not in ['text', 'text_title', 'table_title', 'sidebar']:
                        continue
                    # 偽裝成RAGFlow的sections格式: (文本, '@@頁碼\t坐標##')
                    sections.append((text, f'@@{page_id - from_page}\t{x0}\t{x1}\t{y0}\t{y1}##'))


                elif type == 'table':
                    # 對表格內容進行一些預處理
                    text = text.replace('<br>', '').replace('border="1"', '')
                    # 偽裝成RAGFlow的tables格式: ((None, HTML文本), [(頁碼, 坐標)])
                    tables.append(((None, text), [(page_id-1, x0, x1, y0, y1)]))


            callback(0.6, "TextIn parsing completed.")
            # 【↑↑↑ TextIn注入模塊結束 ↑↑↑】


            # 將由TextIn數據偽裝而成的sections和tables,無縫傳入原生的分塊函數
            res = tokenize_table(tables, doc, is_english)
            callback(0.8, "Finish parsing.")
            # ... 后續代碼保持不變

這段代碼的核心是 for 循環,它會逐字逐句地把 TextIn 的 JSON 翻譯成了 DeepDoc 的特定的 Python 列表和元組結構。通過這種方式,下游的 tokenize_table 和 tokenize_chunks 等分塊函數,完全感知不到上游的變化,可以繼續它們的工作。(注意,記得去Textin 官方獲取對應的訪問憑證,更新在上述腳本中。)

重啟服務生效

代碼修改完成后,需要將其應用到正在運行的 RAGFlow 服務中。使用 docker cp 命令將修改后的文件復制到容器內,覆蓋原始文件。

docker cp /path/to/your/local/naive.py ragflow-server:/ragflow/rag/app/naive.py

把 /path/to/your/local/ 替換成你本地 naive.py 文件所在的真實路徑。在 docker 文件夾下,執行以下命令,RAGFlow 會自動加載新的代碼。

docker compose restart

重啟完成后,RAGFlow 在處理 PDF 時就已經用上了 TextIn 解析服務。

3.3兩個都要怎么辦

通過直接覆寫 DeepDOC 的邏輯分支,實現了對解析器的替換。雖然這很直接,但無疑也犧牲了靈活性。一個更完美的方案是,在 RAGFlow 的 UI 上增加一個“TextIn”的選項,用戶可以自由切換。要實現這一點,需要進行一次小型的全棧開發,包括后端邏輯的擴展和前端界面的修改。   

后端改造

后端的修改依然是在 ragflow/rag/app/naive.py 文件中進行。思路是不再替換,而是新增。具體來說,首先把注釋或刪除的 DeepDOC 分支下的原生代碼恢復原狀。確保當 layout_recognizer == "DeepDOC"時,執行的是原生的 DeepDoc 解析流程。其次,新增 TextIn 的邏輯分支。在 if layout_recognizer == "DeepDOC":代碼塊之后,增加一個新的 elif 分支,專門用于處理 TextIn 的邏輯。修改后的代碼結構會是這樣。

# 文件路徑: /ragflow/rag/app/naive.py -> def chunk(...)


    # ...
    elif re.search(r"\.pdf$", filename, re.IGNORECASE):
        layout_recognizer = parser_config.get("layout_recognize", "DeepDOC")
        # ...


        if layout_recognizer == "DeepDOC":
            #
            # 這里是RAGFLOW原生的、完整的DEEPDOC解析代碼
            # 確保這部分代碼是未經修改的原始版本
            #
            pdf_parser = Pdf()
            sections, tables = pdf_parser(filename if not binary else binary, ...)
            res = tokenize_table(tables, doc, is_english)
            # ...


        elif layout_recognizer == "TextIn": # <--- 我們新增的分支
            #
            # 把我們之前編寫的TEXTIN API調用和適配器代碼
            # 完整地復制到這里
            #
            callback(0.1, "Start to parse with TextIn.")
            import requests


            headers = { 'x-ti-app-id': '...', 'x-ti-secret-code': '...' }
            # ... (完整的TextIn API調用和數據轉換邏輯) ...
            sections = []
            tables = []
            for item in detail:
                # ... (將JSON轉換為sections和tables)


            res = tokenize_table(tables, doc, is_english)
            callback(0.8, "Finish TextIn parsing.")


        else: # 處理 "Plain Text" 或 VisionParser 等其他情況
            #
            # 保持這部分代碼不變
            #
            if layout_recognizer == "Plain Text":
                # ...
    # ...

通過這樣的改造,后端現在具備了處理三種不同 layout_recognizer 值的能力:"DeepDOC", "TextIn", 和 "Plain Text"。只要前端能傳來正確的值,后端就能調用對應的解析邏輯。   

前端改造

如圖找到 layout-recognize-form-field.tsx 這個文件,從名字也可以看出來是布局識別表單字段。它就是一個用來選擇布局識別方式的表單組件。enum DocumentType 是數據源,在文件的第 16-19 行,可以看到一個枚舉(enum)定義。 在前端開發中,enum 是定義一組固定選項的“標準答案”。這里明確定義了“PDF 解析器”目前只有兩種合法的值:DeepDOC 和 Plain Text。

這是需要修改的第一個地方:

export const enum DocumentType {
  DeepDOC = 'DeepDOC',
  PlainText = 'Plain Text',
}

修改后:

export const enum DocumentType {
  DeepDOC = 'DeepDOC',
  TextIn = 'TextIn', // <-- 新增的選項,值必須與后端elif判斷的字符串一致
  PlainText = 'Plain Text',
}

const list = [...] 是選擇列表:在文件的第 28 行,可以看到這行代碼:

const list = [DocumentType.DeepDOC, DocumentType.PlainText].map(...)
  label: x === DocumentType.PlainText ? t(camelCase(x)) : 'DeepDOC',

這行代碼的作用是,從上面看到的 enum 標準答案中,取出 DeepDOC 和 PlainText 這兩個選項,然后用它們來生成一個列表(菜單),最終渲染成用戶在界面上看到的下拉選項。注意,需要同步修改下一行的 label 的生成邏輯,默認直接顯示選項的值本身,只對 PlainText 這個特例進行翻譯處理。修改后:

const list = [DocumentType.DeepDOC, DocumentType.TextIn, DocumentType.PlainText].map(...) 
  label: x === DocumentType.PlainText ? t(camelCase(x)) : x,

完成以上兩處修改后,就成功地從代碼層面為 RAGFlow 增加了 TextIn 選項。注意為了讓修改生效,還要執行如下步驟:

  • 在前端項目根目錄運行 npm install 確保依賴安裝完整(如果有 node 版本依賴沖突,就強制安裝 npm install --force)。
  • 運行 npm run build 編譯前端代碼,生成最新的靜態文件。
  • 將新生成的 dist 目錄下的內容,替換掉 RAGFlow 服務中對應的舊前端文件,并重啟 RAGFlow 服務。

以上修改的完整源碼見知識星球

4、寫在最后

RAG 系統的優化是一項環環相扣的工程。優質的文檔解析結果提供了系統運行的基礎,接下來,分塊策略也是影響 RAG 能力的重要因素。分塊策略目前業界也有很多思考,但其實際應用受制于輸入的結構化文件、上下文窗口長度等因素。這里也提出一些可能性,權當拋磚引玉。

  • 保留文檔結構:通過目錄樹(Root/Heading/Text/Table 等節點)維護標題層級關系和語義上下文,實現標題層級遞歸切片,保留文檔內在邏輯結構的完整性。
  • 動態處理長內容:超長文本/表格按固定窗口切分,標題節點合并子內容。
  • 優化檢索效率:以最小內容單元(子段落)作為檢索主體,提升匹配精度。
責任編輯:龐桂玉 來源: 韋東東
相關推薦

2019-04-02 15:07:51

API NginxZuul

2021-01-13 16:04:07

網絡On-Prem托管

2025-05-06 09:38:50

2021-12-23 15:36:21

NASSANDAS

2014-09-28 10:29:43

喬布斯施密特Android

2023-05-22 19:49:30

命令Linux

2020-08-25 09:14:17

對象存儲文件存儲塊存儲

2024-09-12 22:45:47

2025-02-18 16:00:00

代碼Python架構

2015-08-24 13:46:17

2013-12-06 10:36:03

谷歌計算引擎亞馬遜

2020-04-15 10:21:43

云計算AWSAzure

2017-07-13 16:20:28

代碼庫分布式代碼

2022-09-08 09:39:03

PythonOCR代碼

2022-08-04 14:54:50

APTDNFYUM

2015-03-19 11:03:49

Linuxwin10

2013-04-09 10:15:13

公有云私有云混合云

2025-07-08 08:12:31

2021-05-07 17:46:53

存儲IO

2009-02-27 09:42:00

無線產品企業家用
點贊
收藏

51CTO技術棧公眾號

久久久久久电影| 香蕉成人久久| 亚洲精品国产欧美| aaaaaa亚洲| 成人影欧美片| 99精品欧美一区二区蜜桃免费 | 超碰超碰在线| 99久久精品免费看国产| 国产精品久久久久影院日本| 欧美精品乱码视频一二专区| 免费久久精品| 日韩欧美中文字幕公布| 国产精品秘入口18禁麻豆免会员| 婷婷免费在线视频| 91毛片在线观看| 亚洲xxxx视频| 中文字幕乱码在线观看| 99精品视频免费观看| 久久久国产精品免费| 在线精品一区二区三区| 国产精区一区二区| 在线亚洲免费视频| 香港三级韩国三级日本三级| av激情在线| 国产精品麻豆视频| 精品无人乱码一区二区三区的优势| 国产一区二区波多野结衣| 欧美一级一区| 91av网站在线播放| 久久久无码精品亚洲国产| 国产精品久久久久9999赢消| 亚洲片av在线| 白嫩情侣偷拍呻吟刺激 | 亚洲一区二区免费看| 久久视频免费观看| 少妇视频在线播放| 精品国产91| 亚洲男人av电影| 精品人妻在线视频| 亚洲网一区二区三区| 制服丝袜成人动漫| 五月婷婷之婷婷| 国产国产一区| 欧美丝袜丝nylons| 国产一级特黄a大片免费| 625成人欧美午夜电影| 岛国精品视频在线播放| 91专区在线观看| av最新在线| 午夜精品福利久久久| 日本男女交配视频| 日本高清成人vr专区| 亚洲综合丁香婷婷六月香| 特级西西444| 18网站在线观看| 夜夜精品视频一区二区| 国产资源第一页| 手机av免费在线| 亚洲国产精品视频| 欧美爱爱视频免费看| 老司机深夜福利在线观看| 精品久久久久人成| 日韩av资源在线| 日韩经典一区| 欧美伦理视频网站| av影片在线播放| 精品av导航| 日韩精品在线视频| 99精品欧美一区二区| 97久久夜色精品国产| 久久国产精品偷| 国产极品美女高潮无套嗷嗷叫酒店| 亚洲网站啪啪| 日韩av观看网址| 在线观看国产精品视频| 国产精品88888| 国产精品一区视频网站| 色综合久久网女同蕾丝边| 国产人久久人人人人爽| 懂色av粉嫩av蜜臀av| 福利网站在线观看| 色婷婷综合久久| 一级黄色片在线免费观看| 日韩第一区第二区| 日韩国产高清视频在线| 精品熟妇无码av免费久久| 午夜日韩激情| 人人爽久久涩噜噜噜网站| 在线观看免费观看在线| 高清在线不卡av| 欧美日本亚洲| 超碰在线最新| 色诱亚洲精品久久久久久| 亚洲综合激情视频| 国产色噜噜噜91在线精品| 国产一区二区三区在线看 | 成人免费xxxxx在线观看| 丰满人妻一区二区三区免费| 久久精品一二三| 超碰10000| 成人免费av电影| 日韩精品一区二区三区中文不卡| 精品人妻无码一区二区三区| 亚洲区综合中文字幕日日| 日本精品视频网站| 国内精品久久久久久久久久久 | 精品免费视频.| 在线小视频你懂的| 黄色另类av| 国产欧美最新羞羞视频在线观看| 免费国产精品视频| 亚洲色图视频网| 免费在线观看的毛片| 国产精品qvod| 久久亚洲精品毛片| 欧美在线视频精品| 91在线国内视频| 成人午夜视频免费观看| 高清电影一区| 亚洲黄页视频免费观看| 青青草免费av| 精品写真视频在线观看| 日韩av电影免费播放| 国产一二三在线| 日韩欧美国产一区二区在线播放| 黑人と日本人の交わりビデオ| 国产精品美女久久久浪潮软件| 2022国产精品| yellow91字幕网在线| 欧美日韩国产精选| 极品久久久久久久| 日韩精品国产精品| 欧美一区二区三区在线播放 | 亚洲精品免费网站| 成人三级黄色免费网站| 色美美综合视频| 偷拍女澡堂一区二区三区| 黄色日韩精品| 国产精品xxxx| 美洲精品一卡2卡三卡4卡四卡| 制服丝袜一区二区三区| 日韩一区二区不卡视频| 久久99最新地址| 亚洲欧美综合一区| 日韩免费大片| 久久久97精品| 国产黄色高清视频| 亚洲激情图片qvod| 韩国av中国字幕| 国精品一区二区三区| 高清不卡日本v二区在线| 色婷婷在线播放| 精品1区2区在线观看| 久久精品免费在线| 国产成人精品影视| av免费观看大全| 爽爽窝窝午夜精品一区二区| 欧美一级片一区| 黑人与亚洲人色ⅹvideos| 在线观看成人免费视频| 天堂av网手机版| 精品夜夜嗨av一区二区三区| 亚洲自拍偷拍一区二区三区| 日韩三级不卡| 91国产中文字幕| 巨骚激情综合| 欧美日韩一区二区不卡| 日本 欧美 国产| 国产成人av影院| 男女激情无遮挡| 欧美日韩在线二区| 91免费在线视频| 99爱在线视频| 亚洲一区二区久久| 国产欧美久久久精品免费| 亚洲福利视频导航| 国产毛片久久久久久久| 精品一区精品二区高清| 久久综合久久网| 国产一区不卡| 亚洲自拍欧美色图| 亚洲黄色中文字幕| www国产精品com| 人妻偷人精品一区二区三区| 一本色道综合亚洲| 日本中文在线视频| 99久久精品国产精品久久| 日本在线观看免费视频| 国产精品多人| 视频一区二区在线| 大奶在线精品| 国产精品日韩在线播放| jizz一区二区三区| 最新中文字幕亚洲| 少妇精品视频一区二区| 欧美日韩一级大片网址| 日本一区二区不卡在线| 国产精品私人自拍| 亚洲天堂资源在线| 国产乱色国产精品免费视频| 粉嫩虎白女毛片人体| 午夜日韩电影| 宅男噜噜99国产精品观看免费| 精品视频高潮| 91亚洲永久免费精品| 欧美粗大gay| 久久乐国产精品| 国产午夜精品久久久久免费视| 亚洲开心激情网| 亚洲爱爱综合网| 欧美日韩一区久久| 亚洲高清毛片一区二区| 亚洲精选一二三| 国产黄色大片免费看| 99久久免费国产| 一卡二卡三卡四卡五卡| 美女一区二区视频| 成人观看免费完整观看| 亚洲性感美女99在线| 国产又爽又黄ai换脸| 国产一区99| 久久久亚洲综合网站| jizzjizzjizz欧美| 亚洲精品免费一区二区三区| 久久精品国产福利| 国产精品99免视看9| 成年女人在线看片| 欧美精品激情blacked18| 草莓福利社区在线| 久热精品视频在线观看| 在线播放麻豆| 色黄久久久久久| 户外极限露出调教在线视频| 亚洲精品视频免费| 神马电影在线观看| 亚洲黄页视频免费观看| 欧美性猛交 xxxx| 欧美精品一区二区三区蜜桃视频| 国产黄色av片| 精品欧美一区二区在线观看| jizz中国女人| 日韩欧美资源站| 黄色成人一级片| 亚洲成人教育av| 无码精品一区二区三区在线 | 99国产超薄丝袜足j在线观看 | 六月丁香婷婷色狠狠久久| 国产97色在线 | 日韩| 天堂蜜桃一区二区三区| caoporn超碰97| 麻豆精品国产91久久久久久 | 成人av网址在线| 免费看毛片的网站| 91免费在线看| 青娱乐国产视频| 国产精品福利一区二区| 国产性生活大片| 亚洲一区二区中文在线| 国产福利久久久| 狠狠色香婷婷久久亚洲精品| 国产女主播喷水视频在线观看| 91精品福利视频| 91中文字幕在线视频| 欧美一级高清片| 色网站免费观看| 亚洲小视频在线观看| 在线日本视频| 欧美放荡办公室videos4k| 91美女精品| 国产精品女视频| 视频一区国产| 欧美精品一区二区视频| 成人91在线| 日韩免费在线观看av| 国产毛片一区| 日本免费色视频| 不卡高清视频专区| 亚洲av成人无码久久精品| 亚洲人成亚洲人成在线观看图片| 日本午夜小视频| 欧美日韩在线观看一区二区| 午夜精品一区二区三| 亚洲欧美色婷婷| 国产午夜精品久久久久免费视| 777国产偷窥盗摄精品视频| 国产精品无码久久久久| 国产乱码精品一区二区三区日韩精品| 一区二区导航| 欧美另类videos| 鲁大师成人一区二区三区| 亚洲理论中文字幕| 97久久精品人人澡人人爽| 看黄色录像一级片| 欧美日韩在线视频一区二区| 国产又粗又长视频| 日韩成人免费视频| av网站在线免费| 国产成人免费av电影| 136国产福利精品导航网址应用| 欧美亚洲一级二级| 国产精品激情| 免费av不卡在线| 久久午夜免费电影| 久久久久久蜜桃| 欧美老女人在线| 精品资源在线看| 韩国视频理论视频久久| 欧美jizz18| 日韩高清专区| 国产农村妇女精品一区二区| 欧美熟妇另类久久久久久多毛| 国产三级一区二区| 日韩熟女精品一区二区三区| 91精品黄色片免费大全| 国产精品视频二区三区| 26uuu国产精品视频| 一区二区三区欧洲区| 三年中文高清在线观看第6集| 日本中文在线一区| 精品国产无码在线观看| 午夜久久电影网| www.色播.com| 久久久av网站| 国产免费av国片精品草莓男男| 深夜福利成人| 天堂成人国产精品一区| chinese麻豆新拍video| 亚洲一二三区在线观看| 国产丰满果冻videossex| 久久视频中文字幕| 色噜噜成人av在线| 视频一区二区三区在线观看 | 99久久综合网| 亚洲女厕所小便bbb| 国产尤物视频在线观看| 少妇高潮久久久久久潘金莲| 国产一区二区三区影视| 欧美一区二区三区电影在线观看| 国产精品最新自拍| 人妻熟女aⅴ一区二区三区汇编| 婷婷成人综合网| 亚洲av成人精品毛片| 欧美亚洲视频一区二区| 青青草原在线亚洲| av天堂永久资源网| 久久综合久久99| 国产一区二区视频网站| 国产午夜精品全部视频在线播放 | 在线免费精品视频| 国产小视频在线| 国产精品美乳在线观看| 日本一区二区免费高清| 一区二区三区 日韩| 中文字幕一区二区三区视频| 国产麻豆精品一区| 欧美人在线观看| 国产精品久久久久久久久久白浆| 男人添女荫道口喷水视频| 99视频精品在线| 亚洲欧美一区二区三区在线观看| 亚洲视频在线观看免费| 久久久国产精品网站| 日日噜噜夜夜狠狠久久丁香五月| 国产精品资源网站| 中文在线观看免费网站| 亚洲精选一区二区| 人人精品久久| 国产九色porny| 久久尤物电影视频在线观看| 欧美人一级淫片a免费播放| 色天天综合狠狠色| gogo人体一区| 国产a级片免费观看| 国产精品久久久久久久久免费丝袜 | 一区二区三区四区五区视频| 国产乱一区二区| 日产精品久久久| 色多多国产成人永久免费网站| 涩爱av色老久久精品偷偷鲁| 91视频 -- 69xx| 国产精品情趣视频| 国产77777| 国产精品大片wwwwww| 中文字幕免费一区二区| 中文字幕a在线观看| 欧美日韩视频在线观看一区二区三区 | 美女久久99| 天天做天天干天天操| 精品国产999| 男人的天堂在线视频免费观看 | 四虎影视国产在线视频| 免费日韩av电影| 国产伦精品一区二区三区免费| 亚洲一区欧美在线| 日韩视频一区在线| 亚洲激情播播| 国模大尺度视频| 在线观看成人小视频| 僵尸再翻生在线观看| 在线国产精品网|