Вход

Разработка и программная реализация анализа подобия текстов

Рекомендуемая категория для самостоятельной подготовки:
Дипломная работа*
Код 272184
Дата создания 20 марта 2015
Страниц 84
Мы сможем обработать ваш заказ (!) 25 апреля в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
4 860руб.
КУПИТЬ

Описание

В данной дипломной работе рассмотрено создание программы для анализа схожести текстов, сделан подробный обзор методов и средств решения задачи анализа подобия. Описан процесс создания программы. В Приложении А представлен исходный код программы на С# (рабочий).
Защищался в 2013 г в Волгодонском институте сервиса, специалист, оценка -отлично.
...

Содержание

Введение 5
1 Цели, задачи и алгоритмы сравнения текстов 7
1.1 Цели, задачи и методы сравнения текстов 7
1.2 Обзор и анализ алгоритмов сравнения текстов 12
2 Обзор программных средств 27
2.1 Среда разработки и язык программирования 27
2.3 Классы 33
2.4 Пространство имен System.IO 38
3 Программная реализация анализа подобия текстов 44
3.1 Постановка задачи на дипломное проектирование 44
3.2 Обобщенный алгоритм программы 44
3.3 Векторы сравниваемых текстов 45
3.4 Пользовательские классы и массивы 48
3.5 Выбор текстов, подсчет частот и TF-мер 49
3.6 Создание единого массива терминов, частот и мер двух текстов 51
3.7 Вычисление меры сходства текстов 52
3.8 Тестирование и отладка программы 55
4 Информационная безопасность 59


4.1 Законодательство в сфере информационной безопасности 59
4.2 Оценка рисков информационной системы предприятия 64
4.3 Анализ рисков и уязвомостей системы 66
4.4 Разработка мер безопасности и оценка рисков после их внедрения 69
5 Экономическая часть 72
5.1 Расход трудоемкости разработки программного продукта 72
5.2 Расход на оплату труда разработчика программы 74
5.3 Общие затраты на создание программного продукта 75
5.4 Целесообразность создания продукта 75
Выводы и рекомендации 77
Библиографический список 78
Приложение А. 81

Введение

Задача определения тематической схожести также актуальна, существует и постоянно увеличивается, в связи с актуальностью задачи, количество и качество сервисов, реализующих сравнение текстов по различным крите-риям.
Сервис сравнения схожести текстов – необходимый и полезный инст-румент для определения идентичности или похожести текстов. Например, рерайтер или его заказчик хочет убедиться, что его ресурс не будет наказан поисковыми машинами за копирование текста понижением в выдаче, сравнив оригинальный и переписанный текст.
Не менее актуальна задача и для поисковых машин, которые не любят одинаковые или похожие страницы – тем не менее, несмотря на постоянную борьбу с ними, приходится признать, что судя по результатам работы даже лучших поисковиков, проблема эта далеко не решена.

Фрагмент работы для ознакомления

