gino-pane / phpolyglot
使用外部API进行翻译、拼写检查和文本到语音(TTS)合成的PHP包
Requires
- php: ^7.1
- gino-pane/nano-rest: ~1.2.0
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- phpdocumentor/phpdocumentor: ^2.0
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ~7.0
- squizlabs/php_codesniffer: ^3.0
- symfony/thanks: ^1.0
README
以易于使用和扩展的方式,结合和特色不同的语言翻译、词典查找、拼写检查和语音合成(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万字符)。不需要密钥。
语音合成
主要端点是 PHPolyglot
的 speak
方法
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。
贡献
- 进行Fork操作;
- 创建你的功能分支(git checkout -b my-new-feature);
- 进行更改;
- 运行测试,如果有必要,为你的代码添加新的测试(phpunit);
- 提交你的更改(git commit -am '添加了一些功能');
- 将更改推送到分支(git push origin my-new-feature);
- 创建新的拉取请求。
也请参考 CONTRIBUTING.md。
许可
请参考 LICENSE。
PHPolyglot 并不拥有API可能返回的任何结果。此外,API可能有它们自己的数据使用规则,所以在使用时请留意。