成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RAG文本切分LV3:輕松定制Markdown切分 原創(chuàng)

發(fā)布于 2024-9-18 14:55
瀏覽
0收藏

上篇文章我們介紹了借助LLM和OCR將文檔轉(zhuǎn)換成markdown的方法:??顛覆傳統(tǒng)OCR輕松搞定復雜PDF的工具??。本篇文章將介紹如何對markdown進行有效切分。

之前介紹了文本切分五個層級,本文方法是第三個層次:

Level 1: Character Splitting - 簡單的字符長度切分

Level 2: Recursive Character Text Splitting - 通過分隔符切分,然后遞歸合并

Level 3: Document Specific Splitting - 針對不同文檔格式切分 (PDF, Python, Markdown)

Level 4: Semantic Splitting - 語義切分

Level 5: Agentic Splitting-使用代理實現(xiàn)自動切分

基本概念和環(huán)境

分塊通常旨在將具有共同上下文的文本放在一起。考慮到這一點,我們可能希望特別尊重文檔本身的結構。例如,markdown 文件按標題組織。在特定標題組中創(chuàng)建塊是一種直觀的想法。為了解決這一挑戰(zhàn),我們可以使用MarkdownHeaderTextSplitter。這將按指定的一組標題拆分 markdown 文件。

本文用到的安裝包如下:


pip install langchain-text-splitters

切分實現(xiàn)

我們可以指定要拆分的標題headers_to_split_on,切分之后內(nèi)容按標題分組 :


markdown_document = "# Foo\n\n    ## Bar\n\nHi this is Jim\n\nHi this is Joe\n\n ### Boo \n\n Hi this is Lance \n\n ## Baz\n\n Hi this is Molly"

headers_to_split_on = [
    ("#", "Header 1"),
    ("##", "Header 2"),
    ("###", "Header 3"),
]

markdown_splitter = MarkdownHeaderTextSplitter(
  headers_to_split_on)
md_header_splits = markdown_splitter.split_text(
  markdown_document)
print(md_header_splits)

結果如下:


[Document(page_content='Hi this is Jim  \nHi this is Joe', metadata={'Header 1': 'Foo', 'Header 2': 'Bar'}),
Document(page_content='Hi this is Lance', metadata={'Header 1': 'Foo', 'Header 2': 'Bar', 'Header 3': 'Boo'}),
Document(page_content='Hi this is Molly', metadata={'Header 1': 'Foo', 'Header 2': 'Baz'})]

默認情況下,MarkdownHeaderTextSplitter從輸出塊的內(nèi)容中剝離被分割的標頭。可以通過設置strip_headers = False來禁用此功能。

markdown_splitter = MarkdownHeaderTextSplitter(
headers_to_split_on,
strip_headers=False)
md_header_splits = markdown_splitter.split_text(
markdown_document)
print(md_header_splits)

可以看到,標題添加到內(nèi)容中了


[Document(page_content='# Foo  \n## Bar  \nHi this is Jim  \nHi this is Joe', metadata={'Header 1': 'Foo', 'Header 2': 'Bar'}),
Document(page_content='### Boo  \nHi this is Lance', metadata={'Header 1': 'Foo', 'Header 2': 'Bar', 'Header 3': 'Boo'}),
Document(page_content='## Baz  \nHi this is Molly', metadata={'Header 1': 'Foo', 'Header 2': 'Baz'})]

如何將 Markdown 行返回為單獨的文檔

默認情況下,MarkdownHeaderTextSplitter根據(jù)headers_to_split_on中指定的標題聚合行。我們可以通過指定return_each_line來禁用此功能,使得一行就是一條內(nèi)容:


markdown_splitter = MarkdownHeaderTextSplitter(
headers_to_split_on,
return_each_line=True,
)
md_header_splits = markdown_splitter.split_text(markdown_document)
print(md_header_splits)

[Document(page_content='Hi this is Jim', metadata={'Header 1': 'Foo', 'Header 2': 'Bar'}),
Document(page_content='Hi this is Joe', metadata={'Header 1': 'Foo', 'Header 2': 'Bar'}),
Document(page_content='Hi this is Lance', metadata={'Header 1': 'Foo', 'Header 2': 'Bar', 'Header 3': 'Boo'}),
Document(page_content='Hi this is Molly', metadata={'Header 1': 'Foo', 'Header 2': 'Baz'})]

如何限制塊大小:

然后,我們可以在每個 markdown 組中應用任何我們想要的文本分割器,例如RecursiveCharacterTextSplitter,它允許進一步控制塊大小。


markdown_document = "# Intro \n\n    ## History \n\n Markdown[9] is a lightweight markup language for creating formatted text using a plain-text editor. John Gruber created Markdown in 2004 as a markup language that is appealing to human readers in its source code form.[9] \n\n Markdown is widely used in blogging, instant messaging, online forums, collaborative software, documentation pages, and readme files. \n\n ## Rise and divergence \n\n As Markdown popularity grew rapidly, many Markdown implementations appeared, driven mostly by the need for \n\n additional features such as tables, footnotes, definition lists,[note 1] and Markdown inside HTML blocks. \n\n #### Standardization \n\n From 2012, a group of people, including Jeff Atwood and John MacFarlane, launched what Atwood characterised as a standardisation effort. \n\n ## Implementations \n\n Implementations of Markdown are available for over a dozen programming languages."

headers_to_split_on = [
    ("#", "Header 1"),
    ("##", "Header 2"),
]

# MD splits
markdown_splitter = MarkdownHeaderTextSplitter(
    headers_to_split_on=headers_to_split_on, strip_headers=False
)
md_header_splits = markdown_splitter.split_text(markdown_document)

# Char-level splits
from langchain_text_splitters import RecursiveCharacterTextSplitter

chunk_size = 250
chunk_overlap = 30
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=chunk_size, chunk_overlap=chunk_overlap
)

# Split
splits = text_splitter.split_documents(md_header_splits)
splits


本文轉(zhuǎn)載自公眾號哎呀AIYA

原文鏈接:??https://mp.weixin.qq.com/s/58OJQoi-xuxdFhU02Q6uZg???

?著作權歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 国产精品久久久久国产a级 欧美日本韩国一区二区 | 91久久综合 | 久久99精品久久久久久琪琪 | 91免费视频 | 亚洲欧美激情网 | 国产精品视频一 | 在线久草| 亚洲成人精品在线观看 | 国产婷婷色一区二区三区 | 不卡一区 | 欧美成人a| 亚洲在线一区 | 亚洲高清视频在线 | 国产精品九九九 | 久久久www | 国产精品免费一区二区 | 在线视频 亚洲 | 日日爽| 成人在线视频观看 | av日韩在线播放 | 中文字幕日韩一区 | 成人在线视频免费看 | 亚洲国产福利视频 | 一区二区视频在线观看 | 99久久精品免费看国产四区 | 成人午夜激情 | 欧美在线一区二区三区 | 亚洲欧洲小视频 | 久久精品欧美一区二区三区不卡 | 国产日韩欧美一区二区 | 91久久精品一区二区三区 | 99热这里有精品 | 97伦理最新伦理 | 在线观看亚洲精品 | 日本一区二区不卡 | 国产精品国产a级 | 欧美国产视频 | 日韩精品在线观看免费 | 日韩免费av | 精品福利在线 | 国产精品成人一区二区 |