AI系列:使用大语言模型(LLM)编码--爬虫及自动翻译脚本实践

大语言模型(LLM)的语义识别能力使之成为翻译的必用工具。如果我在互联网上看到一篇不错的英文文章,如何翻译呢?
我能想到如下的方法:

  • 可以将手动内容复制下来,作为提示词输入到LLM对话界面,得到翻译的内容。
  • 可以开发自动脚本:爬取网页的内容,调用LLM的接口,获得翻译的内容。

使用LLM 生成自动脚本

使用自动脚本显得自己更厉害一点,所以我计划使用LLM对话产品,得到一个Python脚本来自动化这件事情。
这次帮我编写自动脚本的LLM对话产品是Google Bard。我之前一直使用免费的ChatGPT+GPT3.5,Bard也免费,这次试一下Bard将如何表现。

最后生成的自动脚本将调用某一个LLM的接口完成翻译工作。这里使用OpenAI Chat API

最初提示词

Google Bard上输入我的提示词:

帮我完成一个Python脚本,用以爬取网页上的一篇文章并使用AI进行翻译:
1. 输入为一个网页地址。
2. 爬取网页上的文章内容。
3. 使用LLM比如GPT来翻译文章内容从英文到中文。要考虑token的限制问题。

我实际上使用英文与Google的LLM进行的沟通。日常工作中,技术问题需要用英文,所以比较习惯。
按照我之前使用ChatGPT的经验,用英文或者中文区别不大。

这里是Google Bard的第一次回答:
Google Bard chat
Bard表现非常不错,从这次回答中可以看到:

  • 结构不错也很有条理,分成4部分:依赖,代码,关键点,提示。
  • 代码整体质量很好,尤其是分块的代码很高级。function定义也有。注释非常详细。后来我在自己的机器上调试和运行代码时,只进行了小小的改动,证明代码质量确实不错。
  • 在我明确要求用LLM的接口进行翻译情况下,Bard还是推荐了自家的Google Translate API;但注释起来了。我后来追问Google Translate API后台是否LLM,Bard回答说不是LLM。
  • 对于GPT的API没有具体的代码,Bard建议自己查相关文档。

多轮对话做调整

在后续进行的多轮对话过程中,我继续做了以下的要求:

  • 使用openai.chat.completions.create API
  • 从.env文件读取API key
  • 保留Google Translate的代码作为可选项
  • 生成完整的代码,包括import语句
  • 把爬取的原文和翻译后的内容分别放入一个文件

Bard 都很好完成了相应的代码修改。

除了技术方面,我自己在多轮对话中的感受:

  • Bard对使用GPT相关的问题,只有在你提示的特别清楚时才会做出相应的修改。我考虑是竞争对手的关系?
  • GPT相比Bard而言,使用感受更好,更让人感觉是良师益友。GPT经常使用Yes, certainly, my apologise等友好的字眼,另外GPT的回答通常比你期待的内容更多。
    Google Bard在态度上会稍微生硬和傲娇一点,比如我得一遍遍的告诉它,请输出完整代码;而Google Bard也不太会套近乎,有时候直接甩给你代码,让我感受到那么一点点压力。
    傲娇的Google Bard

最终代码调用LLM接口

在Bard生成的代码基础上,我自己只有三处小的改动:

  1. 拷贝到本地调试时,发现生成的代码中缺少 import os
  2. 修改LLM API的模型名称和参数。这次使用的是gpt-4-turbo-preview
  3. 自己手工分析了想要翻译的源网页,找到了文章的所在的element为div/w3-row-padding
    在这里插入图片描述

最终代码如下,如果有GPT的API key,可以写在.env文件中。
注:我没有测试Google Translate那部分代码。

__author__ = 'liyane' #要不要加上Bard的大名?

import requests
from bs4 import BeautifulSoup
import openai
from dotenv import load_dotenv, find_dotenv
import os

# Load API key from .env file
_ = load_dotenv(find_dotenv())

def crawl_and_translate(url, target_lang="zh-CN"):
    """
    Crawls an article from a web page, saves the original text, translates it,
    and saves the translated text to separate files.

    Args:
        url (str): The URL of the web page to crawl.
        target_lang (str, optional): The target language code (e.g., "zh-CN" for Chinese).
        Defaults to "zh-CN".

    Returns:
        None
    """

    # Fetch and parse the HTML content
    response = requests.get(url)
    response.raise_for_status()
    soup = BeautifulSoup(response.content, "html.parser")

    # Extract the article content
    article_text = soup.find("div", class_="w3-row-padding").get_text()  # Adjust selector as needed

    # Save the original text to a file
    with open("original_text.txt", "w", encoding="utf-8") as f:
        f.write(article_text)

    # Split the text into chunks for translation
    chunks = [article_text[i:i+10000] for i in range(0, len(article_text), 10000)]
    translated_chunks = []

    # Translate each chunk using GPT-4 chat.completions (if API key is available)
    openai_api_key = os.getenv("OPENAI_API_KEY")
    if openai_api_key:
        for chunk in chunks:
            response = openai.chat.completions.create(
                model="gpt-4-turbo-preview",
                messages=[
                    {"role": "system", "content": "Translate this text from English to " + target_lang},
                    {"role": "user", "content": chunk},
                ]
            )
            translated_chunks.append(response.choices[0].message.content)
    else:
        # Use Google Translate as an alternative (uncomment if needed)
        from googletrans import Translator
        translator = Translator()
        for chunk in chunks:
            translated_chunk = translator.translate(chunk, dest=target_lang).text
            translated_chunks.append(translated_chunk)

    # Combine translated chunks and save to a file
    translated_article = "\n".join(translated_chunks)
    with open("translated_text.txt", "w", encoding="utf-8") as f:
        f.write(translated_article)

# Example usage
url = "https://dugas.ch/artificial_curiosity/GPT_architecture.html"
target_lang = "zh-CN"
crawl_and_translate(url, target_lang)

翻译完成

执行完这段脚本,就可以得到LLM的中文翻译了。再根据翻译进行进一步的编辑,比如拷贝图片,调整格式。

编辑后的文章,我发布在了这里:
【翻译】GPT-3架构,简述于“餐巾纸”上

后续

这只是一个基本的爬取和翻译脚本,我可以得到一个不错的文本翻译,但是如果想发布一篇翻译文章,除了稍微做些文字的修改外,还有大量的排版工作需要做。后续考虑需要改进的地方:

  • 如何自动得到文章内容在某个网页中的element?
  • 如何处理文字之外的内容,比如图片。如何智能的排版翻译的文字和原本的图片,减少的工作量。

欢迎留言建议或者讨论。

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值