惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Stack Overflow Blog
Stack Overflow Blog
量子位
Cyberwarzone
Cyberwarzone
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Know Your Adversary
Know Your Adversary
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Scott Helme
Scott Helme
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
D
Docker
大猫的无限游戏
大猫的无限游戏
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
Hacker News: Ask HN
Hacker News: Ask HN
SecWiki News
SecWiki News
F
Full Disclosure
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Heimdal Security Blog
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
Cloudbric
Cloudbric
W
WeLiveSecurity
S
Schneier on Security
Project Zero
Project Zero
T
Threat Research - Cisco Blogs
罗磊的独立博客
Schneier on Security
Schneier on Security
G
Google Developers Blog
Cisco Talos Blog
Cisco Talos Blog
L
Lohrmann on Cybersecurity
A
Arctic Wolf
P
Privacy & Cybersecurity Law Blog
小众软件
小众软件
有赞技术团队
有赞技术团队
云风的 BLOG
云风的 BLOG
NISL@THU
NISL@THU
S
Security Affairs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园_首页

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Список слов русского языка из Wiktionary и сравнение с pymorphy3 на примере Пушкина и Noize MC *
TatarnikovEg · 2026-04-30 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение9 мин

Охват и читатели548

Кейс

Оглавление

Введение

В задачах обработки естественного языка (NLP) часто требуется список слов русского языка. Такой список может использоваться как базовый фильтр для выявления неизвестных и потенциально некорректных слов.

Одним из распространённых инструментов для работы с русским текстом является библиотека pymorphy (pymorphy2 / pymorphy3), основанная на корпусе русского языка OpenCorpora. Она предназначена для морфологического анализа текстов и, в том числе, позволяет проверять, известно ли слово встроенному словарю библиотеки.

Однако словарь pymorphy ориентирован на нормативную лексику и морфологию. В нём отсутствует значительная часть имён собственных, топонимов, заимствований, разговорной и современной лексики. Поэтому при использовании pymorphy для фильтрации текста возникают ложные срабатывания, много редких и нестандартных слов определяются как неизвестные (что мы увидим ниже в разделе сравнения словарей).

Для повышения полноты выявления неизвестных слов я решил собрать свой максимально широкий список слов русского языка для задач NLP.

Такой список слов можно получить на основе данных сайта Wiktionary (Викисловарь). Wiktionary - это открытый многоязычный словарь, в котором каждая словарная единица представлена в виде отдельной статьи. Викисловарь содержит информацию о словах различных языков, включая русский, а также сведения об их морфологических и синтаксических свойствах.

Далее в статье термины «словарь» и «список слов» используются как синонимы. Под словарём понимается именно список слов, а не полноценный лингвистический словарь с определениями и разметкой.

Также термины «слово» и «словоформа» используются как равнозначные. Для обозначения нормальной формы слова используется термин «лемма».

Процесс создания словаря

Существуют готовые инструменты для парсинга данных с вики-сайтов, например wiktextract [1]. Wiktextract обрабатывает внутренние конструкции сайта и формирует структурированные данные. В результате получается полноценная лексическая база. Wiktextract решает широкий круг задач и является предпочтительным решением для задач, где требуется извлечение морфологии, значений и других лингвистических характеристик. Однако для задачи получения простого списка слов такой уровень обработки является избыточным и усложняет процесс без практической необходимости. К тому же wiktextract ориентирован под англоязычный раздел Wiktionary (enwiktionary).

Поэтому для решения своей задачи я выбрал более простой метод: взял данные русскоязычного раздела Wiktionary (ruwiktionary) и применил собственную логику фильтрации. Такой подход даёт полный контроль над процессом формирования словаря и достаточен, если требуется получить список слов для практических задач. При этом ruwiktionary в разы меньше enwiktionary, что также ускоряет обработку.

Идея создания словаря такая:

В Wiktionary слова и устойчивые выражения имеют собственную страницу, а названия страниц совпадают с этими словами (выражениями). Поэтому, собрав все заголовки ruwiktionary, мы получим большой список слов русского языка для задач NLP.

