Text   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 82
ccs 23
cts 23
cp 1
rs 10
wmc 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A getWords() 0 3 1
A __construct() 0 10 2
A remove() 0 4 1
A replace() 0 4 1
A offsetGet() 0 3 2
A __toString() 0 3 1
A current() 0 3 2
1
<?php
2
/**
3
 * AnalyzerText package.
4
 *
5
 * @author  Peter Gribanov <[email protected]>
6
 */
7
8
namespace AnalyzerText;
9
10
use AnalyzerText\Text\Word;
11
12
/**
13
 * Анализируемый текст
14
 *
15
 * Класс используется для абстрагирования мотодов доступа к словами в тексте, предоставляя простой интерфейс
16
 *
17
 * @author  Peter Gribanov <[email protected]>
18
 */
19
class Text extends \ArrayIterator
20
{
21
    /**
22
     * Спиок всех слов в тексте в простой форме.
23
     *
24
     * @var array
25
     */
26
    protected $plains = array();
27
28
    /**
29
     * @param string $text
30
     */
31 29
    public function __construct($text)
32
    {
33 29
        $words = array();
34
        // слово не может начинаться с тире и не может содержать только его
35 29
        if (preg_match_all('/[[:alnum:]]+(?:[-\'][[:alnum:]]+)*/u', trim(strip_tags($text)), $match)) {
36 29
            $words = $match[0];
37
            // получение списка слов в нижнем регистре
38 29
            $this->plains = explode(' ', mb_strtolower(implode(' ', $words), 'utf8'));
39
        }
40 29
        parent::__construct($words);
41 29
    }
42
43
    /**
44
     * Возвращает список слов.
45
     *
46
     * @return array
47
     */
48 23
    public function getWords()
49
    {
50 23
        return $this->getArrayCopy();
51
    }
52
53
    /**
54
     * Возвращает текущий элемент
55
     *
56
     * @return Word|null
57
     */
58 26
    public function current()
59
    {
60 26
        return parent::current() ? new Word(parent::current(), $this->plains[$this->key()]) : null;
61
    }
62
63
    /**
64
     * @param int $index
65
     *
66
     * @return Word|null
67
     */
68 6
    public function offsetGet($index)
69
    {
70 6
        return $this->offsetExists($index) ? new Word(parent::offsetGet($index), $this->plains[$index]) : null;
71
    }
72
73
    /**
74
     * Удаляет слово из текста.
75
     */
76 1
    public function remove()
77
    {
78 1
        $this->offsetUnset($this->key());
79 1
        unset($this->plains[$this->key()]);
80 1
    }
81
82
    /**
83
     * Заменяет слово в тексте.
84
     *
85
     * @param Word $word
86
     */
87 1
    public function replace(Word $word)
88
    {
89 1
        $this->offsetSet($this->key(), $word->getWord());
90 1
        $this->plains[$this->key()] = $word->getPlain();
91 1
    }
92
93
    /**
94
     * Возвращает текст
95
     *
96
     * @return string
97
     */
98 23
    public function __toString()
99
    {
100 23
        return implode(' ', $this->getWords());
101
    }
102
}
103