Adicionar app/io/pandoc.py
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# All comments in English.
|
||||
|
||||
import pypandoc
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
def normalize_newlines(value):
|
||||
if value is None:
|
||||
return ""
|
||||
return (
|
||||
str(value)
|
||||
.replace("\r\n", "\\n")
|
||||
.replace("\n\r", "\\n")
|
||||
.replace("\r", "\\n")
|
||||
.replace("\n", "\\n")
|
||||
)
|
||||
|
||||
def convert_document(path):
|
||||
"""
|
||||
Converts any supported document to plain text using Pandoc.
|
||||
Supported formats:
|
||||
- doc
|
||||
- docx
|
||||
- odt
|
||||
- txt
|
||||
- md
|
||||
- html
|
||||
"""
|
||||
|
||||
try:
|
||||
# Pandoc converts everything to plain text
|
||||
text = pypandoc.convert_file(path, "plain")
|
||||
except Exception as e:
|
||||
raise RuntimeError(f"Pandoc conversion failed: {str(e)}")
|
||||
|
||||
# Clean HTML artifacts if any
|
||||
soup = BeautifulSoup(text, "html.parser")
|
||||
cleaned = soup.get_text()
|
||||
|
||||
return normalize_newlines(cleaned)
|
||||
Reference in New Issue
Block a user