СЕРВИСЫ БЛОГ
Дата: 08.08.2016

Невозможные сочетания букв русского языка

Решение для очистки семантики.
невозможные сочетания букв

Фильтрация семантики является одним из самых трудоёмких этапов при составлении качественного семантического ядра сайта. Проблемы возникают как при сборе строк из ПС, так и при работе с базами готовых ключевых слов. Например, в базе Пастухова значительная часть фраз содержит опечатки того или иного вида, которые бесполезны в современном SEO и лишь увеличивают время поиска в базе и дальнейшей ручной обработке результатов. К сожалению, использование готовых словарей в целях фильтрации сильно осложнено, так как современная разговорная лексика постоянно эволюционирует и невозможно сохранить запросы с живой речью содержащей вариации написания трендовых иностранных слов кириллическими буквами, различных названий, аббревиатур и современных акронимов. Ввиду выше сказанного, было решено попробовать отфильтровать мусор в семантике методом поиска строк с невозможными сочетаниями букв русского алфавита, которые при всем желании язык сказать не повернётся. Для этого необходимо было составить список всех сочетаний букв (аа, аб, ав... яя) и прогнать его через словарь современной русской речи. В результате этой операций мы бы получили частоту упоминаний того или иного сочетания букв, где все сочетания имеющие нулевое или близкое к нулю количество вхождений - это те невозможные сочетания букв русского языка, которые нам нужны.

Не один словарь по отдельности не прошёл проверки на современную лексику по заготовленному мозговым штурмом списку слов и аббревиатур, поэтому пришлось объединять различные словари в один список. Надо заметить, что не один словарь также не справился адекватно с буквой «ё», хотя некоторые содержали «ё» в одних словах, но не содержали в других, в частности, только в одном словаре присутствовало «её» остальные содержали только «ее». В любом случае, после получения первичного списка, все полученные наборы букв пришлось проверять вручную.

В итоге получился следующий список:

Редкие и невозможные буквосочетания русского языка:

ёё|ёщ|ыё|ёу|йэ|гъ|кщ|щф|щз|эщ|щк|гщ|щп|щт|щш|щг|щм|фщ|щл|щд|дщ|ьэ|чц|вй|ёц|ёэ|ёа|йа|шя|шы|ёе|йё|гю|хя|йы|ця|гь|сй|хю|хё|ёи|ёо|яё|ёя|ёь|ёэ|ъж|эё|ъд|цё|уь|щч|чй|шй|шз|ыф|жщ|жш|жц|ыъ|ыэ|ыю|ыь|жй|ыы|жъ|жы|ъш|пй|ъщ|зщ|ъч|ъц|ъу|ъф|ъх|ъъ|ъы|ыо|жя|зй|ъь|ъэ|ыа|нй|еь|цй|ьй|ьл|ьр|пъ|еы|еъ|ьа|шъ|ёы|ёъ|ът|щс|оь|къ|оы|щх|щщ|щъ|щц|кй|оъ|цщ|лъ|мй|шщ|ць|цъ|щй|йь|ъг|иъ|ъб|ъв|ъи|ъй|ъп|ър|ъс|ъо|ън|ък|ъл|ъм|иы|иь|йу|щэ|йы|йъ|щы|щю|щя|ъа|мъ|йй|йж|ьу|гй|эъ|уъ|аь|чъ|хй|тй|чщ|ръ|юъ|фъ|уы|аъ|юь|аы|юы|эь|эы|бй|яь|ьы|ьь|ьъ|яъ|яы|хщ|дй|фй

Небезопасные малочастотные буквосочетания выделены оранжевым цветом, иначе говоря есть некоторое количество слов или аббревиатур которые их содержат, нужные можно удалить с помощью следующего списка:

