gino-pane/phpolyglot

使用外部API进行翻译、拼写检查和文本到语音(TTS)合成的PHP包

v1.1.1 2018-02-15 10:04 UTC

This package is auto-updated.

Last update: 2024-09-10 04:38:03 UTC


README

Latest Stable Version Build Status Maintainability Test Coverage Scrutinizer Code Quality License Total Downloads

以易于使用和扩展的方式,结合和特色不同的语言翻译、词典查找、拼写检查和语音合成(TTS)API。

目录

特性

  • 提供了一种易于使用的方法来利用不同的语言相关API进行翻译、语法校正、TTS等;
  • 可以轻松添加自定义API,因为该包大量依赖于不同接口的实现,因此易于插件(欢迎拉取请求);
  • 首选开放或免费(可能有限制)的API;
  • 语言代码必须是ISO-639兼容的(如果不存在alpha-2则使用alpha-3);
  • 第三方API可能包含自己的限制或许可要求(请参阅许可

要求

  • PHP >= 7.1;
  • Yandex 翻译API、Yandex 词典API和IBM Watson API的凭据(根据您要使用的内容)。

安装

composer require gino-pane/phpolyglot

复制.env.example文件,将其重命名为.env,并在其中放置您自己的API凭据。文件包含有关所需凭据的页面的链接。

要运行examples目录中的示例,您必须指定自己的有效API凭据。

基本用法

该包包含examples目录中大量可供使用的示例。所有端点要么返回有效的响应,要么抛出相关的异常。所有API都通过config.php文件进行配置,该文件包含默认API类映射。动态配置支持在1.1.0更新中添加。

$phpolyglot = new PHPolyglot($config, $env);

这允许您传递自己的配置值,如果您不想依赖存储在配置文件中的值。

翻译

有两个端点。对于单个字符串

function translate(string $text, string $languageTo, string $languageFrom = ''): TranslateResponse

对于多个字符串

function translateBulk(array $text, string $languageTo, string $languageFrom = ''): TranslateResponse

作为一个最小示例,您可以传递文本和要翻译成的语言(API将检测源语言)

$response = (new PHPolyglot())->translate('Hello world', 'it')->getTranslations(); // [ 0 => Ciao mondo ]

TranslateResponse具有getTranslations方法,该方法返回一个翻译数组。

支持的语言可能因第三方API而异。

Yandex 翻译API

请检查支持的语言列表。Yandex Translate API 免费使用,但有限制(每天最多100万字符,每月最多1000万字符)。当然,您也可以选择付费计划。当达到限制时,API 将仅返回错误。为了使用该API,您需要获取有效的API密钥

词典查找

存在一个单一端点,可以以两种不同的形式使用。

用于同一语言的查找(获取单词形式)

function lookup(string $text, string $languageFrom): DictionaryResponse

以及用于查找翻译(获取多个翻译以及包括单词形式、例句、含义、同义词、音标等在内的附加信息)

function lookup(string $text, string $languageFrom, string $languageTo): DictionaryResponse

作为一个最简单的例子,您可以传递文本及其源语言

$response = (new PHPolyglot)->lookup('Hello', 'en)->getEntries();

$synonyms = implode(", ", $response[0]->getSynonyms());

$output = <<<TEXT
Initial word: {$response[0]->getTextFrom()}

Part of speech: {$response[0]->getPosFrom()}
Transcription: {$response[0]->getTranscription()}

Main alternative: {$response[0]->getTextTo()}
Synonyms: {$synonyms}
TEXT

echo $output

/**
Initial word: hello
  
Part of speech: noun
Transcription: ˈheˈləʊ

Main alternative: hi
Synonyms: hallo, salut
*/

支持的语言可能因第三方API而异。

Yandex 词典API

请检查支持的语言列表。Yandex Dictionary API 免费使用,但有限制(每天最多10,000条引用)。为了使用该API,您需要获取有效的API密钥

拼写检查

有两个端点。对于单个字符串

function spellCheck(string $text, string $languageFrom = ''): SpellCheckResponse

对于多个字符串

function spellCheckBulk(array $texts, string $languageFrom = ''): SpellCheckResponse

作为一个最简单的例子,您可以仅传递要检查的文本

$corrections = $phpolyglot->spellCheckText('Helo werld', $languageFrom)->getCorrections();

/**
array(1) {
  [0] =>
  array(2) {
    'Helo' =>
    array(1) {
      [0] =>
      string(5) "Hello"
    }
    'werld' =>
    array(1) {
      [0] =>
      string(5) "world"
    }
  }
}
*/

支持的语言可能因第三方API而异。

Yandex 拼写检查API

请检查支持的语言列表(目前基本上只支持英语、俄语和乌克兰语)。Yandex Speller API 免费使用,但有限制(每天最多10,000次调用/10,000万字符)。不需要密钥。

语音合成

主要端点是 PHPolyglotspeak 方法

public function speak(
    string $text,
    string $languageFrom,
    string $audioFormat = TtsAudioFormat::AUDIO_MP3,
    array $additionalData = []
): TtsResponse

只需要两个参数 - 合成文本 $text 和其源语言 $languageFrom

可选参数 $audioFormat$additionalData 可以省略。音频格式允许显式指定返回音频所需的音频格式。附加数据允许设置API特定的参数,以获得更精确的结果(声音、音调、速度等)。

当前识别的音频格式列表

  • TtsAudioFormat::AUDIO_BASIC
  • TtsAudioFormat::AUDIO_FLAC
  • TtsAudioFormat::AUDIO_L16
  • TtsAudioFormat::AUDIO_MP3
  • TtsAudioFormat::AUDIO_MPEG
  • TtsAudioFormat::AUDIO_MULAW
  • TtsAudioFormat::AUDIO_OGG
  • TtsAudioFormat::AUDIO_WAV
  • TtsAudioFormat::AUDIO_WEBM

请注意,不一定所有这些格式都支持您选择的API。

TTS方法返回 TtsResponse,它有 storeFile 方法可以将生成的文件以所需的名称和扩展名存储到指定的目录中(或使用默认值)

function storeFile(string $fileName = '', string $extension = '', string $directory = ''): string

默认情况下,文件名是用于TTS的 $text 的简单 md5 哈希,$extension 根据 content-type 头部信息填充(至少对于IBM Watson API来说是这样),$directory 基于配置设置。

(new PHPolyglot())->speak('Hello world', 'en')->storeFile(); // stores 3e25960a79dbc69b674cd4ec67a72c62.mp3

IBM Watson 文本到语音

请检查支持的语言和声音列表。IBM Watson TTS需要API凭证进行授权。在此处创建您的TTS项目并获取您的API特定凭证。API有限制免费使用(每月最多10,000个字符)。

可能要做的任务

  • 转录单词;
  • 获取同义词、反义词、衍生物;
  • 检测文本语言;
  • 增加更多配置灵活性(根据配置约束选择API,例如不同语言使用不同的API)。

有用的工具

运行测试

php vendor/bin/phpunit

或者

composer test

代码嗅探工具

php vendor/bin/phpcs --standard=PSR2 src/

或者

composer psr2check

代码自动修复器

php vendor/bin/phpcbf --standard=PSR2 src/ 

或者

composer psr2autofix

构建文档

php vendor/bin/phpdoc -d "src" -t "docs"

或者

composer docs

更改日志

为了跟踪,请参考 CHANGELOG.md

贡献

  1. 进行Fork操作;
  2. 创建你的功能分支(git checkout -b my-new-feature);
  3. 进行更改;
  4. 运行测试,如果有必要,为你的代码添加新的测试(phpunit);
  5. 提交你的更改(git commit -am '添加了一些功能');
  6. 将更改推送到分支(git push origin my-new-feature);
  7. 创建新的拉取请求。

也请参考 CONTRIBUTING.md

许可

请参考 LICENSE

PHPolyglot 并不拥有API可能返回的任何结果。此外,API可能有它们自己的数据使用规则,所以在使用时请留意。

备注

composer-package-templatePHP Nano Rest 支持。