-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBig_Text_Translate.php
More file actions
58 lines (48 loc) · 2.11 KB
/
Big_Text_Translate.php
File metadata and controls
58 lines (48 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
abstract class Big_Text_Translate {
/**
* @var int - максимальное число символов для отправки переводчику
*/
public static $symbolLimit = 2000;
/**
* @var string- символы, по которым текст делится на предложения
*/
public static $sentensesDelimiter = '.';
/**
* @static
* @param $text - исходный текст для разбиения на предложения
* @return array - массив предложений, еще не окончательный
*/
protected static function toSentenses ($text) {
$sentArray = explode(self::$sentensesDelimiter, $text);
return $sentArray;
}
/**
* Разделение текста на массив больших кусков
* @param string $text - большой текстовый фрагмент, требующий разделения на куски
* @return array - массив элементов, каждый из которых не превышает предельного числа символов
*/
public static function toBigPieces ($text) {
$sentArray = self::toSentenses($text);
$i = 0;
$bigPiecesArray[0] = '';
for ($k = 0; $k < count($sentArray); $k++) {
$bigPiecesArray[$i] .= $sentArray[$k].self::$sentensesDelimiter;
if (strlen($bigPiecesArray[$i]) > self::$symbolLimit){
$i++;
$bigPiecesArray[$i] = '';
}
}
return $bigPiecesArray;
}
/**
* Склеивание текста
* @param array $bigPiecesArray - массив переведенных кусков текста, в произвольном порядке,
* но ключи должна соответствовать исходному тексту
* @return string - "склеенный" текст
*/
public static function fromBigPieces (array $bigPiecesArray) {
ksort($bigPiecesArray);
return implode($bigPiecesArray);
}
}