├── .gitignore ├── LICENSE ├── README.md ├── composer.json ├── phpunit.xml.dist ├── src └── NXP │ └── Stemmer.php └── tests ├── StemmerTest.php ├── bootstrap.php └── dict.php /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea/ 2 | /vendor/ 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Alexander Kiryukhin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Стеммер Портера для русского языка 2 | 3 | ## Описание 4 | 5 | Данный стеммер является заменой расширению stem_russian_unicode. 6 | 7 | ## Сравнение с расширением stem_russian_unicode 8 | 9 | *Плюсы:* 10 | 11 | 1. Не требует внешних расширений для PHP. Стеммер написан целиком на PHP. 12 | 2. Нет проблем с юникодом. stem_russian_unicode зависит от SET_LOCALE и может при неверном значении портить строки с юникодом. 13 | 3. Легко изменять под конкретные требования проекта. В случае расширения, при изменении логики работы его придётся пересобирать. 14 | 4. Требует для своей работы PHP версии >=5.3 (спасибо, usernam3 за pull-request) 15 | 16 | *Минусы:* 17 | 18 | В силу того, что этот стеммер написан на PHP с использованием регулярных выражений, он должен проигрывать в скорости работы скомпилированному расширению, написанному на C. 19 | 20 | 21 | ## Установка 22 | 23 | php composer.phar require nxp/russian-porter-stemmer 24 | 25 | ## Использование 26 | 27 | getWordBase($word); 34 | } 35 | $result = implode(' ', $stemmed); 36 | 37 | ## Отличия от классического стеммера Портера 38 | 39 | Единственное отличие заключается в том, что в данной реализации буква «ё» является самостоятельной гласной, а не буквой «е» 40 | 41 | ## Лицензия MIT 42 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nxp/russian-porter-stemmer", 3 | "description": "Russian porter stemmer", 4 | "minimum-stability": "stable", 5 | "version": "1.0.0", 6 | "keywords": ["russian", "stemmer"], 7 | "homepage": "http://github.com/NeonXP/Stemmer", 8 | "license": "MIT", 9 | "authors": [ 10 | { 11 | "name": "Alexander 'NeonXP' Kiryukhin", 12 | "email": "frei@neonxp.info" 13 | } 14 | ], 15 | "autoload": { 16 | "psr-0": {"NXP": "src/"} 17 | }, 18 | "require": { 19 | "php": ">=5.3.3" 20 | }, 21 | "require-dev": { 22 | "phpunit/phpunit": "^5.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | 15 | 16 | 17 | ./tests/ 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/NXP/Stemmer.php: -------------------------------------------------------------------------------- 1 | assertEquals($expected, Stemmer::getWordBase($word)); 29 | } 30 | } -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 |