class Termin : IComparable { //Члены и поля класса}А теперь можно добавить несколько полей в определение класса.class Termin : IComparable { public string slovo; public int chastota; public double TF1; public double TF2; // Функции сравнения пользовательских классов. }Существуют следующие виды классов:Private – «объекты только этого класса могут обращаться к данному полю».Public – «объекты любого класса могут обращаться к этому полю».Protected – «только объекты классов-наследников могут обращаться к полю». Если построен класс Animal, то другой класс, например, класс Mammal (Млекопитающее), может объявить себя наследником класса Animal.Поскольку при программной реализации анализа сходства текстов использовались отдельно поля классов, то доступ к ним установлен открытым (Public). Как видно из приведенного фрагмента, созданный класс Termin поддерживает интерфейс IComparable, отвечающий за сравнения объектов. Этот интерфейс, а также способ сравнения объектов по полю в следующем разделе рассматривается более подробно.2.3.1 Интерфейсы IComparable и IComparer На способах сравнения нужно остановиться более подробно, так как они используются для сравнения терминов по одному полю.Интерфейсы IComparable и IComparer являются стандартным способом для сравнения объектов в .NET Framework . Разница между ними описана ниже [20]. Интерфейс IComparable реализуется в классе подлежащего сравнению объекта и потому позволяет выполнять сравнения только между этим и еще каким-то объектом. Интерфейс IComparer реализуется в отдельном классе и потому позволяет выполнять сравнения между любыми двумя объектами. Обычно код сравнения, который должен использоваться в классе по умолчанию, предоставляется с помощью интерфейса IComparable, а код сравнения, который не должен использоваться по умолчанию – с помощью других классов. Интерфейс IComparable поддерживает один единственный метод Compare To( ), который принимает объект. Его можно, например, реализовать таким образом, чтобы он позволял передавать ему объект Person и определять, является ли данный человек старше или младше текущего. На самом деле, этот метод возвращает значение int [17].Интерфейс IComparer тоже предоставляет единственный метод Compare( ), который принимает два объекта и возвращает целочисленный результат, точно так же, как метод CompareTo( ). В обоих случаях параметры, предоставляемые методам, относятся к типу System.Object. Это означает, что сравниваться могут объекты любого типа, а это обычно требует выполнения перед возвратом результата какой-то операции по сравнению типов и, возможно даже, выдачи исключений в случае обнаружения того, что используемые типы являются неправильными. В состав .NET Framework входит используемая по умолчанию реализация интерфейса ICompare r, предназначенная для класса по имени Comparer, который находится в пространстве имен System.Collections. Этот класс способен выполнять специфические для каждой культуры операции сравнения между простыми типами, а также любым типом, который поддерживает интерфейс IComparable.Ниже перечислены моменты, касающиеся поведения этого класса, на которые стоит обратить внимание [20]. Объекты, передаваемые Comparer.Compare () проверяются на предмет того, не поддерживают ли они интерфейс IComparable. Если поддерживают, тогда используется та реализация. Нулевые значения являются допустимыми и считаются "меньшими" любого другого объекта. Строки обрабатываются в соответствии с текущей культурой. При желании, чтобы строки обрабатывались в соответствии с какой-то другой культурой (или языком), экземпляр класса Comparer нужно создавать с помощью его собственного конструктора, который позволяет передавать объект System.Globalization.Culturelnfо, указывающий на применяемую культуру. Строки обрабатываются с учетом регистра. При желании, чтобы они обрабатывались без учета регистра, нужно использовать класс CaselnsensitiveComparer, который во всем остальном работает совершенно таким же образом. Сортировка коллекций с использованием интерфейсов IComparable и IComparer. Многие классы коллекций допускают возможность выполнения сортировки, либо с использованием стандартных операций сравнения между объектами, либо посредством специальных методов. Одним из примеров является класс коллекции ArrayList. Он содержит метод Sort (), который может применяться как без параметров, в случае чего используются стандартные операции сравнения, так и принимать в качестве параметра интерфейс IComparer, который он должен использовать для сравнения пар объектов. В случае класса коллекции ArrayList, заполняемого простыми типами вроде целых чисел или строк, стандартный метод сравнения вполне подходит. В случае же своих собственных классов нужно обязательно либо реализовать в определении класса интерфейс IComparable, либо создавать отдельный класс, поддерживающий интерфейс IComparer, и применять его для выполнения сравнений.2.4 Пространство имен System.IOВ С# определены как байтовые, так и символьные классы потоков. Однако символьные классы потоков в действительности представляют собой оболочки, которые преобразуют базовый байтовый поток в символьный, причем любое преобразование выполняется автоматически. Таким образом, символьные потоки построены на основе байтовых, несмотря на то, что они логически отделены друг от друга.Сопрограммы выполняют операции ввода-вывода посредством потоков. Поток (stream) – это абстракция, которая либо синтезирует информацию, либо потребляет ее. Поток связывается с физическим устройством с помощью С#-системы ввода-вывода. Характер поведения всех потоков одинаков, несмотря на различные физические устройства, с которыми они связываются. Следовательно, классы и методы ввода-вывода можно применить ко многим типам устройств. Например, методы, используемые для записи данных на консольное устройство, также можно использовать для записи в дисковый файл.Байтовые и символьные потоки.На самом низком уровне все С#-системы ввода-вывода оперируют байтами, для человека привычнее оперировать символами. В С# char – это 16-разрядный тип, a byte – 8-разрядный. При использовании набора символов ASCII, в преобразовании типов char и byte нет ничего сложного: достаточно проигнорировать старший байт char -значения. Но такой подход не сработает для остальных Unicode-символов, которым необходимы оба байта. Таким образом, байтовые потоки не вполне подходят для обработки текстового(ориентированного на символы) ввода-вывода. Для решения этой проблемы в С# определен ряд классов, которые преобразуют байтовый поток в символьный, выполняя byte -char - и char -byte -перевод автоматически.Существуют два типа потоков [18]: Выходные. Выходные потоки используются, когда данные пишутся в некоторое внешнее место назначения, которым может быть физический дисковый файл, местоположение в сети, принтер или другая программа. Входные. Входные потоки используются для чтения данных в память или переменные, к которым может обращаться программа. Наиболее часто используемой формой входного потока, является клавиатура. Входной поток может поступать почти из любого источника. Концепции, применимые к чтению/записи дисковых файлов, применимы к большинству устройств.Поскольку в дипломной работе востребована в большей степени работа с дисковыми файлами, будет рассмотрено только на чтении, записи и работе с дисковыми файлами. Все классы потоков определены в пространстве имен System.IO [21]. Чтобы иметь возможность использовать эти классы, в начало программы необходимо включить следующую инструкцию: using System.IO;Пространство имен System.IO содержит типы, позволяющие осуществлять чтение и запись в файлы и потоки данных, а также типы для базовой поддержки файлов и папок.Таблица 2. 1 – Классы ввода-выводаКлассОписаниеFile Статический служебный класс, предоставляющий множество статических методов для перемещения, копирования и удаления файловDirectory Статический служебный класс, предоставляющий множество статических методов для перемещения, копирования и удаления каталогов Path Служебный класс, используемый для манипулирования путевыми именами представляет физический файл на диске, имеет методы для манипулирования этим файлом. Для любого, кто читает или пишет в этот файл, должен быть создан объект stream.File InfoПредставляет физический каталог на диске и имеет методы для манипулирования этим каталогомDirectoryInfoСлужит базовым классом для File Info и Directory Info, обеспечивая возможность работы с файлами и каталогами одновременно, используя полиморфизмFile SystemInfoПредставляет файл, который может быть записан, прочитан или то и другое.File StreamЭтот файл может быть записан или прочитан как синхронно, так и асинхронноStreamReaderЧитает символьные данные из потока и может быть создан с использованием класса File Stream в качестве базовогоВ классе Stream определены:Байтовые потоки;Двоичные потоки;Символьные классы потоков.Байтовые классы потоков включают в себя BufferedStream, FileStream и MemoryStream. BufferedStream обеспечивает дополнительную буферизацию для выполнения операций чтения и записи с другими потоками. FileStream предоставляет поток в файле, поддерживая операции чтения и записи (синхронные и асинхронные). MemoryStream создает поток, резервным хранилищем которого является память.Для считывания и записи двоичных значений встроенных С#-типов используют классы BinaryReader и BinaryWriter. Эти данные считываются и записываются с использованием внутреннего двоичного формата, а не в текстовой форме, понятной человеку.Чтобы создать символьный поток, байтовый поток помещают в одну из символьных потоковых С#-оболочек. TextReader предназначен для обработки операций ввода данных. Представляет средство чтения, позволяющее считывать последовательные наборы знаков. TextWriter предназначен для обработки операций вывода данных. Представляет средство записи, позволяющее записывать последовательные наборы символов. Это абстрактный класс.StreamReader реализует TextReader, который считывает символы из потока байтов в определенной кодировке, StreamWriter реализует TextWriter для записи символов в поток в определенной кодировке. Ниже приведен образец использования класса StreamWriter , приведенный на форуме программистов [21].string path = @"c:\temp\MyTest.txt";        if (!File.Exists(path))        {            // Создание файла и запись в него            using (StreamWriter sw = File.CreateText(path))            {                sw.WriteLine("Hello");                            }        }В С# предусмотрены классы, которые позволяют считывать содержимое файлов и записывать в них информацию. На уровне операционной системы все файлы обрабатываются на побайтовой основе. В С# определены методы, предназначенные для считывания байтов из файла и записи байтов в файл. Таким образом, файловые операции чтения и записи с использованием байтовых потоков очень востребованы [16]. Класс Filestream реализует файловый ввод-вывод на побайтовой основе. Чтобы создать байтовый поток с привязкой к файлу, используют данный класс.С# также поддерживает символьные потоки. Символьные потоки работают непосредственно с Unicode-символами (это их достоинство). Поэтому, если нужно сохранить Unicode-текст, лучше всего выбрать именно символьные потоки [17]. В общем случае, чтобы выполнять файловые операции на символьной основе, можно поместить объект класса FileStream внутрь объекта класса StreamReader или класса StreamWriter.Как показано в таблице 2.1, для работы с файлами, их чтения, открытия, копирования и т.д. используют также класс System.IO.File.Служебные классы File и Directory предоставляют множество статических методов для удивительно исчерпывающего манипулирования файлами и каталогами. Эти методы дают возможность перемещать файлы, опрашивать и обновлять атрибуты, а также создавать объекты FileStream. Статические методы могут вызываться на классах без создания их экземпляров. Некоторые из наиболее полезных статических методов класса File перечислены в таблице 2.2. Таблица 2.2. – Некоторые статические методы класса File МетодОписаниеСору ( ) Create ( )Delete ( )Open ( )Move ( )ReadAllText,ReadAllLinesWriteAllTextКопирует файл из исходного местоположения в целевое Создает файл по указанному пути Удалят файл Возвращает объект FileStream, находящийся по указанному пути Перемещает указанный файл в новое место. Можно специфицировать другое имя файла в его новом местоположенииОткрывает файл, считывает все строки файла с заданной кодировкой и закрывает файлСоздает новый файл, записывает указанную строку в файл, используя указанную кодировку, закрывает файл. Если файл существует, он будет переопределенС помощью класса File и метода ReadAllText открывается для чтения и последующей обработки нужный файл. Пользователь сам выбирает файл и задает путь к нему.Console.WriteLine("Введите расположение и название первого текста. Текст должен быть в кодировке UTF-8, *.txt.(Например, c:\\Users\\1\\Desktop\\lenta.txt) "); string fil =Console.ReadLine(); string stroka1 = File.ReadAllText( fil);Аналогично, для второго текста. Также обеспечивается возможность сохранять данные о сравнении текстов в файл.3 Программная реализация анализа подобия текстов 3.1 Постановка задачи на дипломное проектирование Задача дипломной работы – разработка и программная реализация анализа подобия текстов. В программе должна быть реализована функция сравнения двух текстов. Эти тексты должны быть упорядочены, представлены в виде массивов слов, затем должен быть построен обобщенный массив терминов текстов, на котором будут определены векторы, согласно векторной модели. Схожесть текста оценивается по формулам (1.2) и (1.3), приведенным в главе 1.Программа выполнена в консоли, сравниваемые тексты берутся из файлов, возможно введение имени и пути в строке консоли. Текст читается в расширении *.txt кодировки UTF-8.3.2 Обобщенный алгоритм программыСначала разработан общий алгоритм программы анализа подобия текстов.Словесное описание обобщенного алгоритма:Обработка текстовых файлов.Загрузка и обработка файла. Разделение текста на слова, сохранение в виде массива.Подсчет частот слов в цикле.На основании полученных частот расчет относительных частот TF1.Повтор п.1-3 для второго текста.Построение общего списка слов сравниваемых текстов – векторов текстов.Создание списка с четырьмя полями (слово, частота, TF1 и TF2).Заполнение списка словами и TF1 первого текста.Поиск в первом массиве слов второго текста, и добавление в список TF2Добавление в список слов второго текста, не найденных в первом тексте, причем тогда TF1=0.Подсчет значения косинуса между векторами текстов (мера сходства).Вывод результатов на экран.Обобщенный алгоритм представлен на рис. 3.1.После общего алгоритма представлен алгоритм подсчета абсолютных и относительных частот. Алгоритм подсчета абсолютных и относительных частот – TF-меры (рис. 3.2). Как уже отмечалось в разделе 1, TF-мера является отношением частоты встречаемости термина в документе к общему количеству слов документа.После получения массива со словами и частотами рассчитывается значение относительной частоты. Затем процедура повторяется для второго текста. Все наборы слов хранятся в коллекциях пользовательского типа, которые имеют 3 поля: слово, частота и относительная частота.3.3 Векторы сравниваемых текстовКак описано в главе 1, текстовые документы надо представить в виде векторов. В данной модели вектор текста представляет собой отражение текста на общем наборе терминов текстов 1 и 2. Вообще можно таким образом представлять несколько текстов или проверять текст на соответствие запросу. Вектор может быть представлен нулями и единицами (присутствует НачалоСоздание массива словПодсчетчастот в циклеСоздание общего списка слов 2 текстов(векторов текстов)Вывод результатовКонецЗагрузка из файла в строковую переменную, разбиение на слова с помощью массив разделителейС помощью временной переменной вначале считаются частоты слов, потом относительные частоты TF-мерыВыводятся таблицы TF-мер на экран, а также критерии схожести и расчитанная мера сходства.Создание списка Вначале заполнение списка словами и TF1 первого текста. Поиск в первом массиве слов второго текста, и добавление в список TF2. Добавление в список слов второго текста, не найденных в первом тексте, причем тогда TF1=0.Подсчет меры сходстваПодсчет меры сходства - значения косинуса между векторами текстов.Обработка текста 2Рисунок 3.1 – Обобщенный алгоритм программыНетЗанесение в переменуюfor (int i = 0; i < word1.Length; i++)НетБерем слово i-е И сравниваем его с каждым j-тым словомstring.Equals(word1[i], word1[j]) == trueНачалоСоздание массива разделителейСоздание массива слов текста 1Подсчет TF-меры на основе частотЗанесение в список слов, частот и TF-мерОбработка текста 1for (int j = 0; j < word1.Length; j++)ДаДаДаНетКонец подсчетаРисунок 3.2 – Алгоритм подсчета частоттермин в тексте или нет), как показано на рис.3.3, или TF-мерой. Считается, что использование TF-мер дает более четкий результат.Список слов(набор терминов)Вектор текста 1Вектор текста 2Слово 1Слово 2Слово 3Слово 4Слово 5Слово 6Слово 7Слово 8Слово 9…Слово n110001000…0110100010…0Рисунок 3.3 – Векторное представление3.4 Пользовательские классы и массивыДля удобства создан пользовательский класс Termin с четырьмя полями: слово, частота, TF1 и TF2. Пользовательский класс прописан с обобщенным методом сравнения IComparable, для возможности сравнивать объекты пользовательских классов. class Termin : IComparable { public string slovo; public int chastota; public double TF1; public double TF2; int IComparable.Compare To(object obj) { Termin Compare Obj = obj as Termin; if (Compare Obj == null) throw new ArgumentException("Можно сравнивать только элементы одного типа."); return slovo.Compare To(Compare Obj.slovo); }Это необходимо в случае использования в качестве ключей своих собственных классов, которые не поддерживают ни интерфейса IComparable, ни интерфейса IComparable<K>, или при желании сделать так, чтобы объекты сравнивались посредством какого-то нестандартного процесса [17, 21].В данном случае нужно сравнение объекта класса по полю slovo, что и сделано:return slovo.Compare To(Compare Obj.slovo);потому что, как сказано в 3.3, у терминов, присутствующих в тексте 1 и 2 могут быть разные частоты. Главное, найти общие термины у двух документов. Интерфейс IComparer тоже предоставляет единственный метод Compare (), который принимает два объекта и возвращает целочисленный результат, точно так же, как метод Compare To(). Также в случае неправильного сравнения генерится исключение (ArgumentException) с сообщением что можно сравнивать только объекты одного типа.3.5 Выбор текстов, подсчет частот и TF-мер-71755937260Пользователь выбирает файлы с текстами для сравнения в окне консоли – нужно только ввести по приведенному образцу путь к файлу. Способ уже был описан в 2.4. Рисунок 3.4 – Выбор текстов для сравненияЕсли файл хранится в папке Debug, можно просто указать его имя, а если нет –ввести путь (рис.3.4).Текст должен быть в кодировке UTF-8 тип файла txt. Вначале загруженный в переменную текстовый файл разбивается на слова оператором Split с помощью массива типа char separator, в котором перечислены все разделители: точка, запятая, пробел и т.д.:string[] word1; word1 = stroka.Split(separator);Самым важным было связать слово и подсчитанное количество его повторов, для этого были созданы временные массивы временные массивы word1 и kolvo, в которые записывалось, соответственно слово и его частота, и в массиве же они записывались в поля массива ArrayList slova1.Создаются вложенные циклы и временная переменная tempsl, которая увеличивается на единицу, если слова совпадают. Берется слово word1[0] и сравнивается со всеми словами массива в цикле j.for (int i = 0; i < word1.

Список литературы

Были использованы материалы статей по методам обработки и сравнения текстов, а также собственные методические материалы по данной теме. Также использовались книги по программированию на языке С#. Различные определения взяты из Википедии.

Библиографический список
1. Мешкова Е.В. Анализ современных методов обработки текстовой ин-формации для автоматической классификации документов / Информационные системы и технологии. Теория и практика: cб. науч. тр. / редкол.: А.Н. Береза [и др.]. – Шахты: ГОУ ВПО «ЮРГУЭС», 2009. – 210 с.
2. Лексин В. Рекомендательная система: полезные задачи текстмайнинга [Электронный ресурс]: Хабрахабр. Блог компании Surfingbird, 2013. URL: http://www.habrahabr.ru.
3. Лексин В. Рекомендательная система: введение в проблему холодного старта [Электронный ресурс]: Хабрахабр. Блог компании Surfingbird, 2013. URL: http://www.habrahabr.ru.
7. Родненко В. Python: Алгоритм Шинглов – поиск нечетких дубликатов текста [Электронный ресурс]:Code is art, 19.01.2009. URL: http://www.codeisart.ru/
8. Fetterly et al. A Large-Scale Study of the Evolution of Web Pages, Addison-
Wesley, Massachusetts, 2003.
9. Лексин В. Поиск нечетких дубликатов. Алгоритм шинглов для веб-документов. [Электронный ресурс]: Хабрахабр. Блог компании Surfingbird, 2013. URL: http://www.habrahabr.ru.
10. Мешкова Е.В. Методические указания по выполнению курсовой работы по дисциплине «Методы и средства обработки информации в глобальных компьютерных сетях» [Электронная версия], ВИС ЮРГУЭС,2011
11. Попов А. Поиск в Интернете, внутри и снаружи [Электронный ресурс]: Корабли в бутылках, 2005. URL: http://www.shipbottle.ru
12. Латентное размещение Дирихле (LDA) [Электронный ресурс]: Википедия, 2011. URL: wikihttp://ru.wikipedia.org/wiki
13. Лексин В. Холодный старт для веб-страниц [Электронный ресурс]: Хабрахабр. Блог компании Surfingbird, 2013. URL: http://www.habrahabr.ru.
14. Латентно-семантический анализ (ЛСА) [Электронный ресурс]: Вики-педия, 2011. URL: wikihttp://ru.wikipedia.org/wiki
15. Readings in Latent Semantic Analysis for Cognitive Science and Education [Электронный ресурс]: Сборник статей и публикаций по ЛСА, 2012. URL: http://www.timc.imag.fr/Benoit.Lemaire/lsa.html
16. Шилдгт Г. Полное руководство по С# - 2-e изд., М.:Вильямс, 2010, -1024 с.
17. Флёнов М.Е. Библия С# - 2-е изд., перераб.и доп. – СПб.,БХВ-Петербург, 2011. – 560 с.
18. К.Уотсон, К. Нейгел, Я. Хю Педерсен, Д. Д. Рид, М. Скиннер, Э. Уайт. Visual C# 2008: базовый курс: изд-во "Диалектика", 2009.
19. Эндрю Троелсен. Язык программирования C# 2010 и платформа .NET 4 – 2011.
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00529
© Рефератбанк, 2002 - 2024