精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

麻豆成人在线播放| 色综合久久88| 美女在线视频一区二区| 在线播放毛片| 国产很黄免费观看久久| 久久露脸国产精品| 日韩中文字幕有码| 欧美影院精品| 一道本成人在线| 不卡中文字幕在线| 色呦呦视频在线| 日韩福利视频网| 久久躁狠狠躁夜夜爽| 白嫩情侣偷拍呻吟刺激| 精品久久久网| 天天做天天摸天天爽国产一区| 青青草成人网| 亚洲免费黄色片| 日本va欧美va瓶| 国模吧一区二区| 999福利视频| 亚洲黄色录像| 欧美成人精精品一区二区频| 国产视频一区二区视频| 国产秀色在线www免费观看| av电影天堂一区二区在线观看| 国产在线视频欧美| 成人毛片18女人毛片| 亚洲免费二区| 在线观看视频99| 超碰97在线资源站| 亚洲一二av| 在线观看91精品国产麻豆| 无码粉嫩虎白一线天在线观看 | 日本人体一区二区| 日本在线视频网| 久久五月婷婷丁香社区| 国产精品一区二区av| 国产精品久久久久久69| 老**午夜毛片一区二区三区| 国内偷自视频区视频综合| 亚洲欧美精品aaaaaa片| 欧美综合另类| 亚洲人永久免费| 国产麻豆天美果冻无码视频| 国产成人一二片| 日韩视频免费直播| 天美一区二区三区| 伊人久久精品| 欧美日韩免费一区二区三区视频| av动漫免费看| 黄色亚洲网站| 欧美日韩亚洲91| 5月婷婷6月丁香| 国产不卡人人| 精品久久久国产| 男人日女人下面视频| 妞干网免费在线视频| 欧美日韩性生活视频| 激情深爱综合网| 蜜桃视频在线观看播放| 午夜a成v人精品| 国产乱子伦农村叉叉叉| 女厕盗摄一区二区三区| 色呦呦国产精品| 国产免费视频传媒| 成人精品国产亚洲| 欧美男女性生活在线直播观看| 日本人视频jizz页码69| 精品176极品一区| 日韩欧美一区中文| 激情综合激情五月| 台湾亚洲精品一区二区tv| 亚洲精品日韩在线| 极品尤物一区二区| 91精品婷婷色在线观看| 欧美精品videofree1080p| 日韩三级小视频| 久久国产欧美| 91久久久亚洲精品| 亚洲av无码国产精品永久一区| 豆国产96在线|亚洲| 蜜桃传媒一区二区| 毛片av在线| 亚洲制服丝袜一区| 激情综合在线观看| 久久精品国产福利| 日韩精品一区二区三区视频| 黄色网址在线视频| 成人免费电影网址| 欧美黄色片免费观看| 日日摸天天添天天添破| 久久精品99国产国产精| 国产成人免费电影| 国产永久免费高清在线观看| 亚洲人午夜精品天堂一二香蕉| 欧美aaa在线观看| 19禁羞羞电影院在线观看| 黑人巨大精品欧美一区二区三区| 久久国产激情视频| 成人av动漫| 日韩中文字幕视频在线观看| 国产无码精品在线播放| 强制捆绑调教一区二区| 国产精品手机在线| 91亚洲精选| 精品色蜜蜜精品视频在线观看| jizz欧美性11| 欧美调教网站| 欧美成人一二三| 波多野结衣mp4| 北条麻妃一区二区三区| 西游记1978| 欧美日韩国产观看视频| 日韩欧美一区二区在线视频| 美国黄色特级片| 亚洲黄色视屏| 亚洲精品免费在线视频| 福利在线播放| 欧美日韩亚洲一区二| 2025中文字幕| 国产精品久久久久一区二区三区厕所| 欧美一区二区大胆人体摄影专业网站| 国产精品无码天天爽视频| 久久久精品免费网站| av网站大全免费| vam成人资源在线观看| 国产一区二区三区在线| 亚洲天堂一区在线观看| 粉嫩aⅴ一区二区三区四区| eeuss中文| 久久久国产精品网站| 亚洲系列中文字幕| 91美女免费看| 99久久婷婷国产综合精品电影| 国内精品国产三级国产99| 国产第一精品| 中文欧美在线视频| 久久久久久久亚洲| 久久久久久久久久久电影| www成人免费| 91蝌蚪精品视频| 欧美国产日产韩国视频| 亚洲一区在线观| 国产精品人成在线观看免费| 国产一级不卡毛片| 成人看的羞羞网站| 国产精品福利在线观看网址| 黄色片在线看| 欧美主播一区二区三区| 免费人成又黄又爽又色| 老司机免费视频久久| 欧美极品色图| 欧美精选视频一区二区| 国产一区二区三区久久精品 | 91精品国产91久久久久久最新毛片| 超碰人人干人人| 精品伊人久久久久7777人| 黄色www在线观看| 日韩激情综合| 久久久人成影片一区二区三区观看 | 大片免费在线看视频| 制服丝袜成人动漫| 福利所第一导航| 成人美女视频在线观看18| 加勒比成人在线| 亚洲都市激情| 国产精品久久婷婷六月丁香| 欧美成人高清在线| 欧美一级国产精品| 日韩欧美亚洲一区二区三区| 久久日韩精品一区二区五区| 在线观看高清免费视频| 国产精品99视频| 成人欧美一区二区| 亚洲性色av| 丝袜亚洲另类欧美重口| 99在线观看免费| 午夜亚洲国产au精品一区二区| 亚洲乱码国产乱码精品精大量| 日精品一区二区| 免费观看中文字幕| 精品亚洲精品| 国产精品视频1区| 日本在线视频www鲁啊鲁| 亚洲精美色品网站| 亚洲视频在线观看一区二区| 一区二区三区**美女毛片| 三级男人添奶爽爽爽视频| 日本不卡高清视频| 免费一级淫片aaa片毛片a级| 久久av超碰| 91夜夜揉人人捏人人添红杏| 日韩影院在线| 蜜臀久久99精品久久久久久宅男 | 久操网在线观看| 成人久久综合| 国产乱人伦精品一区二区| 精品欧美一区二区三区在线观看| 免费av一区二区| 国产在线视频资源| 日韩精品一区二区三区中文不卡 | 欧美一三区三区四区免费在线看| 日韩欧美不卡视频| 国产精品久久久久久亚洲毛片| 无码人妻丰满熟妇啪啪网站| 日韩和的一区二区| 男女视频网站在线观看| 欧美gay男男猛男无套| 狠狠色噜噜狠狠色综合久| 91麻豆精品国产综合久久久| 欧美亚洲另类在线| 日本资源在线| 久久久国产精品免费| 久久精品蜜桃| 亚洲精品在线一区二区| 一区不卡在线观看| 色999日韩国产欧美一区二区| 久久黄色免费网站| 亚洲欧洲成人精品av97| 91精品国产自产| 国产91精品一区二区| gai在线观看免费高清| 久久青草久久| 国产 福利 在线| 狠狠综合久久av一区二区老牛| 一区二区三区欧美在线| 国产精品亚洲二区| 国产日韩欧美精品| 亚洲精品国产九九九| 亚洲a成v人在线观看| 国产香蕉久久| 国产精品精品视频一区二区三区| 三级中文字幕在线观看| 97超碰蝌蚪网人人做人人爽| 美女日批视频在线观看| 欧美丰满片xxx777| jizzjizz亚洲| 久久天堂av综合合色| 免费a级人成a大片在线观看| 在线亚洲午夜片av大片| 韩日视频在线| 在线成人免费网站| 国产系列在线观看| 亚洲午夜国产成人av电影男同| 日本黄在线观看| 亚洲男人天堂网| 久久视频www| 国产午夜精品视频免费不卡69堂| 免费黄色在线视频网站| 亚洲精品少妇网址| 国产高清免费在线播放| 在线视频亚洲欧美| 日韩三级影院| 美乳少妇欧美精品| 牛牛精品视频在线| 98精品国产高清在线xxxx天堂| 两个人看的在线视频www| 欧美性一区二区三区| 偷拍中文亚洲欧美动漫| 国产精品视频网址| 99re8精品视频在线观看| 91精品国产一区二区三区动漫 | 97av中文字幕| 国产精品mv在线观看| 欧美精品卡一卡二| 乱码第一页成人| 性欧美videossex精品| 久草热8精品视频在线观看| 亚洲一区二区三区四区精品| 成人动漫视频在线| 中文字幕丰满孑伦无码专区| 欧美韩日一区二区三区四区| 成年人二级毛片| 亚洲国产日韩a在线播放性色| 亚洲一区欧美在线| 在线看国产一区二区| 国产又黄又大又粗的视频| 日韩一卡二卡三卡| 日韩一区二区三区中文字幕| 正在播放欧美视频| 欧美性受ⅹ╳╳╳黑人a性爽| 97在线看福利| 国产美女久久| 国产一区精品在线| 成人在线视频免费观看| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 成人丝袜视频网| 国产一二三四五区| 亚洲欧美成人一区二区三区| 国产做受高潮漫动| 欧美精选午夜久久久乱码6080| 欧美视频在线观看一区二区三区| 亚洲日韩中文字幕| 日韩影视在线| 国产精品久久久久久久久久东京| 欧美国产亚洲精品| 日韩av图片| 伊人久久亚洲影院| 在线观看国产一级片| 91亚洲国产成人精品一区二三 | 国产日韩在线看| 色先锋久久影院av| 日韩精品福利片午夜免费观看| 天堂精品中文字幕在线| 麻豆av免费看| 国产精品短视频| 亚洲第一网站在线观看| 欧美不卡一二三| 午夜在线视频播放| 热99精品里视频精品| 91精品啪在线观看国产爱臀 | 亚洲在线视频福利| 精品freesex老太交| 亚洲 欧美 日韩 国产综合 在线| 精品亚洲国内自在自线福利| 亚洲熟妇无码av| 亚洲欧美日韩综合aⅴ视频| 国产91av在线播放| 日韩精品在线观看一区| 毛片网站在线看| 亚洲综合日韩在线| 天天射—综合中文网| 熟女人妇 成熟妇女系列视频| 不卡一区二区在线| 久久久久久国产精品视频| 4438x成人网最大色成网站| 国产女人在线视频| 国产99久久精品一区二区 夜夜躁日日躁| 91精品尤物| 免费高清一区二区三区| 国产自产高清不卡| 亚洲一级二级片| 欧美美女直播网站| 日本网站在线免费观看视频| 国产精品久久久久久久电影| 夜夜躁狠狠躁日日躁2021日韩| 激情深爱综合网| 91捆绑美女网站| 国产成人精品网| 亚洲免费人成在线视频观看| 悠悠资源网亚洲青| 欧美 日韩 国产在线| 久久久噜噜噜| 蜜臀久久99精品久久久久久| 欧美亚洲丝袜传媒另类| av网页在线| 成人av资源在线播放| 欧美残忍xxxx极端| 日韩在线一区视频| 一区二区三区中文字幕在线观看| 国产ts变态重口人妖hd| 欧美日韩国产成人在线| 国产66精品| 凹凸国产熟女精品视频| 国产日韩av一区| 亚洲一卡二卡在线| 欧美成人精品激情在线观看| 亚洲高清在线一区| 青青艹视频在线| 欧美国产日韩亚洲一区| 一区精品在线观看| 久久夜精品香蕉| 都市激情久久| 亚洲国产精品毛片av不卡在线| 国产精品私人自拍| 精品国自产在线观看| 性欧美在线看片a免费观看| 亚洲精品中文字幕99999| 亚洲一区二区蜜桃| 亚洲手机成人高清视频| 亚洲免费一级片| 国产z一区二区三区| 99久久www免费| 95视频在线观看| 日本韩国欧美三级| 国产三区视频在线观看| 国模一区二区三区私拍视频| 老司机久久99久久精品播放免费| 日韩av手机在线免费观看| 精品盗摄一区二区三区| 亚洲第一二三四区| 四虎4hu永久免费入口| 久久久久久久久99精品| 国产伦精品一区二区三区视频痴汉| 欧美黑人狂野猛交老妇| 久久99国内| 少妇伦子伦精品无吗| 色琪琪一区二区三区亚洲区| 八戒八戒神马在线电影| 蜜桃日韩视频| 国产精品一级二级三级| 日韩在线视频不卡| 精品中文字幕在线| 国产成人黄色| 91精品人妻一区二区三区四区| 欧美在线视频全部完| 久草在线视频福利| 中文字幕一区二区三区精彩视频| 97se亚洲国产综合自在线|