ёё - игрушка, салон-парикмахерская в Гродно (Беларусь) ёщ - тёща, тёщин ыё - выёживайся ёу - ёу йэ - йэх гъ - гъиба (ислам) буква + ъ - окончание слов в устаревшей кириллице ---- кщ - КЩС - кислотно-щелочное состояние (крови), маскщит щф - щелочная фосфатаза (кровь) ---- щз - щиты, щитки, заводы, здоровье эщ - относящееся к электрике щк - щиты, щитки гщ - главные щиты, пожогщики щп - щебеночно-песчаная, щит пожарный, щётка подметальная щт - щит токораспределительный щш - щит шкафный, вящшее щг - щит гарантированного питания ---- щм - вещьми, вещмешок, ЩМ - измерительный прибор, щиток метал., щётка метал. фщ - типографщик, телеграфщик, кинематографщик, ФЩЛ - модель устройства регистрации силы тока щл - ЩЛЗ - Щербинский лифтовой завод ---- щд - дробилка щековая, вещдок дщ - алебардщик, дщерь (устар. дочь), Дщица (фам.), ДЩМ - дробилки-измельчители, подщелкивание, подщелачивание ьэ - регион + энерго (компании), бельэтаж чц - ЧЦЗ - Челябинский цинковый завод, волчцы, древоточцы, начцеха вй - *вйс - различные компании ёц - клёцки, Ёцуги, Ёцуба, Шлёцер ёэ - ёэлектроника ёа - Ёаки - ресторан доставки сущи ---- йа - аллилуйа, экзотические имена, райадминистрация (укр.), ЙАР - Йеменская Арабская Республика, арабская буква, сура Корана, ресторан роллов в Набережных Челны, сленг (йа креведко) шя - Шяуляй (Литва) шы - Шымкент (Казахстан), Шынгыс (имя), Шым (псевдоним рос. рэп-исполнителя) ёе - замок Вильгельмсгёе в Германии йё - Йёнчёпинг - город в Швеции, Йёнс (имя) ---- гю - имена и фамилии, редкие азиатские названия, МГЮА, УрГЮА хя - экзотические имена и фамилии, Хягас (древнее царство), ХЯС - холодный ядерный синтез, Хямеенлинна - финский муницип. и город, Хяргас-Нуур (озеро в Монголии), Хямекоски (дер. в Карелии) йы - экзотические фамилии и различные названия за пределами России ця - китайские имена и фамилии, цянь (историческая денежная единица Китая) гь - экзотические фамилии, иностранная мифология сй - сйабуч - юмор (Задорнов), экзотические имена, хю - экзотические имена и названия, ХЬЮЛЯ - экомашина для дома (марка), Хютте - справочник для инженеров (не издается) хё - азиатские имена ---- ёи - Ёити (японское имя), Ёи - инди-группа (рус) ёо - Ёон - правило из японской грамматики яё - японские имена

Для более качественной фильтрации текстовых данных удалим также наборы букв, которые начинаться на Ь, Ъ и Ы. Для этого прибегнем к языку регулярных выражений RegExp, добавив следующее условие (высокосовместимый синтаксис):
(\n|^| )(ь|ъ|ы)[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]

Кроме невозможных сочетаний букв кириллицы, в текстовых данных могут присутствовать также сочетания русских и английских букв, например как в слове Кieв, которое невозможно идентифицировать как украинское слово простым поиском по уникальным буквам украинского языка. Поэтому, добавим к нашему списку следующие RegExp условия:
[a-z][абвгдеёжзийклмнопрстуфхцчшщъыьэюя]|[абвгдеёжзийклмнопрстуфхцчшщъыьэюя][a-z]

Таким образом, полный набор условий для фильтрации невозможных сочетаний букв выглядет следующим образом:
[a-z][абвгдеёжзийклмнопрстуфхцчшщъыьэюя]|[абвгдеёжзийклмнопрстуфхцчшщъыьэюя][a-z]|(\n|^| )(ь|ъ|ы)[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]|ёё|ёщ|ыё|ёу|йэ|гъ|кщ|щф|щз|эщ|щк|гщ|щп|щт|щш|щг|щм|фщ|щл|щд|дщ|ьэ|чц|вй|ёц|ёэ|ёа|йа|шя|шы|ёе|йё|гю|хя|йы|ця|гь|сй|хю|хё|ёи|ёо|яё|ёя|ёь|ёэ|ъж|эё|ъд|цё|уь|щч|чй|шй|шз|ыф|жщ|жш|жц|ыъ|ыэ|ыю|ыь|жй|ыы|жъ|жы|ъш|пй|ъщ|зщ|ъч|ъц|ъу|ъф|ъх|ъъ|ъы|ыо|жя|зй|ъь|ъэ|ыа|нй|еь|цй|ьй|ьл|ьр|пъ|еы|еъ|ьа|шъ|ёы|ёъ|ът|щс|оь|къ|оы|щх|щщ|щъ|щц|кй|оъ|цщ|лъ|мй|шщ|ць|цъ|щй|йь|ъг|иъ|ъб|ъв|ъи|ъй|ъп|ър|ъс|ъо|ън|ък|ъл|ъм|иы|иь|йу|щэ|йы|йъ|щы|щю|щя|ъа|мъ|йй|йж|ьу|гй|эъ|уъ|аь|чъ|хй|тй|чщ|ръ|юъ|фъ|уы|аъ|юь|аы|юы|эь|эы|бй|яь|ьы|ьь|ьъ|яъ|яы|хщ|дй|фй