Попытка 1. Создание словаря на основе названий статей Викисловаря

Я скачал дамп ruwiktionary-latest-all-titles-in-ns0.gz [2]

Дамп содержит список заголовков всех статей из основного пространства имён русского раздела Wiktionary.

Был собран список заголовков. Для фильтрации заголовков использовалось следующее правило:

ru_pattern = re.compile(r"^[А-Яа-яЁё]+(?:[-'][А-Яа-яЁё]+)*$")

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

После фильтрации все слова были приведены к нижнему регистру, удалены дубликаты и отсортированы.

В результате получился словарь с количеством слов: 1 542 954.

Вот первые 10 слов полученного списка:

word

0

а

1

а'асх

2

а'атчевматальын

3

а'атчегматальын

4

а'к'алтывагыргын

5

а-а

6

а-а-а

7

а-а-а-а

8

а-ах

9

а-во

Видно, что в словаре представлены не только русские слова, но и слова других языков на кириллице (к примеру, слово "а'атчевматальын" - это слово из чукотского языка).

Для повышения качества словаря требуется дополнительная фильтрация слов.

Попытка 2. Создание словаря на основе полного дампа содержимого русского Викисловаря

Для формирования словаря был скачан более полный дамп ruwiktionary-latest-pages-articles-multistream.xml.bz2 [3]

Дамп содержит тексты всех статей русского раздела Wiktionary. Это позволяет выполнить фильтрацию не только по языку, но и по содержимому.

Дамп был распакован. Из XML извлечены статьи.

Для каждой статьи извлечен заголовок (слово), проверено наличие русского раздела ({{-ru-}}) и выполнена фильтрация по ru_pattern, как и в прошлом примере. Дополнительно были удалены односимвольные слова, кроме а, в, и, к, о, с, у, я. Также удалены шумы, крики, припевки типа а-а-а.

re.compile(r"^(?![авикосуя]$)[а-яё]$")
re.compile(r"^(а|о|у|э|и|ы|е|я|ё|ю)(-\1)+$")

В результате сформирован список заголовков статей (слов), написанных на кириллице и имеющих русскоязычный раздел. Количество слов в полученном словаре: 444 148.

Выборочная проверка слов

Вот первые 10 и случайные 10 слов из словаря:

word

word

0

а

163564

лемго

1

а-во

231463

орзали

2

а-дато

23402

бацкино

3

а-каприччио

400904

укиха

4

а-конто

235468

ответчица

5

а-ля

238978

отнимавши

6

а-ля-карт

206539

неоязычество

7

а-мольный

439786

энрике

8

а-форфе

377324

сторновав

9

аа

233787

остекление

Составим таблицу со значениями выбранных слов.

Слово

Значение

Ссылка

а

союз: противопоставление, сопоставление

https://ru.wiktionary.org/wiki/а

а-во

сокращение от агентство

https://ru.wiktionary.org/wiki/а-во

а-дато

финансовый термин: число, от которого дан тот или иной документ

https://ru.wiktionary.org/wiki/а-дато

а-каприччио

музыкальный термин: произвольно, не подчиняясь установившимся формам

https://ru.wiktionary.org/wiki/а-каприччио

а-конто

финансовый термин: вид предварительного расчёта, представляющий собой авансовую оплату счетов экспортёра импортёром за проданные товары

https://ru.wiktionary.org/wiki/а-конто

а-ля

подобно, наподобие, словно, по образцу

https://ru.wiktionary.org/wiki/а-ля

а-ля-карт

по меню, по карте

https://ru.wiktionary.org/wiki/а-ля-карт

а-мольный

написанный в тональности ля минор

https://ru.wiktionary.org/wiki/а-мольный

а-форфе

заранее произведённая налоговыми органами оценка прибыли предприятия, на котором не ведётся точный бухгалтерский учёт

https://ru.wiktionary.org/wiki/а-форфе

аа

междометие (эмоциональный звук)

https://ru.wiktionary.org/wiki/аа

лемго

город в Германии

