ckiias/lec4-1-preprocessing.ipynb

180 KiB
Raw Blame History

In [2]:
import spacy

sp = spacy.load("ru_core_news_lg")
In [3]:
import pandas as pd
from docx import Document
import os


def read_docx(file_path):
    doc = Document(file_path)
    full_text = []
    for paragraph in doc.paragraphs:
        full_text.append(paragraph.text)
    return "\n".join(full_text)


def load_docs(dataset_path):
    df = pd.DataFrame(columns=["doc", "text"])
    for file_path in os.listdir(dataset_path):
        if file_path.startswith("~$"):
            continue
        text = read_docx(dataset_path + file_path)
        df.loc[len(df.index)] = [file_path, text]
    return df


df = load_docs("data/text/")
df["type"] = df.apply(lambda row: 0 if str(row["doc"]).startswith("tz_") else 1, axis=1)
df.info()
df.sort_values(by=["doc"], inplace=True)

display(df.head(), df.tail())
<class 'pandas.core.frame.DataFrame'>
Index: 41 entries, 0 to 40
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   doc     41 non-null     object
 1   text    41 non-null     object
 2   type    41 non-null     int64 
dtypes: int64(1), object(2)
memory usage: 1.3+ KB
doc text type
16 tz_01.docx 2.2 Техническое задание\n2.2.1 Общие сведения\... 0
19 tz_02.docx 2.2 Техническое задание\n2.2.1 Общие сведения\... 0
28 tz_03.docx 2.2. Техническое задание\nОбщие сведения:\nВ д... 0
35 tz_04.docx Техническое задание\n2.2.1 Общие сведения\nИнт... 0
38 tz_05.docx 2.2 Техническое задание\n2.2.1 Общие сведения.... 0
doc text type
25 Этапы разработки проекта2.docx Этапы разработки проекта: заключительные стади... 1
21 Этапы разработки проекта3.docx Этапы разработки проекта: определение стратеги... 1
40 Этапы разработки проекта4.docx Этапы разработки проекта: реализация, тестиров... 1
30 Этапы разработки проекта5.docx Этапы разработки проекта: стратегия и анализ\n... 1
22 Язык манипуляции данными.docx 2.1.3. Язык манипуляции данными (ЯМД)\nЯзык ма... 1
In [4]:
from gensim.models.phrases import Phraser, Phrases

def prep_text(text):
    doc = sp(text)
    lower_sents = []
    for sent in doc.sents:
        lower_sents.append([word.lemma_.lower() for word in sent if not word.is_punct and not word.is_stop and not word.is_space])
    lower_bigram = Phraser(Phrases(lower_sents))
    clean_sents = []
    for sent in lower_sents:
        clean_sents.append(lower_bigram[sent])
    return clean_sents