Этот список можно вставлять прямо в таком виде в поле быстрого поиска в Key Collector с активированным режимом регулярных выражений RegExp или переделать под список стоп-слов.

Для фильтрации базы Пастухова и других текстов можно использовать следующий скрипт на PHP, который не пропускает на запись нового файла всю строку хотя бы с одним найденным вхождением:
<?php //UTF-8 $handle=fopen ("Keywords.txt", "r"); if ($handle) {while(($s=fgets ($handle, 800)) !== false) { $s=trim($s); $s=preg_replace('/ {2,}/', ' ', $s); $s=strtolower($s);

if (!preg_match('/([a-z][абвгдеёжзийклмнопрстуфхцчшщъыьэюя]|[абвгдеёжзийклмнопрстуфхцчшщъыьэюя][a-z]|(\n|^| )(ь|ъ|ы)[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]|ёё|ёщ|ыё|ёу|йэ|гъ|кщ|щф|щз|эщ|щк|гщ|щп|щт|щш|щг|щм|фщ|щл|щд|дщ|ьэ|чц|вй|ёц|ёэ|ёа|йа|шя|шы|ёе|йё|гю|хя|йы|ця|гь|сй|хю|хё|ёи|ёо|яё|ёя|ёь|ёэ|ъж|эё|ъд|цё|уь|щч|чй|шй|шз|ыф|жщ|жш|жц|ыъ|ыэ|ыю|ыь|жй|ыы|жъ|жы|ъш|пй|ъщ|зщ|ъч|ъц|ъу|ъф|ъх|ъъ|ъы|ыо|жя|зй|ъь|ъэ|ыа|нй|еь|цй|ьй|ьл|ьр|пъ|еы|еъ|ьа|шъ|ёы|ёъ|ът|щс|оь|къ|оы|щх|щщ|щъ|щц|кй|оъ|цщ|лъ|мй|шщ|ць|цъ|щй|йь|ъг|иъ|ъб|ъв|ъи|ъй|ъп|ър|ъс|ъо|ън|ък|ъл|ъм|иы|иь|йу|щэ|йы|йъ|щы|щю|щя|ъа|мъ|йй|йж|ьу|гй|эъ|уъ|аь|чъ|хй|тй|чщ|ръ|юъ|фъ|уы|аъ|юь|аы|юы|эь|эы|бй|яь|ьы|ьь|ьъ|яъ|яы|хщ|дй|фй)/', $s))
{ $temp.="$s\n";$n++; if($n > 99999)//накапливаем буфер строк для более быстрого чтения и записи { file_put_contents("Keywords-output.txt", $temp, FILE_APPEND | LOCK_EX); $temp='';$n=0; } } } file_put_contents("Keywords-output.txt", $temp, FILE_APPEND | LOCK_EX);//пишем остаток fclose($handle); echo "готово"; } ?>

В результате обработки этим скриптом было удалено около 11% строк в уже очищенной другими методами базе Пастухова.

Надо заметить, что использование PHP с таким пусть и наглядным, но не оптимизированным регулярным выражением не самое быстрое решение: построчное чтение функцией fgets и обработка миллиарда строк, а также запись нового очищенного файла займёт всю ночь, а то и дольше.

Аналогично можно создать словарь трёхбуквенных сочетаний букв, однако список получается настолько громоздким, что возможность его практического применения в плане производительности сводится к нулю, кроме того, стоит не забывать что все сочетания букв ещё необходимо проверить вручную. Также сложно создать подобный универсальный фильтр невозможных сочетаний латинских букв из-за обилия самых разнообразных технических обозначений и названий, которые содержат несочетаемые последовательности букв и просто читаются как аббревиатуры.


ЯДРО-СЕРВИС 2015, 2016, 2017...
ВСЕ ПРАВА ЗАЩИЩЕНЫ.
Страница сгенерирована за 0.013553 сек.