amqf/document-translator

此包最新版本(v3.0.3-beta)没有可用的许可信息。

v3.0.3-beta 2024-05-27 15:25 UTC

README

翻译文档从一种语言到另一种语言。

目前仅读取PDF文件,并将翻译持久化到TXT文件中。它正在使用免费的、未认证的Google翻译版本,因此存在一些限制(见下文)。

使用方法

作为库

要在项目中使用此库,可以参考以下示例。

使用onTranslate参数将翻译持久化到文件、数据库或其他更适合您项目的位置。

示例

use DocumentTranslator\Core\Arguments;
use DocumentTranslator\Library\DocumentTranslator;
use DocumentTranslator\Library\Readers\PDFDocumentReader;
use DocumentTranslator\Library\Translators\GoogleTranslator;
use Exception;

define('INPUT_FILEPATH', './awesome.pdf');
define('OUTPUT_FILEPATH', './awesome.txt');
define('FROM_LANGUAGE', 'en');
define('TO_LANGUAGE', 'pt-br');
define('CHUNK', 5000);
define('INTERVAL', 60);

$fp = fopen(OUTPUT_FILEPATH, 'a');

DocumentTranslator::create(
   new PDFDocumentReader(),
   new GoogleTranslator
)->withFile(PDF_FILEPATH)
->fromLanguage(FROM_LANGUAGE)
->toLanguage(TO_LANGUAGE)
->setChunk(CHUNK)
->setInterval(INTERVAL)
->translate(
   onTranslate: function (string $old, string $new, int $offset) use ($fp) {
         echo sprintf("Processing offset %d...\n", $offset);
         fwrite($fp, $new);
   },
   onSuccess: function (string $amountTranslatedChars) {
         echo sprintf(
            "Processed %d characters.\n",
            $amountTranslatedChars
         );
         fclose($fp);
         exit(0);
   },
   onError: function (Exception $exception) use ($fp) {
         echo 'ERROR! ' . $exception->getMessage();
         fclose($fp);
         exit(1);
   }
);

命令行

在项目中安装库后,可以使用vendor/bin/document-translator执行Command Line。如果想要在用Git克隆项目后立即执行Command Line,而不是使用vendor/bin/document-translator,请使用php index.php

这是一个用于终端的脚本,使用此脚本所需的最少条件是

#1 - 示例

# Traduz do Inglês para Português do Brasil (padrão)
$ ./vendor/bin/document-translator ./storage/arquivo_pdf.pdf ./storage/arquivo_traduzido.txt

将葡萄牙语(pt-br)翻译成英语(en)

#2 - 示例

$ composer install
$ ./vendor/bin/document-translator ./storage/arquivo_pdf.pdf ./storage/arquivo_traduzido.txt --from=pt-br --to=en

要进一步自定义,请参阅执行./vendor/bin/document-translator时显示的帮助信息。

alt text

要求

  • composer
  • PHP 8或更高版本

限制

我明白您对Google翻译API在没有认证或API密钥时的每日限制感兴趣。让我们来探索这些限制。

  1. 每请求字符限制:

    • 每个请求的建议字符限制是5,000个字符(代码点)。因此,如果您在单个调用中发送超过此限制,可能会遇到问题¹。
    • 此外,API针对较小的翻译进行了优化,超过此限制可能会影响翻译质量。
  2. 每日和每分钟配额:

    • 默认情况下,您可以每天发送的字符数是无限的。然而,建议监控日常使用情况并根据您计划的预算调整配额。
    • 配额根据API版本(v2或v3)和翻译类型(通用、转写或罗马化)而有所不同。
      • 每分钟向项目发送到通用模型的总字符数:6,000,000
      • 每分钟向项目发送到文档翻译的总页面数:2,400¹。
  3. 自动翻译:

    • 使用API进行的翻译不考虑特定于当地市场的语言差异或变化。因此,生成的翻译可能单调、重复或不准确²。
  4. 请求之间的间隔:

    • 在没有认证或API密钥时,API没有定义请求之间的特定间隔。然而,避免在短时间内进行大量请求以避免过度负载服务是一种良好的做法。

Google翻译API的限制

Google翻译API对免费使用有一些限制。让我们来探索这些限制。

  1. 每请求字符限制:

    • 每个请求的建议字符限制是5,000个字符(代码点)。因此,如果您在单个调用中发送超过此限制,可能会遇到问题¹。
    • 此外,API针对较小的翻译进行了优化,超过此限制可能会影响翻译质量。
  2. 每日和每分钟配额:

    • API对请求内容的长度和您可发送的请求数量施加限制。
    • 默认情况下,您可以每天发送的字符数是无限的。然而,建议监控日常使用情况并根据您计划的预算调整配额。
    • 配额根据API版本(v2或v3)和翻译类型(通用、转写或罗马化)而有所不同。
      • 每分钟向项目发送到通用模型的总字符数:6,000,000。
      • 每分钟向项目发送到文档翻译的总页面数:2,400¹。
  3. 自动翻译:

    • 使用API进行的翻译不考虑特定于当地市场的语言差异或变化。因此,生成的翻译可能单调、重复或不准确²。
  4. 认证和API密钥:

    • 要使用API,您需要在Google Cloud上创建一个账户,并获取一个翻译API密钥。这个密钥用于验证请求和控制API的使用。

由于未认证和未使用API密钥的限制

stichoza/google-translate-php库不使用认证和API密钥,这意味着它不需要特定的凭据来访问Google翻译API。然而,这种方法有一些局限性

  1. IP限制和资源共享:

    • 由于库不使用个人认证,所有通过它进行的翻译请求都被分组到一个单独的IP地址。
    • 这可能导致Google施加的资源共享限制。如果许多用户未经过认证使用相同的库,资源共享的限制可能会更快地达到。
  2. 配额和封锁:

    • Google翻译对每天和每分钟的字符翻译数量施加配额。未经认证,这些配额将对使用相同IP的所有用户全球性地应用。
    • 如果超出限制,您可能会遇到临时封锁或访问限制。
  3. 翻译质量:

    • 未经认证意味着该库不能使用特定于项目的凭据来根据上下文或用户的偏好定制翻译。
    • 与经过认证的API使用相比,翻译可能更通用且准确性较低。
  4. 建议:

    • 如果您计划在生产环境中使用该库或进行频繁的翻译,强烈建议配置认证并使用Google翻译的API密钥。
    • 这样,您将能够对配额进行个人控制,获得更好的翻译质量,并避免IP资源共享的问题。