Passed
Pull Request — master (#5)
by Peter
09:13
created
example.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@
 block discarded – undo
1 1
 <?php
2 2
 
3
-require __DIR__ . '/vendor/autoload.php';
3
+require __DIR__.'/vendor/autoload.php';
4 4
 
5 5
 $text = 'порверка как-то так-с';
6 6
 
Please login to merge, or discard this patch.
AnalyzerText/Text.php 1 patch
Indentation   +61 added lines, -61 removed lines patch added patch discarded remove patch
@@ -21,73 +21,73 @@
 block discarded – undo
21 21
  */
22 22
 class Text extends \ArrayIterator {
23 23
 
24
-    /**
25
-     * Спиок всех слов в тексте в простой форме
26
-     *
27
-     * @var array
28
-     */
29
-    protected $plains = array();
24
+	/**
25
+	 * Спиок всех слов в тексте в простой форме
26
+	 *
27
+	 * @var array
28
+	 */
29
+	protected $plains = array();
30 30
 
31 31
 
32
-    /**
33
-     * Конструктор
34
-     *
35
-     * @param string $text Текст
36
-     */
37
-    public function __construct($text) {
38
-        $words = array();
39
-        // слово не может начинаться с тире и не может содержать только его
40
-        if (preg_match_all('/[[:alnum:]]+(?:[-\'][[:alnum:]]+)*/u', trim(strip_tags($text)), $match)) {
41
-            $words = $match[0];
42
-            // получение списка слов в нижнем регистре
43
-            $this->plains = explode(' ', mb_strtolower(implode(' ', $words), 'utf8'));
44
-        }
45
-        parent::__construct($words);
46
-    }
32
+	/**
33
+	 * Конструктор
34
+	 *
35
+	 * @param string $text Текст
36
+	 */
37
+	public function __construct($text) {
38
+		$words = array();
39
+		// слово не может начинаться с тире и не может содержать только его
40
+		if (preg_match_all('/[[:alnum:]]+(?:[-\'][[:alnum:]]+)*/u', trim(strip_tags($text)), $match)) {
41
+			$words = $match[0];
42
+			// получение списка слов в нижнем регистре
43
+			$this->plains = explode(' ', mb_strtolower(implode(' ', $words), 'utf8'));
44
+		}
45
+		parent::__construct($words);
46
+	}
47 47
 
48
-    /**
49
-     * Возвращает список слов
50
-     *
51
-     * @return array
52
-     */
53
-    public function getWords() {
54
-        return $this->getArrayCopy();
55
-    }
48
+	/**
49
+	 * Возвращает список слов
50
+	 *
51
+	 * @return array
52
+	 */
53
+	public function getWords() {
54
+		return $this->getArrayCopy();
55
+	}
56 56
 
57
-    /**
58
-     * Возвращает текущий элемент
59
-     *
60
-     * @return \AnalyzerText\Text\Word
61
-     */
62
-    public function current() {
63
-        return new Word(parent::current(), $this->plains[$this->key()]);
64
-    }
57
+	/**
58
+	 * Возвращает текущий элемент
59
+	 *
60
+	 * @return \AnalyzerText\Text\Word
61
+	 */
62
+	public function current() {
63
+		return new Word(parent::current(), $this->plains[$this->key()]);
64
+	}
65 65
 
66
-    /**
67
-     * Удаляет слово из текста
68
-     */
69
-    public function remove() {
70
-        $this->offsetUnset($this->key());
71
-        unset($this->plains[$this->key()]);
72
-    }
66
+	/**
67
+	 * Удаляет слово из текста
68
+	 */
69
+	public function remove() {
70
+		$this->offsetUnset($this->key());
71
+		unset($this->plains[$this->key()]);
72
+	}
73 73
 
74
-    /**
75
-     * Заменяет слово в тексте
76
-     *
77
-     * @param \AnalyzerText\Text\Word $word Слово
78
-     */
79
-    public function replace(Word $word) {
80
-        $this->offsetSet($this->key(), $word->getWord());
81
-        $this->plains[$this->key()] = $word->getPlain();
82
-    }
74
+	/**
75
+	 * Заменяет слово в тексте
76
+	 *
77
+	 * @param \AnalyzerText\Text\Word $word Слово
78
+	 */
79
+	public function replace(Word $word) {
80
+		$this->offsetSet($this->key(), $word->getWord());
81
+		$this->plains[$this->key()] = $word->getPlain();
82
+	}
83 83
 
84
-    /**
85
-     * Возвращает текст
86
-     *
87
-     * @return string
88
-     */
89
-    public function __toString() {
90
-        return implode(' ', $this->getWords());
91
-    }
84
+	/**
85
+	 * Возвращает текст
86
+	 *
87
+	 * @return string
88
+	 */
89
+	public function __toString() {
90
+		return implode(' ', $this->getWords());
91
+	}
92 92
 
93 93
 }
Please login to merge, or discard this patch.
AnalyzerText/Text/Word.php 1 patch
Indentation   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -16,57 +16,57 @@
 block discarded – undo
16 16
  */
17 17
 class Word {
18 18
 
19
-    /**
20
-     * Слово в тексте
21
-     *
22
-     * @var string
23
-     */
24
-    protected $word = '';
19
+	/**
20
+	 * Слово в тексте
21
+	 *
22
+	 * @var string
23
+	 */
24
+	protected $word = '';
25 25
 
26
-    /**
27
-     * Простая форма слова в тексте
28
-     *
29
-     * @var string
30
-     */
31
-    protected $plain = '';
26
+	/**
27
+	 * Простая форма слова в тексте
28
+	 *
29
+	 * @var string
30
+	 */
31
+	protected $plain = '';
32 32
 
33 33
 
34
-    /**
35
-     * Конструктор
36
-     *
37
-     * @param string $word       Слово в тексте
38
-     * @param string $lower_case Простая форма слова в тексте
39
-     */
40
-    public function __construct($word, $plain) {
41
-        $this->word  = $word;
42
-        $this->plain = $plain;
43
-    }
34
+	/**
35
+	 * Конструктор
36
+	 *
37
+	 * @param string $word       Слово в тексте
38
+	 * @param string $lower_case Простая форма слова в тексте
39
+	 */
40
+	public function __construct($word, $plain) {
41
+		$this->word  = $word;
42
+		$this->plain = $plain;
43
+	}
44 44
 
45
-    /**
46
-     * Возвращает слово из текста
47
-     *
48
-     * @return string
49
-     */
50
-    public function getWord() {
51
-        return $this->word;
52
-    }
45
+	/**
46
+	 * Возвращает слово из текста
47
+	 *
48
+	 * @return string
49
+	 */
50
+	public function getWord() {
51
+		return $this->word;
52
+	}
53 53
 
54
-    /**
55
-     * Возвращает простую форму слова из текста
56
-     *
57
-     * @return string
58
-     */
59
-    public function getPlain() {
60
-        return $this->plain;
61
-    }
54
+	/**
55
+	 * Возвращает простую форму слова из текста
56
+	 *
57
+	 * @return string
58
+	 */
59
+	public function getPlain() {
60
+		return $this->plain;
61
+	}
62 62
 
63
-    /**
64
-     * Возвращает слово
65
-     *
66
-     * @return string
67
-     */
68
-    public function __toString() {
69
-        return $this->getWord();
70
-    }
63
+	/**
64
+	 * Возвращает слово
65
+	 *
66
+	 * @return string
67
+	 */
68
+	public function __toString() {
69
+		return $this->getWord();
70
+	}
71 71
 
72 72
 }
73 73
\ No newline at end of file
Please login to merge, or discard this patch.
AnalyzerText/Filter/Factory.php 1 patch
Indentation   +72 added lines, -72 removed lines patch added patch discarded remove patch
@@ -27,85 +27,85 @@
 block discarded – undo
27 27
  */
28 28
 class Factory {
29 29
 
30
-    /**
31
-     * Анализатор
32
-     *
33
-     * @var \AnalyzerText\Analyzer\Analyzer
34
-     */
35
-    private $analyzer;
30
+	/**
31
+	 * Анализатор
32
+	 *
33
+	 * @var \AnalyzerText\Analyzer\Analyzer
34
+	 */
35
+	private $analyzer;
36 36
 
37 37
 
38
-    /**
39
-     * Конструктор
40
-     *
41
-     * @param \AnalyzerText\Analyzer\Analyzer $analyzer Анализатор
42
-     */
43
-    public function __construct(Analyzer $analyzer) {
44
-        $this->analyzer = $analyzer;
45
-    }
38
+	/**
39
+	 * Конструктор
40
+	 *
41
+	 * @param \AnalyzerText\Analyzer\Analyzer $analyzer Анализатор
42
+	 */
43
+	public function __construct(Analyzer $analyzer) {
44
+		$this->analyzer = $analyzer;
45
+	}
46 46
 
47
-    /**
48
-     * Применяет фильтр Informative
49
-     *
50
-     * @return \AnalyzerText\Filter\Factory
51
-     */
52
-    public function Informative() {
53
-        return $this->apply(new Informative($this->analyzer->getText()));
54
-    }
47
+	/**
48
+	 * Применяет фильтр Informative
49
+	 *
50
+	 * @return \AnalyzerText\Filter\Factory
51
+	 */
52
+	public function Informative() {
53
+		return $this->apply(new Informative($this->analyzer->getText()));
54
+	}
55 55
 
56
-    /**
57
-     * Применяет фильтр Preposition
58
-     *
59
-     * @return \AnalyzerText\Filter\Factory
60
-     */
61
-    public function Preposition() {
62
-        return $this->apply(new Preposition($this->analyzer->getText()));
63
-    }
56
+	/**
57
+	 * Применяет фильтр Preposition
58
+	 *
59
+	 * @return \AnalyzerText\Filter\Factory
60
+	 */
61
+	public function Preposition() {
62
+		return $this->apply(new Preposition($this->analyzer->getText()));
63
+	}
64 64
 
65
-    /**
66
-     * Применяет фильтр Pronoun
67
-     *
68
-     * @return \AnalyzerText\Filter\Factory
69
-     */
70
-    public function Pronoun() {
71
-        return $this->apply(new Pronoun($this->analyzer->getText()));
72
-    }
65
+	/**
66
+	 * Применяет фильтр Pronoun
67
+	 *
68
+	 * @return \AnalyzerText\Filter\Factory
69
+	 */
70
+	public function Pronoun() {
71
+		return $this->apply(new Pronoun($this->analyzer->getText()));
72
+	}
73 73
 
74
-    /**
75
-     * Применяет фильтр Union
76
-     *
77
-     * @return \AnalyzerText\Filter\Factory
78
-     */
79
-    public function Union() {
80
-        return $this->apply(new Union($this->analyzer->getText()));
81
-    }
74
+	/**
75
+	 * Применяет фильтр Union
76
+	 *
77
+	 * @return \AnalyzerText\Filter\Factory
78
+	 */
79
+	public function Union() {
80
+		return $this->apply(new Union($this->analyzer->getText()));
81
+	}
82 82
 
83
-    /**
84
-     * Применяет фильтр Adverb
85
-     *
86
-     * @return \AnalyzerText\Filter\Factory
87
-     */
88
-    public function Adverb() {
89
-        return $this->apply(new Adverb($this->analyzer->getText()));
90
-    }
83
+	/**
84
+	 * Применяет фильтр Adverb
85
+	 *
86
+	 * @return \AnalyzerText\Filter\Factory
87
+	 */
88
+	public function Adverb() {
89
+		return $this->apply(new Adverb($this->analyzer->getText()));
90
+	}
91 91
 
92
-    /**
93
-     * Применяет фильтр
94
-     *
95
-     * @param \AnalyzerText\Filter\Filter $filter Фильтр
96
-     *
97
-     * @return \AnalyzerText\Filter\Factory
98
-     */
99
-    private function apply(Filter $filter) {
100
-        if ($filter->getText()->count()) {
101
-            $words = array();
102
-            foreach ($filter as $word) {
103
-                $words[] = $word->getWord();
104
-            }
105
-            $text_class = get_class($filter->getText());
106
-            $this->analyzer->setText(new $text_class(implode(' ', $words)));
107
-        }
108
-        return $this;
109
-    }
92
+	/**
93
+	 * Применяет фильтр
94
+	 *
95
+	 * @param \AnalyzerText\Filter\Filter $filter Фильтр
96
+	 *
97
+	 * @return \AnalyzerText\Filter\Factory
98
+	 */
99
+	private function apply(Filter $filter) {
100
+		if ($filter->getText()->count()) {
101
+			$words = array();
102
+			foreach ($filter as $word) {
103
+				$words[] = $word->getWord();
104
+			}
105
+			$text_class = get_class($filter->getText());
106
+			$this->analyzer->setText(new $text_class(implode(' ', $words)));
107
+		}
108
+		return $this;
109
+	}
110 110
 
111 111
 }
Please login to merge, or discard this patch.
AnalyzerText/Filter/Filter.php 1 patch
Indentation   +68 added lines, -68 removed lines patch added patch discarded remove patch
@@ -19,78 +19,78 @@
 block discarded – undo
19 19
  */
20 20
 abstract class Filter extends \FilterIterator {
21 21
 
22
-    /**
23
-     * Конструктор
24
-     *
25
-     * @param \AnalyzerText\Text $iterator Текст
26
-     */
27
-    public function __construct(Text $iterator) {
28
-        parent::__construct($iterator);
29
-    }
22
+	/**
23
+	 * Конструктор
24
+	 *
25
+	 * @param \AnalyzerText\Text $iterator Текст
26
+	 */
27
+	public function __construct(Text $iterator) {
28
+		parent::__construct($iterator);
29
+	}
30 30
 
31
-    /**
32
-     * Возвращает текущее слово
33
-     *
34
-     * @return \AnalyzerText\Text\Word
35
-     */
36
-    public function current() {
37
-        return $this->getInnerIterator()->current();
38
-    }
31
+	/**
32
+	 * Возвращает текущее слово
33
+	 *
34
+	 * @return \AnalyzerText\Text\Word
35
+	 */
36
+	public function current() {
37
+		return $this->getInnerIterator()->current();
38
+	}
39 39
 
40
-    /**
41
-     * Возвращает текст
42
-     *
43
-     * @return \AnalyzerText\Text
44
-     */
45
-    public function getText() {
46
-        return $this->getInnerIterator();
47
-    }
40
+	/**
41
+	 * Возвращает текст
42
+	 *
43
+	 * @return \AnalyzerText\Text
44
+	 */
45
+	public function getText() {
46
+		return $this->getInnerIterator();
47
+	}
48 48
 
49
-    /**
50
-     * Возвращает текст
51
-     *
52
-     * @return \AnalyzerText\Text
53
-     */
54
-    public function getInnerIterator() {
55
-        return parent::getInnerIterator();
56
-    }
49
+	/**
50
+	 * Возвращает текст
51
+	 *
52
+	 * @return \AnalyzerText\Text
53
+	 */
54
+	public function getInnerIterator() {
55
+		return parent::getInnerIterator();
56
+	}
57 57
 
58
-    /**
59
-     * Заменяет слово в тексте
60
-     *
61
-     * @param \AnalyzerText\Text\Word $word Слово
62
-     */
63
-    protected function replace(Word $word) {
64
-        $this->getInnerIterator()->replace($word);
65
-    }
58
+	/**
59
+	 * Заменяет слово в тексте
60
+	 *
61
+	 * @param \AnalyzerText\Text\Word $word Слово
62
+	 */
63
+	protected function replace(Word $word) {
64
+		$this->getInnerIterator()->replace($word);
65
+	}
66 66
 
67
-    /**
68
-     * Возвращает предыдущее слово
69
-     *
70
-     * @param integer|null $shift Смещение
71
-     *
72
-     * @return \AnalyzerText\Text\Word|null
73
-     */
74
-    protected function getPreviousWord($shift = 1) {
75
-        return $this->getNextWord($shift*-1);
76
-    }
67
+	/**
68
+	 * Возвращает предыдущее слово
69
+	 *
70
+	 * @param integer|null $shift Смещение
71
+	 *
72
+	 * @return \AnalyzerText\Text\Word|null
73
+	 */
74
+	protected function getPreviousWord($shift = 1) {
75
+		return $this->getNextWord($shift*-1);
76
+	}
77 77
 
78
-    /**
79
-     * Возвращает следующее слово
80
-     *
81
-     * @param integer|null $shift Смещение
82
-     *
83
-     * @return \AnalyzerText\Text\Word|null
84
-     */
85
-    protected function getNextWord($shift = 1) {
86
-        $position = $this->getText()->key();
87
-        try {
88
-            $this->getText()->seek($position+$shift);
89
-        } catch (\OutOfBoundsException $e) {
90
-            return null;
91
-        }
92
-        $word = $this->getText()->current();
93
-        $this->getText()->seek($position);
94
-        return $word;
95
-    }
78
+	/**
79
+	 * Возвращает следующее слово
80
+	 *
81
+	 * @param integer|null $shift Смещение
82
+	 *
83
+	 * @return \AnalyzerText\Text\Word|null
84
+	 */
85
+	protected function getNextWord($shift = 1) {
86
+		$position = $this->getText()->key();
87
+		try {
88
+			$this->getText()->seek($position+$shift);
89
+		} catch (\OutOfBoundsException $e) {
90
+			return null;
91
+		}
92
+		$word = $this->getText()->current();
93
+		$this->getText()->seek($position);
94
+		return $word;
95
+	}
96 96
 }
97 97
\ No newline at end of file
Please login to merge, or discard this patch.
AnalyzerText/Filter/Informative.php 1 patch
Indentation   +42 added lines, -42 removed lines patch added patch discarded remove patch
@@ -27,50 +27,50 @@
 block discarded – undo
27 27
  */
28 28
 class Informative extends Filter {
29 29
 
30
-    /**
31
-     * Список фильтров
32
-     *
33
-     * @var array
34
-     */
35
-    private $filters = array();
30
+	/**
31
+	 * Список фильтров
32
+	 *
33
+	 * @var array
34
+	 */
35
+	private $filters = array();
36 36
 
37 37
 
38
-    /**
39
-     * Конструктор
40
-     *
41
-     * @param \AnalyzerText\Text $iterator Текст
42
-     */
43
-    public function __construct(Text $iterator) {
44
-        parent::__construct($iterator);
45
-        $this->filters = array(
46
-            new Interjection($this->getInnerIterator()),
47
-            new Particle($this->getInnerIterator()),
48
-            new Preposition($this->getInnerIterator()),
49
-            new Pronoun($this->getInnerIterator()),
50
-            new Union($this->getInnerIterator()),
51
-            new Adverb($this->getInnerIterator()),
52
-        );
53
-    }
38
+	/**
39
+	 * Конструктор
40
+	 *
41
+	 * @param \AnalyzerText\Text $iterator Текст
42
+	 */
43
+	public function __construct(Text $iterator) {
44
+		parent::__construct($iterator);
45
+		$this->filters = array(
46
+			new Interjection($this->getInnerIterator()),
47
+			new Particle($this->getInnerIterator()),
48
+			new Preposition($this->getInnerIterator()),
49
+			new Pronoun($this->getInnerIterator()),
50
+			new Union($this->getInnerIterator()),
51
+			new Adverb($this->getInnerIterator()),
52
+		);
53
+	}
54 54
 
55
-    /**
56
-     * (non-PHPdoc)
57
-     * @see \FilterIterator::accept()
58
-     */
59
-    public function accept() {
60
-        $word = $this->current();
61
-        // сначала ищем последовательности
62
-        foreach ($this->filters as $filter) {
63
-            if ($filter->isSequence($word)) {
64
-                return false;
65
-            }
66
-        }
67
-        // ищем простые и сложные формы
68
-        foreach ($this->filters as $filter) {
69
-            if ($filter->isSimple($word) || $filter->isComposite($word)) {
70
-                return false;
71
-            }
72
-        }
73
-        return true;
74
-    }
55
+	/**
56
+	 * (non-PHPdoc)
57
+	 * @see \FilterIterator::accept()
58
+	 */
59
+	public function accept() {
60
+		$word = $this->current();
61
+		// сначала ищем последовательности
62
+		foreach ($this->filters as $filter) {
63
+			if ($filter->isSequence($word)) {
64
+				return false;
65
+			}
66
+		}
67
+		// ищем простые и сложные формы
68
+		foreach ($this->filters as $filter) {
69
+			if ($filter->isSimple($word) || $filter->isComposite($word)) {
70
+				return false;
71
+			}
72
+		}
73
+		return true;
74
+	}
75 75
 
76 76
 }
77 77
\ No newline at end of file
Please login to merge, or discard this patch.
AnalyzerText/Filter/WordList/Preposition.php 1 patch
Indentation   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -18,22 +18,22 @@
 block discarded – undo
18 18
  */
19 19
 class Preposition extends WordList {
20 20
 
21
-    /**
22
-     * Возвращает список слов
23
-     *
24
-     * @return array
25
-     */
26
-    public function getWords() {
27
-        return array(
28
-            // русские предлоги
29
-            'без', 'в', 'до', 'для', 'за', 'из', 'к', 'ко', 'на', 'над', 'о', 'об', 'обо', 'от', 'по', 'под', 'пред', 'при', 'про', 'с', 'у',
30
-            'через', 'со', 'из-за', 'из-под', 'около', 'близ',
21
+	/**
22
+	 * Возвращает список слов
23
+	 *
24
+	 * @return array
25
+	 */
26
+	public function getWords() {
27
+		return array(
28
+			// русские предлоги
29
+			'без', 'в', 'до', 'для', 'за', 'из', 'к', 'ко', 'на', 'над', 'о', 'об', 'обо', 'от', 'по', 'под', 'пред', 'при', 'про', 'с', 'у',
30
+			'через', 'со', 'из-за', 'из-под', 'около', 'близ',
31 31
 
32
-            // английские предлоги
33
-            'at', 'on', 'in', 'about', 'above', 'below', 'during', 'after', 'before', 'by', 'for', 'from', 'of', 'since', 'to', 'till', 'with',
34
-            'up', 'down', 'off', 'onto', 'towards', 'away', 'through', 'into', 'along', 'past', 'across', 'over', 'between', 'under', 'outside',
35
-            'the', 'a', 'are',
36
-        );
37
-    }
32
+			// английские предлоги
33
+			'at', 'on', 'in', 'about', 'above', 'below', 'during', 'after', 'before', 'by', 'for', 'from', 'of', 'since', 'to', 'till', 'with',
34
+			'up', 'down', 'off', 'onto', 'towards', 'away', 'through', 'into', 'along', 'past', 'across', 'over', 'between', 'under', 'outside',
35
+			'the', 'a', 'are',
36
+		);
37
+	}
38 38
 
39 39
 }
40 40
\ No newline at end of file
Please login to merge, or discard this patch.
AnalyzerText/Filter/WordList/WordList.php 1 patch
Indentation   +150 added lines, -150 removed lines patch added patch discarded remove patch
@@ -22,155 +22,155 @@
 block discarded – undo
22 22
  */
23 23
 abstract class WordList extends Filter {
24 24
 
25
-    /**
26
-     * Простые слова
27
-     *
28
-     * @var array
29
-     */
30
-    private $simple = array();
31
-
32
-    /**
33
-     * Составные слова
34
-     *
35
-     * Составные слова о части которого нам известно.
36
-     * Например слово пишется через тирэ
37
-     *
38
-     * @var array
39
-     */
40
-    private $composite = array();
41
-
42
-    /**
43
-     * Последовательности из набора слов
44
-     *
45
-     * @var array
46
-     */
47
-    private $sequence = array();
48
-
49
-
50
-    /**
51
-     * Конструктор
52
-     *
53
-     * @param \AnalyzerText\Text $iterator Текст
54
-     */
55
-    public function __construct(Text $iterator) {
56
-        parent::__construct($iterator);
57
-        $this->repackWordList();
58
-    }
59
-
60
-    /**
61
-     * Проверяет, является ли текущее слово допустимым
62
-     *
63
-     * @return boolean
64
-     */
65
-    public function accept() {
66
-        $word = $this->current();
67
-        return $this->isSequence($word) || $this->isSimple($word) || $this->isComposite($word);
68
-    }
69
-
70
-    /**
71
-     * Это последовательность
72
-     *
73
-     * @param \AnalyzerText\Text\Word $word Слово
74
-     *
75
-     * @return boolean
76
-     */
77
-    public function isSequence(Word $word) {
78
-        $plain = $word->getPlain();
79
-        foreach ($this->sequence as $sequence) {
80
-            if ($sequence[0] == $plain) {
81
-                for ($i = 1; $i < count($sequence); $i++) {
82
-                    if (!($word = $this->getNextWord($i)) || $word->getPlain() != $sequence[$i]) {
83
-                        return false;
84
-                    }
85
-                }
86
-                // удаляем слова из последовательности
87
-                $key = $this->getText()->key();
88
-                for ($i = 1; $i < count($sequence); $i++) {
89
-                    $this->getText()->seek($key+$i);
90
-                    $this->getText()->remove();
91
-                }
92
-                $this->getText()->seek($key);
93
-                return true;
94
-            }
95
-        }
96
-        return false;
97
-    }
98
-
99
-    /**
100
-     * Это простое слово
101
-     *
102
-     * @param \AnalyzerText\Text\Word $word Слово
103
-     *
104
-     * @return boolean
105
-     */
106
-    public function isSimple(Word $word) {
107
-        return in_array($word->getPlain(), $this->simple);
108
-    }
109
-
110
-    /**
111
-     * Это составное слово
112
-     *
113
-     * @param \AnalyzerText\Text\Word $word Слово
114
-     *
115
-     * @return boolean
116
-     */
117
-    public function isComposite(Word $word) {
118
-        foreach ($this->composite as $reg) {
119
-            if (preg_match($reg, $word->getWord())) {
120
-                return true;
121
-            }
122
-        }
123
-        return false;
124
-    }
125
-
126
-    /**
127
-     * Возвращает список слов
128
-     *
129
-     * Возвращает список слов которые необходимо удалить или оставить
130
-     * Если слово составное и пишестся через тире, но одна из частей может менятся например:
131
-     * <code>
132
-     *   подай-ка, налей-ка, молоко-то сбежало, наценка-с
133
-     * </code>
134
-     * то нужно писать шаблон вида:
135
-     * <code>
136
-     *   [ '*-ка', '*-то', '*-с' ]
137
-     * </code>
138
-     * Для удаления последовательности слов ячейка слова должна представляться в виде набора слов разделенных пробелом
139
-     * <code>
140
-     *   [ 'вовсе не', 'несмотря на то что' ]
141
-     * </code>
142
-     * Так же есть возможность указывать регулярные выражения для отлавливания сложных конструкций
143
-     * <code>
144
-     *   // ААааа Аааа-а-а
145
-     *   [ '/^а+(\-а+)*$/ui' ]
146
-     * </code>
147
-     * В регулярное выражение передается оригинальное слово, а не урощенная форма
148
-     *
149
-     * @return array
150
-     */
151
-    abstract public function getWords();
152
-
153
-    /**
154
-     * Разбор набора шаблонов слов и составление условий поиска соответствий
155
-     */
156
-    private function repackWordList() {
157
-        $words = $this->getWords();
158
-        // разбор на категории
159
-        foreach ($words as $word) {
160
-            if ($word[0] == '/') { // регулярное выражение
161
-                $this->composite[] = $word;
162
-
163
-            } elseif (strpos($word, ' ') !== false) { // последовательность
164
-                $this->sequence[] = explode(' ', $word);
165
-
166
-            } elseif (strpos($word, '*') !== false) { // псевдо регулярка
167
-                // из записи *-то делаем регулярное выражение вида: /^.+?\-то$/ui
168
-                $this->composite[] = '/^'.str_replace('\*', '.+?', preg_quote($word, '/')).'$/ui';
169
-
170
-            } else { // простое слово
171
-                $this->simple[] = $word;
172
-            }
173
-        }
174
-    }
25
+	/**
26
+	 * Простые слова
27
+	 *
28
+	 * @var array
29
+	 */
30
+	private $simple = array();
31
+
32
+	/**
33
+	 * Составные слова
34
+	 *
35
+	 * Составные слова о части которого нам известно.
36
+	 * Например слово пишется через тирэ
37
+	 *
38
+	 * @var array
39
+	 */
40
+	private $composite = array();
41
+
42
+	/**
43
+	 * Последовательности из набора слов
44
+	 *
45
+	 * @var array
46
+	 */
47
+	private $sequence = array();
48
+
49
+
50
+	/**
51
+	 * Конструктор
52
+	 *
53
+	 * @param \AnalyzerText\Text $iterator Текст
54
+	 */
55
+	public function __construct(Text $iterator) {
56
+		parent::__construct($iterator);
57
+		$this->repackWordList();
58
+	}
59
+
60
+	/**
61
+	 * Проверяет, является ли текущее слово допустимым
62
+	 *
63
+	 * @return boolean
64
+	 */
65
+	public function accept() {
66
+		$word = $this->current();
67
+		return $this->isSequence($word) || $this->isSimple($word) || $this->isComposite($word);
68
+	}
69
+
70
+	/**
71
+	 * Это последовательность
72
+	 *
73
+	 * @param \AnalyzerText\Text\Word $word Слово
74
+	 *
75
+	 * @return boolean
76
+	 */
77
+	public function isSequence(Word $word) {
78
+		$plain = $word->getPlain();
79
+		foreach ($this->sequence as $sequence) {
80
+			if ($sequence[0] == $plain) {
81
+				for ($i = 1; $i < count($sequence); $i++) {
82
+					if (!($word = $this->getNextWord($i)) || $word->getPlain() != $sequence[$i]) {
83
+						return false;
84
+					}
85
+				}
86
+				// удаляем слова из последовательности
87
+				$key = $this->getText()->key();
88
+				for ($i = 1; $i < count($sequence); $i++) {
89
+					$this->getText()->seek($key+$i);
90
+					$this->getText()->remove();
91
+				}
92
+				$this->getText()->seek($key);
93
+				return true;
94
+			}
95
+		}
96
+		return false;
97
+	}
98
+
99
+	/**
100
+	 * Это простое слово
101
+	 *
102
+	 * @param \AnalyzerText\Text\Word $word Слово
103
+	 *
104
+	 * @return boolean
105
+	 */
106
+	public function isSimple(Word $word) {
107
+		return in_array($word->getPlain(), $this->simple);
108
+	}
109
+
110
+	/**
111
+	 * Это составное слово
112
+	 *
113
+	 * @param \AnalyzerText\Text\Word $word Слово
114
+	 *
115
+	 * @return boolean
116
+	 */
117
+	public function isComposite(Word $word) {
118
+		foreach ($this->composite as $reg) {
119
+			if (preg_match($reg, $word->getWord())) {
120
+				return true;
121
+			}
122
+		}
123
+		return false;
124
+	}
125
+
126
+	/**
127
+	 * Возвращает список слов
128
+	 *
129
+	 * Возвращает список слов которые необходимо удалить или оставить
130
+	 * Если слово составное и пишестся через тире, но одна из частей может менятся например:
131
+	 * <code>
132
+	 *   подай-ка, налей-ка, молоко-то сбежало, наценка-с
133
+	 * </code>
134
+	 * то нужно писать шаблон вида:
135
+	 * <code>
136
+	 *   [ '*-ка', '*-то', '*-с' ]
137
+	 * </code>
138
+	 * Для удаления последовательности слов ячейка слова должна представляться в виде набора слов разделенных пробелом
139
+	 * <code>
140
+	 *   [ 'вовсе не', 'несмотря на то что' ]
141
+	 * </code>
142
+	 * Так же есть возможность указывать регулярные выражения для отлавливания сложных конструкций
143
+	 * <code>
144
+	 *   // ААааа Аааа-а-а
145
+	 *   [ '/^а+(\-а+)*$/ui' ]
146
+	 * </code>
147
+	 * В регулярное выражение передается оригинальное слово, а не урощенная форма
148
+	 *
149
+	 * @return array
150
+	 */
151
+	abstract public function getWords();
152
+
153
+	/**
154
+	 * Разбор набора шаблонов слов и составление условий поиска соответствий
155
+	 */
156
+	private function repackWordList() {
157
+		$words = $this->getWords();
158
+		// разбор на категории
159
+		foreach ($words as $word) {
160
+			if ($word[0] == '/') { // регулярное выражение
161
+				$this->composite[] = $word;
162
+
163
+			} elseif (strpos($word, ' ') !== false) { // последовательность
164
+				$this->sequence[] = explode(' ', $word);
165
+
166
+			} elseif (strpos($word, '*') !== false) { // псевдо регулярка
167
+				// из записи *-то делаем регулярное выражение вида: /^.+?\-то$/ui
168
+				$this->composite[] = '/^'.str_replace('\*', '.+?', preg_quote($word, '/')).'$/ui';
169
+
170
+			} else { // простое слово
171
+				$this->simple[] = $word;
172
+			}
173
+		}
174
+	}
175 175
 
176 176
 }
177 177
\ No newline at end of file
Please login to merge, or discard this patch.
AnalyzerText/Filter/WordList/Interjection.php 1 patch
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -18,23 +18,23 @@
 block discarded – undo
18 18
  */
19 19
 class Interjection extends WordList {
20 20
 
21
-    /**
22
-     * Возвращает список слов
23
-     *
24
-     * @return array
25
-     */
26
-    public function getWords() {
27
-        return array(
28
-            // русские междометья
29
-            'ох', 'ого', 'ого', 'эй', 'эх', 'цып', 'брысь', 'aх', 'ух', 'брр', 'тпру', 'гм', 'дзинь', 'тс', 'цс', 'тьфу',
30
-            'ой', 'фу', 'фи', 'ага', 'апчи', 'браво', 'ж', 'буль', 'ку', 'хлоп', 'бац', 'бух', 'шлёп', 'бум', 'бах', 'пли',
31
-            'гав', 'мяу', 'тра', 'ишь', 'вишь', 'то-то', 'эка', 'ш', 'вот те раз', 'ну', 'типа', 'хватит', 'лады', 'ок',
32
-            'хорош', 'короче',
33
-            '/^а+(\-а+)*$/ui', // ААааа Аааа-а-а
21
+	/**
22
+	 * Возвращает список слов
23
+	 *
24
+	 * @return array
25
+	 */
26
+	public function getWords() {
27
+		return array(
28
+			// русские междометья
29
+			'ох', 'ого', 'ого', 'эй', 'эх', 'цып', 'брысь', 'aх', 'ух', 'брр', 'тпру', 'гм', 'дзинь', 'тс', 'цс', 'тьфу',
30
+			'ой', 'фу', 'фи', 'ага', 'апчи', 'браво', 'ж', 'буль', 'ку', 'хлоп', 'бац', 'бух', 'шлёп', 'бум', 'бах', 'пли',
31
+			'гав', 'мяу', 'тра', 'ишь', 'вишь', 'то-то', 'эка', 'ш', 'вот те раз', 'ну', 'типа', 'хватит', 'лады', 'ок',
32
+			'хорош', 'короче',
33
+			'/^а+(\-а+)*$/ui', // ААааа Аааа-а-а
34 34
 
35
-            // английские междометья
36
-            'ok', 'oh', 'ah', 'bravo',
37
-        );
38
-    }
35
+			// английские междометья
36
+			'ok', 'oh', 'ah', 'bravo',
37
+		);
38
+	}
39 39
 
40 40
 }
41 41
\ No newline at end of file
Please login to merge, or discard this patch.