該插件與 Doling 集成,將PDF 、 Word 文件和其他輸入格式的結構化處理引入您的 spaCy 管道。它以基於文字的格式輸出乾淨的結構化數據,並創建 spaCy 熟悉的Doc
對象,使您可以存取帶有標籤的文字範圍(如章節或標題)以及資料轉換為pandas.DataFrame
表格。
此工作流程可以輕鬆地將強大的NLP 技術應用於文檔,包括語言分析、命名實體識別、文字分類等。它也非常適合為 RAG 管道實施分塊。
️ 該軟體包需要Python 3.10或更高版本。
pip install spacy-layout
使用nlp
物件初始化spaCyLayout
預處理器以進行標記化後,您可以在文件路徑上呼叫它,將其轉換為結構化資料。產生的Doc
物件包括映射到原始原始文字並公開各種屬性(包括內容類型和佈局功能)的佈局跨度。
import spacy
from spacy_layout import spaCyLayout
nlp = spacy . blank ( "en" )
layout = spaCyLayout ( nlp )
# Process a document and create a spaCy Doc object
doc = layout ( "./starcraft.pdf" )
# The text-based contents of the document
print ( doc . text )
# Document layout including pages and page sizes
print ( doc . _ . layout )
# Tables in the document and their extracted data
print ( doc . _ . tables )
# Layout spans for different sections
for span in doc . spans [ "layout" ]:
# Document section and token and character offsets into the text
print ( span . text , span . start , span . end , span . start_char , span . end_char )
# Section type, e.g. "text", "title", "section_header" etc.
print ( span . label_ )
# Layout features of the section, including bounding box
print ( span . _ . layout )
# Closest heading to the span (accuracy depends on document structure)
print ( span . _ . heading )
如果您需要大規模處理大量文檔,可以使用spaCyLayout.pipe
方法,該方法採用路徑或位元組的可迭代物件並產生Doc
物件:
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
for doc in layout . pipe ( paths ):
print ( doc . _ . layout )
處理完文件後,您可以以 spaCy 的高效二進位格式序列化結構化Doc
對象,這樣您就不必重新執行資源密集型轉換。
spaCy 還允許您在已建立的Doc
上呼叫nlp
對象,因此您可以輕鬆應用元件管道進行語言分析或命名實體識別、使用基於規則的匹配或使用 spaCy 可以執行的任何其他操作。
# Load the transformer-based English pipeline
# Installation: python -m spacy download en_core_web_trf
nlp = spacy . load ( "en_core_web_trf" )
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
# Apply the pipeline to access POS tags, dependencies, entities etc.
doc = nlp ( doc )
表格包含在帶有標籤"table"
佈局範圍中,並位於快捷方式Doc._.tables
下。它們公開layout
擴充屬性以及屬性data
,其中包括轉換為pandas.DataFrame
表格資料。
for table in doc . _ . tables :
# Token position and bounding box
print ( table . start , table . end , table . _ . layout )
# pandas.DataFrame of contents
print ( table . _ . data )
預設情況下,跨距文字是佔位符TABLE
,但您可以透過向spaCyLayout
提供display_table
回呼來自訂表格的呈現方式,該回呼接收資料的pandas.DataFrame
。這允許您將表格數字包含在文件文字中並在以後使用它們,例如在使用經過訓練的命名實體識別器或文字分類器來提取資訊期間。
def display_table ( df : pd . DataFrame ) -> str :
return f"Table with columns: { ', ' . join ( df . columns . tolist ()) } "
layout = spaCyLayout ( nlp , display_table = display_table )
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
print ( doc . _ . layout )
for span in doc . spans [ "layout" ]:
print ( span . label_ , span . _ . layout )
屬性 | 類型 | 描述 |
---|---|---|
Doc._.layout | DocLayout | 文檔的佈局特徵。 |
Doc._.pages | list[tuple[PageLayout, list[Span]]] | 文件中的頁面及其包含的跨度。 |
Doc._.tables | list[Span] | 文件中的所有表格。 |
Doc.spans["layout"] | spacy.tokens.SpanGroup | 佈局跨越文檔。 |
Span.label_ | str | 提取的佈局範圍的類型,例如"text" 或"section_header" 。請參閱此處了解選項。 |
Span.label | int | 跨度標籤的整數 ID。 |
Span.id | int | 佈局跨度的運行索引。 |
Span._.layout | SpanLayout | None | 佈局跨度的佈局特徵。 |
Span._.heading | Span | None | 最接近跨度的航向(如果有)。 |
Span._.data | pandas.DataFrame | None | 表跨度的提取資料。 |
屬性 | 類型 | 描述 |
---|---|---|
page_no | int | 頁碼(1-索引)。 |
width | float | 頁面以像素為單位。 |
height | float | 頁面高度(以像素為單位)。 |
屬性 | 類型 | 描述 |
---|---|---|
pages | list[PageLayout] | 文檔中的頁面。 |
屬性 | 類型 | 描述 |
---|---|---|
x | float | 邊界框的水平偏移(以像素為單位)。 |
y | float | 邊界框的垂直偏移(以像素為單位)。 |
width | float | 邊界框的寬度(以像素為單位)。 |
height | float | 邊界框的高度(以像素為單位)。 |
page_no | int | 跨度所在的頁數。 |
spaCyLayout
spaCyLayout.__init__
初始化文件處理器。
nlp = spacy . blank ( "en" )
layout = spaCyLayout ( nlp )
爭論 | 類型 | 描述 |
---|---|---|
nlp | spacy.language.Language | 用於標記化的初始化nlp 物件。 |
separator | str | 用於分隔建立的Doc 物件中的各個部分的令牌。分隔符號不會成為佈局範圍的一部分。如果None ,則不會新增分隔符號。預設為"nn" 。 |
attrs | dict[str, str] | 覆寫自訂 spaCy 屬性。可以包含"doc_layout" 、 "doc_pages" 、 "doc_tables" " 、 " "span_layout" " 、 "span_data" 、 "span_heading" 和"span_group" 。 |
headings | list[str] | Span._.heading 偵測要考慮的標題標籤。預設為["section_header", "page_header", "title"] 。 |
display_table | Callable[[pandas.DataFrame], str] | str | 用於在Doc.text 或占位符文字中產生表格的基於文字表示的函數。預設為"TABLE" 。 |
docling_options | dict[InputFormat, FormatOption] | 傳遞給 Doling 的DocumentConverter 的格式選項。 |
退貨 | spaCyLayout | 初始化的物件。 |
spaCyLayout.__call__
處理文件並建立一個包含文字內容和佈局範圍的 spaCy Doc
對象,預設可透過Doc.spans["layout"]
取得。
layout = spaCyLayout ( nlp )
doc = layout ( "./starcraft.pdf" )
爭論 | 類型 | 描述 |
---|---|---|
source | str | Path | bytes | 要處理的文件路徑或位元組。 |
退貨 | Doc | 處理後的 spaCy Doc 物件。 |
spaCyLayout.pipe
處理多個文件並建立 spaCy Doc
物件。如果您要大規模處理大量文檔,則應該使用此方法。
layout = spaCyLayout ( nlp )
paths = [ "one.pdf" , "two.pdf" , "three.pdf" , ...]
docs = layout . pipe ( paths )
爭論 | 類型 | 描述 |
---|---|---|
sources | Iterable[str | Path | bytes] | 要處理的文件或位元組的路徑。 |
產量 | Doc | 處理後的 spaCy Doc 物件。 |