Completed
Push — master ( 993666...407fb6 )
by Peter
14:04 queued 12:27
created
AnalyzerText/Filter/WordList/WordList.php 2 patches
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -20,159 +20,159 @@
 block discarded – undo
20 20
  */
21 21
 abstract class WordList extends Filter
22 22
 {
23
-    /**
24
-     * Простые слова.
25
-     *
26
-     * @var array
27
-     */
28
-    private $simple = array();
29
-
30
-    /**
31
-     * Составные слова.
32
-     *
33
-     * Составные слова о части которого нам известно.
34
-     * Например слово пишется через тирэ
35
-     *
36
-     * @var array
37
-     */
38
-    private $composite = array();
39
-
40
-    /**
41
-     * Последовательности из набора слов.
42
-     *
43
-     * @var array
44
-     */
45
-    private $sequence = array();
46
-
47
-    /**
48
-     * @param Text $iterator Текст
49
-     */
50
-    public function __construct(Text $iterator)
51
-    {
52
-        parent::__construct($iterator);
53
-        $this->repackWordList();
54
-    }
55
-
56
-    /**
57
-     * Проверяет, является ли текущее слово допустимым
58
-     *
59
-     * @return bool
60
-     */
61
-    public function accept()
62
-    {
63
-        $word = $this->current();
64
-
65
-        return $this->isSequence($word) || $this->isSimple($word) || $this->isComposite($word);
66
-    }
67
-
68
-    /**
69
-     * Это последовательность.
70
-     *
71
-     * @param Word $word Слово
72
-     *
73
-     * @return bool
74
-     */
75
-    public function isSequence(Word $word)
76
-    {
77
-        $plain = $word->getPlain();
78
-        foreach ($this->sequence as $sequence) {
79
-            if ($sequence[0] == $plain) {
80
-                $sequence_length = count($sequence);
81
-                for ($i = 1; $i < $sequence_length; ++$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 < $sequence_length; ++$i) {
89
-                    $this->getText()->seek($key + $i);
90
-                    $this->getText()->remove();
91
-                }
92
-                $this->getText()->seek($key);
93
-
94
-                return true;
95
-            }
96
-        }
97
-
98
-        return false;
99
-    }
100
-
101
-    /**
102
-     * Это простое слово.
103
-     *
104
-     * @param Word $word Слово
105
-     *
106
-     * @return bool
107
-     */
108
-    public function isSimple(Word $word)
109
-    {
110
-        return in_array($word->getPlain(), $this->simple);
111
-    }
112
-
113
-    /**
114
-     * Это составное слово.
115
-     *
116
-     * @param Word $word Слово
117
-     *
118
-     * @return bool
119
-     */
120
-    public function isComposite(Word $word)
121
-    {
122
-        foreach ($this->composite as $reg) {
123
-            if (preg_match($reg, $word->getWord())) {
124
-                return true;
125
-            }
126
-        }
127
-
128
-        return false;
129
-    }
130
-
131
-    /**
132
-     * Возвращает список слов.
133
-     *
134
-     * Возвращает список слов которые необходимо удалить или оставить
135
-     * Если слово составное и пишестся через тире, но одна из частей может менятся например:
136
-     * <code>
137
-     *   подай-ка, налей-ка, молоко-то сбежало, наценка-с
138
-     * </code>
139
-     * то нужно писать шаблон вида:
140
-     * <code>
141
-     *   [ '*-ка', '*-то', '*-с' ]
142
-     * </code>
143
-     * Для удаления последовательности слов ячейка слова должна представляться в виде набора слов разделенных пробелом
144
-     * <code>
145
-     *   [ 'вовсе не', 'несмотря на то что' ]
146
-     * </code>
147
-     * Так же есть возможность указывать регулярные выражения для отлавливания сложных конструкций
148
-     * <code>
149
-     *   // ААааа Аааа-а-а
150
-     *   [ '/^а+(\-а+)*$/ui' ]
151
-     * </code>
152
-     * В регулярное выражение передается оригинальное слово, а не урощенная форма
153
-     *
154
-     * @return array
155
-     */
156
-    abstract public function getWords();
157
-
158
-    /**
159
-     * Разбор набора шаблонов слов и составление условий поиска соответствий.
160
-     */
161
-    private function repackWordList()
162
-    {
163
-        $words = $this->getWords();
164
-        // разбор на категории
165
-        foreach ($words as $word) {
166
-            if ($word[0] == '/') { // регулярное выражение
167
-                $this->composite[] = $word;
168
-            } elseif (strpos($word, ' ') !== false) { // последовательность
169
-                $this->sequence[] = explode(' ', $word);
170
-            } elseif (strpos($word, '*') !== false) { // псевдо регулярка
171
-                // из записи *-то делаем регулярное выражение вида: /^.+?\-то$/ui
172
-                $this->composite[] = '/^'.str_replace('\*', '.+?', preg_quote($word, '/')).'$/ui';
173
-            } else { // простое слово
174
-                $this->simple[] = $word;
175
-            }
176
-        }
177
-    }
23
+	/**
24
+	 * Простые слова.
25
+	 *
26
+	 * @var array
27
+	 */
28
+	private $simple = array();
29
+
30
+	/**
31
+	 * Составные слова.
32
+	 *
33
+	 * Составные слова о части которого нам известно.
34
+	 * Например слово пишется через тирэ
35
+	 *
36
+	 * @var array
37
+	 */
38
+	private $composite = array();
39
+
40
+	/**
41
+	 * Последовательности из набора слов.
42
+	 *
43
+	 * @var array
44
+	 */
45
+	private $sequence = array();
46
+
47
+	/**
48
+	 * @param Text $iterator Текст
49
+	 */
50
+	public function __construct(Text $iterator)
51
+	{
52
+		parent::__construct($iterator);
53
+		$this->repackWordList();
54
+	}
55
+
56
+	/**
57
+	 * Проверяет, является ли текущее слово допустимым
58
+	 *
59
+	 * @return bool
60
+	 */
61
+	public function accept()
62
+	{
63
+		$word = $this->current();
64
+
65
+		return $this->isSequence($word) || $this->isSimple($word) || $this->isComposite($word);
66
+	}
67
+
68
+	/**
69
+	 * Это последовательность.
70
+	 *
71
+	 * @param Word $word Слово
72
+	 *
73
+	 * @return bool
74
+	 */
75
+	public function isSequence(Word $word)
76
+	{
77
+		$plain = $word->getPlain();
78
+		foreach ($this->sequence as $sequence) {
79
+			if ($sequence[0] == $plain) {
80
+				$sequence_length = count($sequence);
81
+				for ($i = 1; $i < $sequence_length; ++$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 < $sequence_length; ++$i) {
89
+					$this->getText()->seek($key + $i);
90
+					$this->getText()->remove();
91
+				}
92
+				$this->getText()->seek($key);
93
+
94
+				return true;
95
+			}
96
+		}
97
+
98
+		return false;
99
+	}
100
+
101
+	/**
102
+	 * Это простое слово.
103
+	 *
104
+	 * @param Word $word Слово
105
+	 *
106
+	 * @return bool
107
+	 */
108
+	public function isSimple(Word $word)
109
+	{
110
+		return in_array($word->getPlain(), $this->simple);
111
+	}
112
+
113
+	/**
114
+	 * Это составное слово.
115
+	 *
116
+	 * @param Word $word Слово
117
+	 *
118
+	 * @return bool
119
+	 */
120
+	public function isComposite(Word $word)
121
+	{
122
+		foreach ($this->composite as $reg) {
123
+			if (preg_match($reg, $word->getWord())) {
124
+				return true;
125
+			}
126
+		}
127
+
128
+		return false;
129
+	}
130
+
131
+	/**
132
+	 * Возвращает список слов.
133
+	 *
134
+	 * Возвращает список слов которые необходимо удалить или оставить
135
+	 * Если слово составное и пишестся через тире, но одна из частей может менятся например:
136
+	 * <code>
137
+	 *   подай-ка, налей-ка, молоко-то сбежало, наценка-с
138
+	 * </code>
139
+	 * то нужно писать шаблон вида:
140
+	 * <code>
141
+	 *   [ '*-ка', '*-то', '*-с' ]
142
+	 * </code>
143
+	 * Для удаления последовательности слов ячейка слова должна представляться в виде набора слов разделенных пробелом
144
+	 * <code>
145
+	 *   [ 'вовсе не', 'несмотря на то что' ]
146
+	 * </code>
147
+	 * Так же есть возможность указывать регулярные выражения для отлавливания сложных конструкций
148
+	 * <code>
149
+	 *   // ААааа Аааа-а-а
150
+	 *   [ '/^а+(\-а+)*$/ui' ]
151
+	 * </code>
152
+	 * В регулярное выражение передается оригинальное слово, а не урощенная форма
153
+	 *
154
+	 * @return array
155
+	 */
156
+	abstract public function getWords();
157
+
158
+	/**
159
+	 * Разбор набора шаблонов слов и составление условий поиска соответствий.
160
+	 */
161
+	private function repackWordList()
162
+	{
163
+		$words = $this->getWords();
164
+		// разбор на категории
165
+		foreach ($words as $word) {
166
+			if ($word[0] == '/') { // регулярное выражение
167
+				$this->composite[] = $word;
168
+			} elseif (strpos($word, ' ') !== false) { // последовательность
169
+				$this->sequence[] = explode(' ', $word);
170
+			} elseif (strpos($word, '*') !== false) { // псевдо регулярка
171
+				// из записи *-то делаем регулярное выражение вида: /^.+?\-то$/ui
172
+				$this->composite[] = '/^'.str_replace('\*', '.+?', preg_quote($word, '/')).'$/ui';
173
+			} else { // простое слово
174
+				$this->simple[] = $word;
175
+			}
176
+		}
177
+	}
178 178
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -86,7 +86,7 @@
 block discarded – undo
86 86
                 // удаляем слова из последовательности
87 87
                 $key = $this->getText()->key();
88 88
                 for ($i = 1; $i < $sequence_length; ++$i) {
89
-                    $this->getText()->seek($key + $i);
89
+                    $this->getText()->seek($key+$i);
90 90
                     $this->getText()->remove();
91 91
                 }
92 92
                 $this->getText()->seek($key);
Please login to merge, or discard this patch.