df["prep_text"] = df.apply(lambda row: prep_text(row["text"]), axis=1)
df
Out[4]:
doc text type prep_text
16 tz_01.docx 2.2 Техническое задание\n2.2.1 Общие сведения\... 0 [[2.2, технический, задание, 2.2.1, общий, све...
19 tz_02.docx 2.2 Техническое задание\n2.2.1 Общие сведения\... 0 [[2.2, технический, задание, 2.2.1, общий, све...
28 tz_03.docx 2.2. Техническое задание\nОбщие сведения:\nВ д... 0 [[2.2], [технический, задание, общий, сведение...
35 tz_04.docx Техническое задание\n2.2.1 Общие сведения\nИнт... 0 [[технический, задание, 2.2.1, общий, сведение...
38 tz_05.docx 2.2 Техническое задание\n2.2.1 Общие сведения.... 0 [[2.2, технический, задание, 2.2.1, общий, све...
2 tz_06.docx 2.2 Техническое задание\t\n1.Общие сведения\nП... 0 [[2.2, технический, задание, 1.общие, сведение...
4 tz_07.docx Техническое задание\nОбщие сведения\nВ данном ... 0 [[технический, задание, общий, сведение, разде...
33 tz_08.docx Техническое задание\n1 Общие сведения\n1.1 Пол... 0 [[технический, задание, 1, общий, сведение, 1....
39 tz_09.docx 2.2. Техническое задание\n2.2.1.\n\nОбщие свед... 0 [[2.2], [технический, задание, 2.2.1, общий, с...
1 tz_10.docx 2.2. Техническое задание\n2.2.1. Общие сведени... 0 [[2.2], [технический, задание, 2.2.1], [общий,...
5 tz_11.docx 2.2.\tТехническое задание\n2.2.1.\tОбщие сведе... 0 [[2.2], [технический, задание, 2.2.1, общий, с...
36 tz_12.docx 2.2\tТехническое задание\n2.2.1\tОбщие сведени... 0 [[2.2, технический, задание, 2.2.1, общий, све...
37 tz_13.docx 2.2. Техническое задание\n2.2.1. Общие сведени... 0 [[2.2], [технический, задание, 2.2.1], [общий,...
20 tz_14.docx Техническое задание\nРассмотрев общие требован... 0 [[технический, задание, рассмотрев, общий, тре...
27 tz_15.docx Техническое задание\n2.2.1. Общие сведения\nПо... 0 [[технический, задание, 2.2.1], [общий, сведен...
9 tz_16.docx 2.2\tТехническое задание\n2.2.1\tОбщие сведени... 0 [[2.2, технический, задание, 2.2.1, общий, све...
18 tz_17.docx 2.2 Техническое задание.\n2.2.1 Общие сведения... 0 [[2.2, технический, задание], [2.2.1, общий, с...
23 tz_18.docx 2.2. Техническое задание\nОбщие сведения:\nПол... 0 [[2.2], [технический, задание, общий, сведение...
24 tz_19.docx 2.2. Техническое задание\n2.2.1. Наименование ... 0 [[2.2], [технический, задание, 2.2.1], [наимен...
10 tz_20.docx 2.2. Техническое задание\n2.2.1. Общие сведени... 0 [[2.2], [технический, задание, 2.2.1], [общий,...
32 Архитектура, управляемая модель.docx Архитектура, управляемая модель\nАббревиатура ... 1 [[архитектура, управляемая, модель, аббревиату...
15 Введение в проектирование ИС.docx 1. ВВЕДЕНИЕ В ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННЫХ СИ... 1 [[1], [введение, проектирование, информационны...
0 Встроенные операторы SQL.docx Встроенные операторы SQL. \nКак было отмечено ... 1 [[встроенные, оператор, sql], [отметить, sql, ...
8 Методологии разработки программного обеспечени... Методологии разработки программного обеспечени... 1 [[методология, разработка, программный_обеспеч...
26 Методологии разработки программного обеспечени... Методологии разработки программного обеспечени... 1 [[методология, разработка, программный, обеспе...
14 Методы композиции и декомпозиции.docx Методы композиции и декомпозиции исполняемых U... 1 [[метод, композиция_декомпозиция, исполнять, u...
29 Модели представления данных в СУБД.docx 2.3.1. Исследование моделей информационного пр... 1 [[2.3.1], [исследование, модель, информационны...
3 Некоторые особенности проектирования.docx Некоторые особенности проектирования под конкр... 1 [[особенность, проектирование, конкретный, арх...
31 Непроцедурный доступ к данным.docx 2.3.2.3 Непроцедурный доступ к данным (SQL).\n... 1 [[2.3.2.3, непроцедурный, доступ, данным, sql]...
34 Процедурное расширение языка SQL.docx Процедурное расширение языка SQL - PL/SQL.\nOr... 1 [[процедурный, расширение, язык, sql, pl_sql, ...
12 Системные объекты базы данных.docx Системные объекты базы данных.\nСловарь данных... 1 [[системный, объект, база], [словарь], [первый...
7 Технология создания распр ИС.docx 2. ТЕХНОЛОГИИ СОЗДАНИЯ РАСПРЕДЕЛЕННЫХ ИНФОРМАЦ... 1 [[2], [технологии, создания, распределенных, и...
13 Требования к проекту.docx Требования к проекту\nВведение\nОтносительно с... 1 [[требование, проект, введение, относительно, ...
17 Условия целостности БД.docx 2.1.1.3.1. Ограничительные условия, поддержива... 1 [[2.1.1.3.1], [ограничительный, условие, подде...
6 Характеристики СУБД.docx 2.2.2 Сравнительные характеристики SQL СУБД.\n... 1 [[2.2.2, сравнительные, характеристика, sql, с...
11 Этапы разработки проекта1.docx Этапы разработки проекта: заключительные стади... 1 [[этап, разработка, проект, заключительный, ст...
25 Этапы разработки проекта2.docx Этапы разработки проекта: заключительные стади... 1 [[этап, разработка, проект, заключительный, ст...
21 Этапы разработки проекта3.docx Этапы разработки проекта: определение стратеги... 1 [[этап, разработка, проект, определение, страт...
40 Этапы разработки проекта4.docx Этапы разработки проекта: реализация, тестиров... 1 [[этап_разработка, проект, реализация, тестиро...
30 Этапы разработки проекта5.docx Этапы разработки проекта: стратегия и анализ\n... 1 [[этап, разработка_проект, стратегия, анализ, ...
22 Язык манипуляции данными.docx 2.1.3. Язык манипуляции данными (ЯМД)\nЯзык ма... 1 [[2.1.3], [язык, манипуляция, данными, ямд, яз...
In [5]:
from gensim.models.word2vec import Word2Vec

word2vec = Word2Vec(
    sentences=df["prep_text"].explode().tolist(),
    vector_size=64,
    sg=1,
    window=10,
    epochs=5,
    min_count=10,
    workers=4,
    seed=9,
)
In [6]:
word2vec.wv.key_to_index
Out[6]:
{'система': 0,
 'работа': 1,
 'требование': 2,
 'база': 3,
 'пользователь': 4,
 'разработка': 5,
 'модель': 6,
 'информация': 7,
 'субд': 8,
 'этап': 9,
 'ошибка': 10,
 'функция': 11,
 'являться': 12,
 'таблица': 13,
 'средство': 14,
 'проект': 15,
 'сервер': 16,
 'процесс': 17,
 'документ': 18,
 'программа': 19,
 'использовать': 20,
 'состояние': 21,
 'проектирование': 22,
 'программный': 23,
 'случай': 24,
 'создание': 25,
 'модуль': 26,
 'время': 27,
 'объект': 28,
 'заказчик': 29,
 'приложение': 30,
 'реализация': 31,
 'правило': 32,
 'результат': 33,
 'вид': 34,
 'разработчик': 35,
 'возможность': 36,
 'технический': 37,
 'метод': 38,
 'тестирование': 39,
 'следующий': 40,
 'задача': 41,
 'использование': 42,
 'обработка': 43,
 'часть': 44,
 'позволять': 45,
 'клиент': 46,
 'интерфейс': 47,
 'переход': 48,
 'выполнение': 49,
 'обеспечение': 50,
 'информационный_система': 51,
 'новый': 52,
 'изменение': 53,
 'атрибут': 54,
 'основный': 55,
 'код': 56,
 'решение': 57,
 'запрос': 58,
 'операция': 59,
 'автоматизация': 60,
 'предприятие': 61,
 'доступ': 62,
 'язык': 63,
 'уровень': 64,
 'управление': 65,
 'платформа': 66,
 'информационный': 67,
 'группа': 68,
 'анализ': 69,
 'каждый': 70,
 'компонент': 71,
 'структура': 72,
 'автомат': 73,
 'использоваться': 74,
 'два': 75,
 'продукт': 76,
 'элемент': 77,
 'связь': 78,
 'работать': 79,
 'необходимый': 80,
 'тест': 81,
 'реализовать': 82,
 'отношение': 83,
 'существовать': 84,
 'общий': 85,
 'область': 86,
 'тип': 87,
 'цель': 88,
 'oracle': 89,
 'организация': 90,
 'сущность': 91,
 'форма': 92,
 'описание': 93,
 'действие': 94,
 'содержать': 95,
 'набор': 96,
 'диаграмма': 97,
 'бизнес': 98,
 'значение': 99,
 'срок': 100,
 'состав': 101,
 'операционный': 102,
 'подсистема': 103,
 '1': 104,
 'вопрос': 105,
 'качество': 106,
 'архитектура': 107,
 'системный': 108,
 'обеспечивать': 109,
 'перечень': 110,
 'проектировщик': 111,
 'ввод': 112,
 'условие': 113,
 'сложный': 114,
 'функционирование': 115,
 'выполнять': 116,
 'эксплуатация': 117,
 'иметь': 118,
 'sql': 119,
 'файл': 120,
 'версия': 121,
 'различный': 122,
 'количество': 123,
 'определение': 124,
 'учёт': 125,
 'схема': 126,
 'отдельный': 127,
 'документация': 128,
 'заказ': 129,
 'деятельность': 130,
 'порядок': 131,
 'инструкция': 132,
 'web': 133,
 'windows': 134,
 'получить': 135,
 'отчёт': 136,
 'функциональный': 137,
 'число': 138,
 'характеристика': 139,
 'ограничение': 140,
 'образ': 141,
 'наличие': 142,
 'бд': 143,
 'проблема': 144,
 'основа': 145,
 'администратор': 146,
 'конфигурация': 147,
 'server': 148,
 'индекс': 149,
 'контроль': 150,
 'объём': 151,
 'руководство': 152,
 'преобразование': 153,
 'сеть': 154,
 'хранение': 155,
 'больший': 156,
 'исходный': 157,
 'поиск': 158,
 'пример': 159,
 'представление': 160,
 'задание': 161,
 'представить': 162,
 'реляционный': 163,
 'первый': 164,
 'программирование': 165,
 'рис': 166,
 'транзакция': 167,
 'место': 168,
 'проверка': 169,
 'состоять': 170,
 'счёт': 171,
 'представлять': 172,
 'взаимодействие': 173,
 'простой': 174,
 'спецификация': 175,
 'создать': 176,
 'память': 177,
 'точка': 178,
 'среда': 179,
 'обмен': 180,
 'компьютер': 181,
 'наименование': 182,
 'аис': 183,
 'важный': 184,
 'конечный_автомат': 185,
 'описать': 186,
 'запись': 187,
 'список': 188,
 'программист': 189,
 'технология': 190,
 'выделить': 191,
 'команда': 192,
 '2': 193,
 'связать': 194,
 'создавать': 195,
 'принцип': 196,
 'имя': 197,
 'производительность': 198,
 'хранилище': 199,
 'выбрать': 200,
 'хороший': 201,
 'рабочий': 202,
 'несколько': 203,
 'иметься': 204,
 'режим': 205,
 'поддержка': 206,
 'защита': 207,
 'достаточно': 208,
 'требоваться': 209,
 'определить': 210,
 'полный': 211,
 'разный': 212,
 'данными': 213,
 'java': 214,
 'оперативный': 215,
 'сведение': 216,
 'соответствующий': 217,
 'помощь': 218,
 'относиться': 219,
 'формирование': 220,
 'документооборот': 221,
 'выбор': 222,
 'момент': 223,
 'оператор': 224,
 'выполнить': 225,
 'пакет': 226,
 'вызов': 227,
 'описывать': 228,
 'осуществляться': 229,
 'отказ': 230,
 'конкретный': 231,
 '1с': 232,
 'аналитик': 233,
 'особенность': 234,
 'второй': 235,
 'сторона': 236,
 'поток': 237,
 'привести': 238,
 'разработать': 239,
 'множество': 240,
 'обладать': 241,
 'персонал': 242,
 'большинство': 243,
 'определять': 244,
 'надёжность': 245,
 'соответствовать': 246,
 'зависимость': 247,
 'серверный': 248,
 'способ': 249,
 'товар': 250,
 'построение': 251,
 'входить': 252,
 'подход': 253,
 'создаваться': 254,
 '3': 255,
 'назначение': 256,
 'источник': 257,
 'автоматизировать': 258,
 'механизм': 259,
 'исполнение': 260,
 'возникать': 261,
 'внедрение': 262,
 'процедура': 263,
 'высокий': 264,
 'ключ': 265,
 'клиентский': 266,
 'сотрудник': 267,
 'окончание': 268,
 'раздел': 269,
 'соответствие': 270,
 'отметить': 271,
 'сбой': 272,
 'удобный': 273,
 'большой': 274,
 'целое': 275,
 'оценка': 276,
 '4': 277,
 'рассмотреть': 278,
 'стандарт': 279,
 'интернет': 280,
 'узел': 281,
 'методология': 282,
 'процессор': 283,
 'основной': 284,
 'класс': 285,
 'определённый': 286,
 'мбайт': 287,
 'включать': 288,
 'загрузка': 289,
 'ситуация': 290,
 'параметр': 291,
 'стратегия': 292,
 '8.1': 293,
 'xp': 294,
 'реальный': 295,
 'т.п.': 296,
 'сделать': 297,
 'ресурс': 298,
 'известный': 299,
 'обрабатывать': 300,
 'три': 301,
 'определяться': 302,
 'настройка': 303,
 'проводиться': 304,
 'содержание': 305,
 'аппаратный': 306,
 'ms': 307,
 'физический': 308,
 'выполняться': 309,
 'внутренний': 310,
 'данным': 311,
 'внешний': 312,
 'формат': 313,
 'оформление': 314,
 'рамка': 315,
 'материал': 316,
 'фирма': 317,
 'стадия': 318,
 'человек': 319,
 'делать': 320,
 'обслуживание': 321,
 'год': 322,
 'компания': 323,
 'uml': 324,
 'intel': 325,
 'pentium': 326,
 'хранить': 327,
 'привилегия': 328,
 'храниться': 329,
 'требовать': 330,
 'ос': 331,
 'входной': 332,
 'применение': 333,
 'предоставлять': 334,
 'расчёт': 335,
 'jdbc': 336,
 'microsoft': 337,
 'внимание': 338,
 'дата': 339,
 'a': 340,
 'дело': 341,
 'степень': 342,
 'основание': 343,
 'возможный': 344,
 'безопасность': 345,
 'договор': 346,
 'поддерживать': 347,
 'зависеть': 348,
 'развитие': 349,
 'принять': 350,
 'сложность': 351,
 'программный_обеспечение': 352,
 'происходить': 353,
 'вывод': 354,
 'становиться': 355,
 'исполнитель': 356,
 'текст': 357,
 'указать': 358,
 'предполагать': 359,
 'linux': 360,
 'дипломный': 361,
 'эффективный': 362,
 'получение': 363,
 'мгц': 364,
 'информационный_модель': 365,
 'период': 366,
 'главный': 367,
 'машина': 368,
 'последовательность': 369,
 'какой': 370,
 'соединение': 371,
 'собственный': 372,
 'оказаться': 373,
 'строка': 374,
 'предусмотреть': 375,
 'предназначить': 376,
 'проведение': 377,
 'словарь': 378,
 'ооо': 379,
 'услуга': 380,
 'пространство': 381,
 'b': 382,
 'ответ': 383,
 'диск': 384,
 'триггер': 385,
 'разрабатывать': 386,
 'конечный': 387,
 'размер': 388,
 'находиться': 389,
 'обеспечить': 390,
 'подготовка': 391,
 'отсутствие': 392,
 'затрата': 393,
 'функционал': 394,
 'отражать': 395,
 'вариант': 396,
 'сообщение': 397,
 'жёсткий': 398,
 'специальный': 399,
 'современный': 400,
 'целостность': 401,
 'производиться': 402,
 'символ': 403,
 'сетевой': 404,
 'говорить': 405,
 'этап_анализ': 406,
 'трансформация': 407,
 'отдел': 408,
 'лицо': 409,
 '=': 410,
 'завершение': 411,
 'дополнительный': 412,
 'временной': 413,
 'справочник': 414,
 'особый': 415,
 'зрение': 416,
 'удовлетворять': 417,
 'кластер': 418,
 'хранить_процедура': 419,
 'показать': 420,
 'автоматический': 421,
 'передача': 422,
 'установка': 423,
 'практика': 424,
 'свойство': 425,
 'течение': 426,
 'пользовательский': 427,
 'автоматически': 428,
 'ряд': 429,
 'получать': 430,
 'cgi': 431,
 'причина': 432,
 'скорость': 433,
 'день': 434,
 'сумма': 435,
 'прийтись': 436,
 'автоматизированный': 437,
 'некоторый': 438,
 'руководитель': 439,
 'передать': 440,
 'позволить': 441,
 'технологический': 442,
 'управлять': 443,
 'иерархический': 444,
 'резервный': 445,
 'предыдущий': 446,
 'существенно': 447,
 'исправление': 448,
 'страница': 449,
 'высоко': 450,
 'распределить': 451,
 'поле': 452,
 'банк': 453,
 'экранный': 454,
 '2010': 455,
 'плановый': 456,
 'ориентировать': 457,
 'быстрый': 458,
 'сайт': 459,
 'задать': 460,
 'create': 461,
 'скрипт': 462,
 'финансовый': 463,
 'план': 464,
 'одновременно': 465,
 'дальнейший': 466,
 'допустимый': 467,
 'мощность': 468,
 'готовый': 469,
 'означать': 470,
 'нагрузка': 471,
 'раз': 472,
 'знание': 473,
 'удаление': 474,
 'осуществлять': 475,
 'улгту': 476,
 'программный_продукт': 477,
 'событие': 478,
 'преимущество': 479,
 'роль': 480,
 'правильный': 481,
 'оборудование': 482,
 'бухгалтерский': 483,
 'шифр': 484,
 'третий': 485,
 'серьёзный': 486,
 'начальный': 487,
 'составной_состояние': 488,
 'невозможный': 489,
 'номер': 490,
 'непосредственно': 491,
 'единый': 492,
 'актуальный': 493,
 'последний': 494,
 'недостаток': 495,
 'редактирование': 496,
 'эффективность': 497,
 'цена': 498,
 'предполагаться': 499,
 'найти': 500,
 'инструмент': 501,
 'слово': 502,
 'обновление': 503,
 'логика': 504,
 'обязательный': 505,
 'небольшой': 506,
 '5': 507,
 'электронный': 508,
 'патентный': 509,
 '7': 510,
 'график': 511,
 'моделирование': 512,
 'весьма': 513,
 'давать': 514,
 'комментарий': 515,
 'применяться': 516,
 'on': 517,
 'ось': 518,
 'повышение': 519,
 'каскадный': 520,
 'гост': 521,
 'чтение': 522,
 '2003': 523,
 'провести': 524,
 'специалист': 525,
 'многим': 526,
 'критерий': 527,
 'iii': 528,
 'прикладной': 529,
 'odbc': 530,
 'db2': 531,
 'полностью': 532,
 'построить': 533,
 'право': 534,
 'рекомендоваться': 535,
 'стандартный': 536,
 'практически': 537,
 'комплекс': 538,
 'модификация': 539,
 'абс': 540,
 'достаточный': 541,
 'восстановление': 542,
 'классификация': 543,
 'факт': 544,
 'показатель': 545,
 'копия': 546,
 'распределение': 547,
 'разрабатываться': 548,
 'достигнуть': 549,
 'графический': 550,
 'фактор': 551,
 'станция': 552,
 'подлежать': 553,
 'жизненный_цикл': 554,
 'исследование': 555,
 'обнаружить': 556,
 'учитывать': 557,
 'понятный': 558,
 'изменяться': 559,
 'отсутствовать': 560,
 'называть': 561,
 'т.д.': 562,
 'ориентированный': 563,
 'содержаться': 564,
 'выходной': 565,
 'приводить': 566,
 '256': 567,
 'драйвер': 568,
 'объектный': 569,
 'ключевой': 570,
 'конец': 571,
 'приёмка': 572,
 'заключаться': 573,
 'первичный': 574,
 'регистрация': 575,
 'ни': 576,
 'полнота': 577,
 'столбец': 578,
 'c': 579,
 'единственный': 580,
 'носитель': 581,
 'способность': 582,
 'отображение': 583,
 'единица': 584,
 'предметный': 585,
 'проектный': 586,
 'прототип': 587,
 'текстовый': 588,
 'ведение': 589,
 '2000': 590,
 'реакция': 591,
 '2.2': 592,
 'изменить': 593,
 'принятие': 594,
 'касаться': 595,
 'испытание': 596,
 'постоянный': 597,
 'мощный': 598,
 'понимание': 599,
 'очередь': 600,
 'формализация': 601,
 'psm': 602,
 'производитель': 603,
 'частность': 604,
 'необходимость': 605,
 'мера': 606,
 'блок': 607,
 'работник': 608,
 'типовой': 609,
 'сегодня': 610,
 'решать': 611,
 'отвечать': 612,
 'идти': 613,
 'ядро': 614,
 'выделениеетод': 615,
 'оценить': 616,
 'расширение': 617,
 'логический': 618,
 'предъявлять': 619,
 'инициировать': 620,
 'любой': 621,
 'работоспособность': 622,
 'промышленный': 623,
 'часть_конечный': 624,
 'администрирование': 625,
 'локальный': 626,
 'принимать': 627,
 '+': 628,
 'поставщик': 629,
 'solaris': 630,
 'крупный': 631,
 'последующий': 632,
 'иерархия': 633,
 'обязательно': 634,
 'понятие': 635,
 'служить': 636,
 'навык': 637,
 'процессов': 638,
 'pim': 639,
 'иных': 640,
 'присутствовать': 641,
 'меню': 642,
 'вероятность': 643,
 'сравнение': 644,
 '6': 645,
 'четко': 646,
 'регламент': 647,
 'apache': 648,
 'доступный': 649,
 'php': 650,
 'категория': 651,
 'г.': 652,
 'ис': 653,
 'перечислить': 654,
 '1с_предприятие': 655,
 'обучение': 656,
 'добавление': 657,
 'запуск': 658,
 'предлагать': 659,
 'возникновение': 660,
 'начинать': 661,
 'планирование': 662,
 'дублирование': 663,
 'относительно': 664,
 'внешний_ключ': 665,
 'передавать': 666,
 'потребность': 667,
 'этап_проектирование': 668,
 'rdbms': 669,
 'тема': 670,
 'документирование': 671,
 'параллельный': 672,
 'деталь': 673,
 'старый': 674,
 'корпоративный': 675,
 'обратный': 676,
 'вести': 677,
 'аналитический': 678,
 'отчётность': 679,
 'предоставление': 680,
 'подробный': 681,
 'т.е.': 682,
 'магазин': 683,
 'независимость': 684,
 'функциональность': 685,
 'критический': 686,
 'появление': 687,
 'организационный': 688,
 'методический': 689,
 'математический': 690,
 'редко': 691,
 'встречаться': 692,
 'виток_спираль': 693,
 'внутри': 694,
 'предъявление': 695,
 'легко': 696,
 'финансирование': 697,
 'независимый': 698,
 'распределить_база': 699,
 'mysql': 700,
 'отношение_многим': 701,
 'id': 702,
 'нарушение': 703,
 'язык_java': 704,
 '2.2.1': 705,
 'размещение': 706,
 'оплата': 707,
 'потеря': 708,
 'накопление': 709,
 'некорректный': 710,
 'табличный': 711,
 'выгрузка': 712,
 'конфликт': 713,
 'приём': 714,
 'расход': 715,
 'приходиться': 716,
 'банковский': 717,
 'установить': 718,
 'вестись': 719,
 'увеличение': 720,
 'ограничить': 721,
 'производственный': 722,
 'интеграция': 723,
 'написание': 724,
 'заполнение': 725,
 'сервис': 726,
 'лингвистический': 727,
 'iv': 728,
 'путем': 729,
 'обозначение': 730,
 '866': 731,
 'предъявляться': 732,
 'текущий': 733,
 'изменять': 734,
 'базовый': 735,
 'объектный_множество': 736,
 'максимальный': 737,
 'гибкий': 738,
 'надёжный': 739,
 'сторонний': 740,
 'менеджер': 741,
 'протокол': 742,
 'перенести': 743,
 'отчётный': 744,
 'вызывать': 745,
 'совокупность': 746,
 'фактически': 747,
 'сдача': 748,
 'смысл': 749,
 'статья': 750,
 'ранний': 751,
 'написать': 752,
 'составлять': 753,
 'конструкция': 754,
 'er': 755,
 '10': 756,
 'стоить': 757,
 'идея': 758,
 'целый': 759,
 'решить': 760,
 'генерация': 761,
 'понимать': 762,
 'корпорация': 763,
 'нормальный_форма': 764,
 'проверить': 765,
 '2.2.2': 766,
 'экономический': 767,
 'выступать': 768,
 'май': 769,
 'нормативный': 770,
 'компьютерный': 771,
 'влиять': 772,
 'устройство': 773,
 'считать': 774,
 'месяц': 775,
 'уникальный': 776,
 'тестер': 777,
 'применить': 778,
 'начало': 779,
 'корректность': 780,
 '2.2.4': 781,
 'значительно': 782,
 'выборка': 783,
 'функционировать': 784,
 'int': 785,
 'введение': 786,
 'знать': 787,
 'корректный': 788,
 'правильно': 789,
 'поставить': 790,
 'термин': 791,
 'цикл': 792,
 'последовательный': 793,
 'отличаться': 794,
 'проходить': 795,
 'doctors': 796,
 'приоритет': 797,
 'поведение': 798,
 'предел': 799,
 'предложение': 800,
 'схема_база': 801,
 'многих': 802,
 'неверный': 803,
 'проводить': 804,
 'простота': 805,
 'возвратный': 806,
 'учётный': 807,
 'informix': 808,
 'зачастую': 809,
 'сценарий': 810,
 'рекурсивный': 811,
 'пояснительный': 812,
 'направление': 813,
 'бухгалтерия': 814,
 'дать': 815,
 '8': 816,
 'рост': 817,
 'избежать': 818,
 'точность': 819,
 'обращаться': 820,
 'коммерческий': 821,
 'ссылочный_целостность': 822,
 'данную': 823,
 'консультант': 824,
 'записка': 825,
 'пользоваться': 826,
 'разрешение': 827,
 'mda': 828,
 '2.2.3': 829,
 'эвм': 830,
 'показывать': 831,
 'лёгкий': 832,
 'апрель': 833,
 'сопровождение': 834,
 'широкий': 835,
 '15': 836,
 'стоимость': 837,
 'переменный': 838,
 'сегмент': 839,
 'постоянно': 840,
 'сокращение': 841,
 'смена': 842,
 'малый': 843,
 'название': 844,
 'разработанная': 845,
 'экземпляр': 846,
 'рисунок': 847,
 'составить': 848,
 'появляться': 849,
 'одинаковый': 850,
 'подходить': 851,
 'null': 852,
 'слой': 853,
 'обслуживать': 854,
 'вызвать': 855,
 'фаза': 856,
 'друг': 857,
 'исходный_код': 858,
 'характер': 859,
 'дистрибутив': 860,
 'занимать': 861,
 '2.2.5': 862,
 'возврат': 863,
 'попытка': 864,
 'измерение': 865,
 'движение': 866,
 'пациент': 867,
 '2.2.6': 868,
 'n': 869,
 '>': 870,
 'контекст': 871,
 'windows_nt': 872,
 'каталог': 873,
 'видеть': 874,
 'эквивалентный': 875,
 'поддерживаться': 876,
 'unix': 877,
 'рекомендовать': 878,
 'кэш': 879,
 'полноценный': 880,
 'и др.': 881,
 'склад': 882,
 'традиционный': 883,
 'меняться': 884,
 'водопад': 885,
 '512': 886,
 'интерактивный': 887,
 'ibm': 888,
 'условный': 889,
 'опытный': 890,
 'выявить': 891,
 'монитор': 892,
 'журнал': 893,
 'следствие': 894,
 'потенциальный': 895,
 'пройти': 896,
 'промежуточный': 897,
 'тестовый': 898,
 'реквизит': 899,
 'пользовательский_процесс': 900,
 'пара': 901,
 'фоновый': 902,
 'броузер': 903,
 'идентификатор': 904,
 'профессиональный_субд': 905,
 'специально': 906,
 'case': 907,
 'sun': 908,
 'иной': 909,
 'неделя': 910,
 'равный': 911,
 'привлекаться': 912,
 'шаг': 913,
 'риск': 914,
 'итог': 915,
 'трансформация_выделение': 916,
 'обойтись': 917,
 'участок': 918,
 'строго': 919,
 'алгоритм': 920,
 'схема_преобразование': 921,
 'предоставить': 922,
 'другому': 923,
 'моделировать': 924,
 'вычислительный': 925,
 'техника': 926,
 'существенный': 927,
 'положение': 928,
 'кнопка': 929,
 'называться': 930,
 'ввести': 931,
 'печать': 932,
 'применять': 933,
 'nt': 934,
 'внести': 935,
 'производство': 936,
 'очевидный': 937,
 'internet': 938,
 'формировать': 939,
 'недопустимый': 940,
 'обработать': 941,
 'кафедра': 942,
 'отслеживать': 943,
 'аутентификация': 944,
 'подразделение': 945,
 'производить': 946,
 '2.2.7': 947,
 'упростить': 948,
 'популярный': 949,
 'структурный': 950,
 'удалённый': 951,
 '2000/': 952,
 '2.1': 953,
 'покупатель': 954,
 'успешный': 955,
 'намного': 956,
 'восприятие': 957,
 'stronghold': 958,
 'писать': 959,
 'составной': 960,
 'преобразовать': 961,
 'никакой': 962,
 'cim': 963,
 'добавляться': 964,
 'другом': 965,
 'мониторинг': 966,
 'логики': 967,
 'выход': 968,
 'предусматривать': 969,
 'реализоваться': 970,
 'начинаться': 971,
 'длина': 972,
 'возвращать': 973,
 'т.к.': 974,
 'зависимый': 975,
 'триггеры': 976,
 'обозначать': 977,
 'удалить': 978,
 'окружение': 979,
 'sdl': 980,
 'согласно': 981,
 'celeron': 982,
 'data': 983,
 'следовательно': 984,
 'предъявить': 985,
 'подтип': 986,
 'описываться': 987,
 'операционный_система': 988,
 'разделение': 989,
 'обмен_данными': 990,
 'насколько': 991,
 'подобный': 992,
 'сбор': 993,
 'низкий': 994,
 'правило_процесс': 995,
 'четвёртый': 996,
 'текущий_счёт': 997,
 'включить': 998,
 '<': 999,
 ...}
In [7]:
word2vec.wv.most_similar("1с", topn=3)
Out[7]:
[('8.1', 0.9879903197288513),
 ('бухгалтерия', 0.980316698551178),
 ('навык', 0.9310787320137024)]
In [8]:
word2vec.wv["1с"]
Out[8]:
array([-5.72758615e-01, -4.64142323e-01, -1.41238064e-01, -6.03196502e-01,
       -3.06068182e-01,  1.47344675e-02, -8.86413306e-02,  6.53996249e-05,
        2.22017527e-01, -1.03922300e-01,  4.06073749e-01, -5.07203415e-02,
        1.23037435e-01, -1.68328971e-01, -8.36593136e-02,  2.31885687e-01,
       -1.16688296e-01,  1.43522806e-02, -5.78690231e-01,  3.08529168e-01,
        3.75707522e-02,  1.13559164e-01,  3.83746147e-01,  2.44788274e-01,
       -5.16302809e-02, -8.68294463e-02,  7.44756520e-01,  2.69289196e-01,
       -1.38882861e-01,  3.19430903e-02,  2.82276541e-01, -1.97692990e-01,
       -1.43509433e-01, -1.92271873e-01, -1.49369061e-01,  6.34338081e-01,
        1.60252139e-01,  6.62923336e-01,  9.45296362e-02, -1.62105456e-01,
       -2.70663768e-01,  2.80816615e-01,  4.22135949e-01, -1.53156146e-01,
        1.51129171e-01,  3.92942369e-01, -5.38962841e-01, -1.52189329e-01,
       -7.02899694e-01, -4.62726772e-01, -8.09689939e-01,  2.60302156e-01,
        2.99924672e-01,  2.37710088e-01,  2.08470032e-01,  6.07197583e-01,
        1.30898044e-01,  9.39554572e-01,  4.40701753e-01, -4.94057983e-01,
        3.68286878e-01, -1.29404917e-01,  6.02491438e-01, -3.94566447e-01],
      dtype=float32)
In [9]:
word2vec.wv.doesnt_match("java php 1с oracle заказчик".split())
Out[9]:
'заказчик'
In [10]:
word2vec.wv.similarity("java", "javascript")
Out[10]:
0.83737653
In [11]:
word2vec.wv.similarity("java", "1с")
Out[11]:
0.7350806
In [12]:
word2vec.wv.most_similar(positive=["1с", "машина"], negative=["бухгалтерия"])
Out[12]:
[('лингвистический', 0.9782435297966003),
 ('php', 0.9754980802536011),
 ('mysql', 0.9643309712409973),
 ('java', 0.963462769985199),
 ('знание', 0.950555682182312),
 ('apache', 0.9452742338180542),
 ('1с_предприятие', 0.943841278553009),
 ('windows_nt', 0.9398906826972961),
 ('работать', 0.9393702745437622),
 ('базовый', 0.9373704791069031)]
In [13]:
word2vec.wv.most_similar(positive=["субд", "язык"], negative=["база"])
Out[13]:
[('программирование', 0.8422903418540955),
 ('java', 0.7840348482131958),
 ('использовать', 0.7770466804504395),
 ('php', 0.7726089954376221),
 ('sql', 0.7726024389266968),
 ('лингвистический', 0.7516488432884216),
 ('производитель', 0.7262539267539978),
 ('написание', 0.7253801226615906),
 ('использование', 0.7136848568916321),
 ('мощный', 0.7123106718063354)]
In [14]:
word2vec.wv.most_similar(positive=["java", "бухгалтерия"], negative=["машина"])
Out[14]:
[('1с', 0.9639856815338135),
 ('среда', 0.942729651927948),
 ('8.1', 0.9425337910652161),
 ('ориентировать', 0.9270872473716736),
 ('web', 0.915542483329773),
 ('платформа', 0.9038816094398499),
 ('навык', 0.8979926705360413),
 ('программный', 0.8968376517295837),
 ('компания', 0.8852423429489136),
 ('лингвистический', 0.8833838105201721)]
In [15]:
word2vec.wv.most_similar(positive=["866", "мбайт"], negative=["мгц"])
Out[15]:
[('256', 0.9967159628868103),
 ('512', 0.9953411221504211),
 ('pentium', 0.9951350688934326),
 ('iii', 0.9946882724761963),
 ('celeron', 0.9945207834243774),
 ('iv', 0.9916473031044006),
 ('intel', 0.9878745079040527),
 ('2003', 0.9863777756690979),
 ('процессор', 0.9855839610099792),
 ('c', 0.9850897192955017)]
In [18]:
word2vec.wv.most_similar(positive=["866", "память"], negative=["процессор"])
Out[18]:
[('256', 0.9890534281730652),
 ('мбайт', 0.9886034727096558),
 ('мгц', 0.9871484637260437),
 ('pentium', 0.9858012199401855),
 ('celeron', 0.9855312705039978),
 ('c', 0.9849308133125305),
 ('512', 0.9843060970306396),
 ('iii', 0.9841062426567078),
 ('iv', 0.9838903546333313),
 ('высоко', 0.9828835129737854)]
In [19]:
from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, max_iter=1000, random_state=9)
coords_df = pd.DataFrame(
    tsne.fit_transform(word2vec.wv[word2vec.wv.key_to_index]), columns=["x", "y"]
)
coords_df["token"] = word2vec.wv.key_to_index.keys()
coords_df
Out[19]:
x y token
0 -24.734394 -7.651334 система
1 -30.030426 -18.815897 работа
2 -26.821131 2.513596 требование
3 -8.133460 24.581547 база
4 -20.158037 3.450009 пользователь
... ... ... ...
1038 6.665592 -2.917084 некий
1039 18.308809 9.314460 самым
1040 12.663247 -1.679625 похожий
1041 7.762640 1.464980 целесообразный
1042 -0.540131 -15.037376 обследование

1043 rows × 3 columns

In [20]:
from bokeh.io import output_notebook
from bokeh.plotting import show, figure

output_notebook()
p = figure(width=800, height=800)
p.text(x=coords_df.x, y=coords_df.y, text=coords_df.token) # type: ignore
show(p)
Loading BokehJS ...