Разработка системы классификации тендеров с использованием искусственной нейронной сети

Анализ предметной области. Технологии классификации текстовых данных. Диаграмма прецедентов системы определения категорий тендеров. Проектирование архитектуры системы определения категорий тендеров. Формирование обучающих выборок для нейронной сети.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 28.11.2019
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Токенизация - разбиение текста на более мелкие части - слова, знаки пунктуации.

Мешок слов - модель текстов, в виде массива или матрицы, где каждое место соответствует определенному слову.

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

ОКПД 2 -- Общероссийский классификатор продукции по видам экономической деятельности.

Парсер - инструмент (программа), для извлечения открытой информации с веб-сайтов.

Парсинг - процесс сбора информации с веб-сайтов.

Библиографический список

1. Ясницкий Л.Н. Интеллектуальные системы. - М.: Лаборатория знаний, 2016. - 221 с.

2. Ясницкий Л.Н. Введение в искусственный интеллект. М.: Издательский центр «Академия», 2005. - 176с.

3. Шитиков В. К., Мастицкий С. Э. Классификация, регрессия, алгоритмы Data Mining с использованием R. - Электронная книга, 2017

Приложение

Листинг программы

Загрузка и подготовка текста

import json

import pymorphy2

from src.tender import Tender

import nltk

from nltk.corpus import stopwords

from keras.preprocessing.text import text_to_word_sequence, Tokenizer

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.feature_extraction.text import CountVectorizer

from sklearn.feature_extraction.text import HashingVectorizer

from sklearn.linear_model import LogisticRegression

from sklearn.tree import DecisionTreeClassifier

from sklearn.neighbors import KNeighborsClassifier

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

nltk.download('stopwords')

stop_words = stopwords.words('russian')

stop_words.extend(['что', 'это', 'так', 'вот', 'быть', 'как', 'в', '--', '-', 'к', 'на', '...', ':', ')', '(',

'тендер', 'закупка', 'извещение', 'адрес', 'цена', 'аукцион', 'конкурс', 'открытый', 'закрытый'])

def category_load(file):

print('load subcategory')

file_data = []

with open(file, "r", encoding='utf-8') as read_file:

data = json.load(read_file)

for item in data:

file_data.append(item['id'])

return file_data

# slow

def normalize_text(text):

print("normalize_text run")

result = []

morph = pymorphy2.MorphAnalyzer()

for sen in text:

new_sen = ' '

word_tokens = sen.split()

word_tokens = [w for w in word_tokens if w not in stop_words]

new_sen = new_sen.join([morph.parse(word)[0].normal_form for word in word_tokens])

result.append(new_sen)

return result

# fast

def make_all_text(data: list) -> list:

print("make_all_text run")

result = []

for item in data:

result.append(item.name)

# result.append(item.subject)

return result

def fit_text(vectorezer, text):

vectorezer.fit(text)

return vectorezer

def bow_tfidf(text):

vectorizer = TfidfVectorizer()

return fit_text(vectorizer, text)

def bow_counter(text):

vectorizer = CountVectorizer()

return fit_text(vectorizer, text)

def bow_hashing(text):

vectorizer = HashingVectorizer(n_features=20)

return fit_text(vectorizer, text)

def load_data(file):

print("load_data run " + file)

file_data = []

with open(file, "r", encoding='utf-8') as read_file:

data = json.load(read_file)

for item in data:

tender = Tender(item)

file_data.append(tender)

return file_data

def nn_logic_regression(X_train, y_train, X_test, y_test):

logreg = LogisticRegression()

logreg.fit(X_train, y_train)

print('Accuracy of Logistic regression classifier on training set: {:.2f}'

.format(logreg.score(X_train, y_train)))

print('Accuracy of Logistic regression classifier on test set: {:.2f}'

.format(logreg.score(X_test, y_test)))

def nn_decision_tree_classifier(X_train, y_train, X_test, y_test):

clf = DecisionTreeClassifier().fit(X_train, y_train)

print('Accuracy of Decision Tree classifier on training set: {:.2f}'

.format(clf.score(X_train, y_train)))

print('Accuracy of Decision Tree classifier on test set: {:.2f}'

.format(clf.score(X_test, y_test)))

def nn_k_neighbors_classifier(X_train, y_train, X_test, y_test):

knn = KNeighborsClassifier()

knn.fit(X_train, y_train)

print('Accuracy of K-NN classifier on training set: {:.2f}'

.format(knn.score(X_train, y_train)))

print('Accuracy of K-NN classifier on test set: {:.2f}'

.format(knn.score(X_test, y_test)))

def nn_d_linear_discriminant_analysis(X_train, y_train, X_test, y_test):

lda = LinearDiscriminantAnalysis()

lda.fit(X_train, y_train)

print('Accuracy of LDA classifier on training set: {:.2f}'

.format(lda.score(X_train, y_train)))

print('Accuracy of LDA classifier on test set: {:.2f}'

.format(lda.score(X_test, y_test)))

Точка входа

from src.my_functions import *

import numpy

file_name = '../data.json'

file_test_name = '../data_test.json'

sub_cats_file = '../sub_cats.json'

test_file = '../data_2.json'

test_file_3 = '../data_3.json'

train_data = load_data(test_file)

test_data = load_data(test_file_3)

subcats = category_load(sub_cats_file)

text = make_all_text(train_data)

text = normalize_text(text)

tokenizer = bow_tfidf(text)

subcats_tokinizer = bow_counter(subcats)

train_x = []

train_y = []

for item in train_data:

_x = tokenizer.transform(normalize_text([item.name])).toarray()

new_array = []

for input_x in _x:

new_array.append(input_x)

new_array.append(item.price)

new_array.append(item.publication_month)

new_array.append(item.duration)

# new_array = numpy.append(_x, [item.price, item.publication_month, item.duration])

train_x.append(new_array)

_y = [[1] if x == item.category else [0] for x in subcats]

train_y = _y

test_x = []

test_y = []

for item in test_data:

_x = tokenizer.transform(normalize_text([item.name])).toarray()

new_array = numpy.append(_x, [item.price, item.publication_month, item.duration])

test_x.append(new_array)

_y = [[1] if x == item.category else [0] for x in subcats]

test_y = _y

a = nn_logic_regression(train_x, train_y, test_x, test_y)

# print(tokenizer.vocabulary_)

# print(tokenizer.idf_)

# tokenizerHash = bow_hashing(text)

# tokenizerCounter = bow_counter(text)

import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(input_shape=(10724, 1)),

tf.keras.layers.Dense(2438, activation=tf.nn.relu),

tf.keras.layers.Dropout(0.2),

tf.keras.layers.Dense(303, activation=tf.nn.softmax)

])

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test, y_test)

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.