https://ru.wiktionary.org/wiki/Лемго

орзали

мужское имя

https://ru.wiktionary.org/wiki/Орзали

бацкино

село в России

https://ru.wiktionary.org/wiki/Бацкино

укиха

город в Японии

https://ru.wiktionary.org/wiki/Укиха

ответчица

женск. к ответчик

https://ru.wiktionary.org/wiki/ответчица

отнимавши

дееприч. от отнимать

https://ru.wiktionary.org/wiki/отнимавши

неоязычество

новое язычество; движение, связанное с возрождением доавраамических верований

https://ru.wiktionary.org/wiki/неоязычество

энрике

мужское имя

https://ru.wiktionary.org/wiki/Энрике

сторновав

дееприч. от сторновать

https://ru.wiktionary.org/wiki/сторновав

остекление

действие по значению гл. остеклить

https://ru.wiktionary.org/wiki/остекление

Представленные слова действительно имеют значение и могут употребляться в русскоязычных текстах. В словаре встречаются междометия, которые не несут большого смыслового значения, но тем не менее употребляются в речи. В словаре есть топонимы, имена и фамилии, много редко используемых, устаревших или узкоспециализированных слов, что естественно ввиду большого размера словаря.

Особенности словаря

  • Наличие русского раздела и фильтрация по кириллице не гарантируют, что слово русское. В словаре присутствуют редкие, заимствованные, транслитерированные и специфичные слова, имена собственные (в том числе топонимы, имена и фамилии).

  • Словарь не лемматизирован и включает как леммы, так и различные словоформы (например, причастия и деепричастия). Лемматизация не использовалась, потому что она может некорректно обрабатывать редкие и неизвестные слова, искажая их форму.

Такой подход позволяет охватить максимально широкий перечень словоформ. Это снижает количество ложных срабатываний и уменьшает объём ручной проверки, так как после сравнения со словарем в тексте остаются в основном:

  • шумовые токены (например, вокализации типа "ля-ля-ля");

  • опечатки;

  • несуществующие или выдуманные слова;

  • вкрапления других языков.

Сравнение с pymorphy3

Для оценки полученного словаря было выполнено сравнение со встроенным словарём библиотеки pymorphy3.

Результаты представлены в таблице:

Метрика

Словарь pymorphy

Словарь из Wiktionary

Размер словаря, словоформ

3 063 823

444 148

Взаимное перекрытие словарей

249 155 словоформ

8,1% покрывается Wiktionary

56,1% покрывается pymorphy

Количество относительно уникальных словоформ

2 814 668

194 993

Доля относительно уникальных словоформ

91.9%

43.9%

Словарь pymorphy во много раз больше словаря, созданного из данных Wiktionary. Однако 43.9% полученного словаря состоит из уникальных слов, которых нет в словаре pymorphy, что может быть полезным при анализе текстов.

Проверка на текстах Пушкина и Noize MC

Для оценки того, насколько вновь созданный словарь поможет в фильтрации неизвестных слов был проведён анализ двух текстов:

  • "Евгений Онегин" Александра Сергеевича Пушкина;

  • Все тексты песен Ивана Александровича Алексеева (Noize MC).

Результаты анализа приведены в таблице ниже:

 Метрика

А.С. Пушкин «Евгений Онегин»

Тексты песен И.А. Алексеева (Noize MC)

До лемматизации через pymorphy3

Количество уникальных словоформ

9333

23365

Известны pymorphy

9038

21566

После лемматизации через pymorphy3 (лемматизировали только известные pymorphy3 слова)

Уникальных лемм и неизвестных словоформ

5519

13481

Известны pymorphy

5224

11682

Неизвестны pymorphy

295

1799

Доля неизвестных словоформ для словаря pymorphy

5.3%

13.3%

Из неизвестных pymorphy словоформ покрыты словарем из Wiktionary

43

449

Словарь из Wiktionary дополнительно покрыл неизвестных словоформ

14.6%

25.0%

Осталось неизвестных словоформ после двух словарей

252

1350

4.6%

10.0%

