Переводчик контента

cranston

Прогреваюсь
Привет, какие сейчас есть «безлимит» решения для перевода html статей?

Была идея собрать комп под нейронку и переводить через Gemma 3 27b, но решил подождать выхода mini pc от nvidia.
 
Вот немного деталей

Если парсишь откуда то - лучше делать классический парсер и отдавать модели чистый текст или хтмл. В случае если данные собираются с пачки сайтов ил нужен гибкий препроцессинг можно просто отдавать ей страницу с нужными инструкциями. Такой себе агентский режим из кода.

Python:
prompt = ChatPromptTemplate.from_messages([
    ("system",
     "Follow USER instructions exactly. Output ONLY what the USER requests. "
     "No explanations, no reasoning, no preamble."),
    ("human",
     "Task: In ONE concise sentence, say what this web page is about.\n"
     'Return EXACT JSON: {{"answer": "<one sentence>"}}\n\n'
     "HTML:\n```html\n{html}\n```\n\nAnswer:")
])

Я убираю ненужное чтобы не перегружать модель, тут еще нужна доработка.

Python:
def render_get_html(url: str) -> str:
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        ctx = browser.new_context()
        page = ctx.new_page()
        page.goto(url, wait_until="networkidle")
        page.wait_for_timeout(800)   # milliseconds
        html = page.content()
        browser.close()
    return html


def compact_rendered_html(full_html: str, max_chars: int = 20000) -> str:
    """Remove scripts/styles, collapse whitespace."""
    soup = BeautifulSoup(full_html, "html.parser")
    for t in soup(["script", "style", "noscript"]):
        t.decompose()
    text = str(soup)
    text = re.sub(r"\s+", " ", text)
    return text[:max_chars]

Запускаю Qwen3:8B в таком конфиге - работает быстрее. Качество устраивает, но если больше 20к символов загружать выдает ошибку. При базовых настройках выдает бред в ответе - игнорирует команды из промпта.

Python:
chat = ChatOllama(
    model="qwen3:8b",
    temperature=0.4,
    top_p=0.9,
    repeat_penalty=1.1,
    format="json",                  # ask model to emit JSON
    stop=["<think>", "</think>"],   # suppress chain-of-thought tags
    num_ctx=8192,
    num_predict=64,
    seed=42
)
 
Вот немного деталей

Если парсишь откуда то - лучше делать классический парсер и отдавать модели чистый текст или хтмл. В случае если данные собираются с пачки сайтов ил нужен гибкий препроцессинг можно просто отдавать ей страницу с нужными инструкциями. Такой себе агентский режим из кода.

Python:
prompt = ChatPromptTemplate.from_messages([
    ("system",
     "Follow USER instructions exactly. Output ONLY what the USER requests. "
     "No explanations, no reasoning, no preamble."),
    ("human",
     "Task: In ONE concise sentence, say what this web page is about.\n"
     'Return EXACT JSON: {{"answer": "<one sentence>"}}\n\n'
     "HTML:\n```html\n{html}\n```\n\nAnswer:")
])

Я убираю ненужное чтобы не перегружать модель, тут еще нужна доработка.

Python:
def render_get_html(url: str) -> str:
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        ctx = browser.new_context()
        page = ctx.new_page()
        page.goto(url, wait_until="networkidle")
        page.wait_for_timeout(800)   # milliseconds
        html = page.content()
        browser.close()
    return html


def compact_rendered_html(full_html: str, max_chars: int = 20000) -> str:
    """Remove scripts/styles, collapse whitespace."""
    soup = BeautifulSoup(full_html, "html.parser")
    for t in soup(["script", "style", "noscript"]):
        t.decompose()
    text = str(soup)
    text = re.sub(r"\s+", " ", text)
    return text[:max_chars]

Запускаю Qwen3:8B в таком конфиге - работает быстрее. Качество устраивает, но если больше 20к символов загружать выдает ошибку. При базовых настройках выдает бред в ответе - игнорирует команды из промпта.

Python:
chat = ChatOllama(
    model="qwen3:8b",
    temperature=0.4,
    top_p=0.9,
    repeat_penalty=1.1,
    format="json",                  # ask model to emit JSON
    stop=["<think>", "</think>"],   # suppress chain-of-thought tags
    num_ctx=8192,
    num_predict=64,
    seed=42
)
Попробовал подход. Модель давится контекстом. Срабатывает раз из десяти - если простая страница.
Сейчас делаю парсеры с курсором под каждый тип страницы.
Задаю XPATH к нужным блокам и шаблон json c форматом в каком отдать информацию.
Пробовал AI парсеры по типу oxylab - не зашло. Если у страницы сложная структура не тянут, нужно тоже в деталях прописывать что достать, потом проверять что выдало. Есть смысл если страница будет парсится массово или регулярно. + из коробки прокси есть.
 

Тред просматривают: (Всего: 0, Свои: 0, Залетные: 0)

Назад
Сверху