В "Евгении Онегине" словарь из Wiktionary дополнительно покрыл 14.6% уникальных словоформ текста, которые отсутствуют в pymorphy.

Примеры таких слов:

вертер, дельвиг, митридат, морфей, осьмнадцать, дале, заране.

Это в основном имена собственные, архаизмы и устаревшие формы слов.

Для современных текстов (Noize MC) эффект значительно выше. Wiktionary дополнительно распознал 25.0% неизвестных словоформ.

Примеры:

  • сленг: кайфовый, движ, тусить, ништяк;

  • заимствования: баттл, дисс, флоу, лайв;

  • интернет-лексика: видос, гифка, комментить;

  • обсценная лексика: п**дос, до**я, х**та;

  • составные слова: бабл-гам, фитнес-тренер.

Словарь pymorphy отлично покрывает классические тексты и хорошо современные, поэтому является предпочтительным для морфологического анализа.

Однако словарь на основе Wiktionary неплохо дополняет его за счёт:

  • имён собственных;

  • топонимов;

  • заимствований;

  • обсценной лексики;

  • современной разговорной и интернет-лексики;

  • редких и устаревших слов.

Значительная часть оставшихся после двух словарей словоформ это:

  • повторяющиеся слоги и вокализации: "ла-ла-ла", "е-е-е";

  • словоформы с дефисом: "час-другой", "моралисты-псевдожурналисты";

  • опечатки или специально искаженные написания слов: "канатоходець", "узбагойзя";

  • слова других языков: "катацумури", "пробач".

Видно, что два словаря максимально отфильтровали из текста известные и допустимые словоформы, оставив в остатке преимущественно шумовые, заимствованные, выдуманные и неправильные слова.

Вывод

В результате получился практический список словоформ русского языка состоящий из 444 тыс. слов.

В сравнении, словарь pymorphy значительно больше. Он содержит миллионы словоформ и хорошо покрывает нормативную лексику. Это делает его удобным и предпочтительным для морфологического анализа.

Словарь на основе Wiktionary меньше по размеру, но в нём присутствуют имена собственные, топонимы, заимствования, сленг и редкая лексика, которые часто отсутствуют в pymorphy.

На реальных текстах это даёт практический эффект:

  • Для классической литературы (Пушкин) pymorphy покрывает 94.7% текста.
    Словарь из Wiktionary дополнительно покрывает 14.6% неизвестных слов.

  • Для современных текстов (Noize MC) pymorphy покрывает 86.7% текста.
    Словарь из Wiktionary дополнительно покрывает 25.0% неизвестных слов.

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

Предложенный подход показывает, что списки слов можно собирать самостоятельно на основе данных Wiktionary. При этом процесс формирования словаря относительно простой, быстрый и полностью контролируется. Можно выбирать дамп, настроить правила фильтрации и адаптировать результат под конкретные задачи.

Также данный подход можно применять для создания словарей других языков. Достаточно скачать нужный дамп Wiktionary и изменить правила фильтрации под особенности языка.

Таким образом, словарь созданный на основе данных Wiktionary хорошо дополняет словарь pymorphy и может использоваться в задачах NLP.

Ссылка на GitHub

  • Список слов русского языка на основе данных Wiktionary в форматах CSV и TXT;

  • Список слов, которые есть в словаре из Wiktionary, но отсутствуют в pymorphy в форматах CSV и TXT;

  • Файл с проектом ipynb

доступны в репозитории: https://github.com/EgorTatarnikov/rus_dict_wiktionary

Другие ссылки:

  1. https://github.com/tatuylonen/wiktextract - парсер Wiktionary.

  2. https://dumps.wikimedia.org/ruwiktionary/latest/ruwiktionary-latest-all-titles-in-ns0.gz - список заголовков всех статей ruwiktionary.

  3. https://dumps.wikimedia.org/ruwiktionary/latest/ruwiktionary-latest-pages-articles-multistream.xml.bz2 - полный XML-дамп со всеми статьями ruwiktionary.

* Признан минюстом РФ иностранным агентом