Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab1_Retivih_Skorikov

.docx
Скачиваний:
28
Добавлен:
02.12.2015
Размер:
363.81 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

АЛГОРИТМ ОПРЕДЕЛЕНИЯ КОНЦА ПРЕДЛОЖЕНИЯ В ТЕКСТАХ

Отчет по лабораторной работе №1

по дисциплине «Языки программирования»

Выполнили:

Студенты гр. 724

_______  _____   Ретивых В.А.

_______  _____   Скориков И.И.

21.09.2015

Принял:

Кандидат технических наук

кафедры КИБЭВС

_______  _____ Романов А.С.

21.09.2015

2015

1 Цель работы

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

2 Алгоритм

Рисунок 1 – Алгоритм на основе конечного автомата

3 Исходный код программы

#include <QRegExp>

#include <QFile>

#include <QTextStream>

#include <QStringList>

#include <QDebug>

#include <QTextCodec>

#include <QStringRef>

#include <iostream>

#include "main.h"

#define DICT_FILE "dict.txt"

using namespace std;

QStringList ReadFile(QString fileName) {

QStringList content;

QFile file(fileName);

if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {

QTextStream textStream(&file);

while (!textStream.atEnd()) {

QString line = textStream.readLine();

content.append(line);

}

}

return content;

}

qint32 CheckGeo(QString text, qint32 end) {

QStringList dict = ReadFile(DICT_FILE);

qint32 start = end;

while (text.at(start-1).isLetter())

--start;

QStringRef subString(&text, start, end-start+1);

foreach (QString str, dict) {

if (str == subString) {

return 1;

}

}

return 0;

}

qint32 SentenceEnd(QString text) {

QRegExp rx1(QString::fromUtf8("[\\.]"));

QRegExp rx2(QString::fromUtf8("[!?]"));

QRegExp rx3(QString::fromUtf8("[ ]"));

QRegExp rx4(QString::fromUtf8("[А-Я]"));

QRegExp rx5(QString::fromUtf8("[\\w,:]"));

QRegExp rx6(QString::fromUtf8("[а-я]"));

qint32 result = text.length() - 1;

qint32 state = 1;

for (qint32 i = 0; i < text.length(); ++i) {

switch (state) {

case 0:

return result;

break;

case 1:

result = text.length() - 1;

if (rx4.exactMatch(text.at(i))) {

state = 2;

} else if (rx2.exactMatch(text.at(i))) {

state = 3;

} else if (rx1.exactMatch(text.at(i))) {

state = 4;

}

break;

case 2:

if (rx4.exactMatch(text.at(i))) {

state = 8;

} else {

state = 1;

}

break;

case 3:

if (!rx2.exactMatch(text.at(i))) {

state = 0;

result = i - 1;

}

break;

case 4:

if (rx2.exactMatch(text.at(i))) {

state = 3;

} else if (rx1.exactMatch(text.at(i))) {

state = 5;

} else if (rx5.exactMatch(text.at(i))) {

state = 1;

} else if (rx3.exactMatch(text.at(i))) {

state = 6;

} else {

state = 0;

result = i - 1;

}

break;

case 5:

if (!rx1.exactMatch(text.at(i))) {

state = 0;

result = i - 1;

}

break;

case 6:

if (rx6.exactMatch(text.at(i))) {

state = 1;

} else {

state = 7;

}

break;

case 7:

state = CheckGeo(text, i - 4);

result = i - 3;

break;

case 8:

if (rx4.exactMatch(text.at(i))) {

state = 8;

} else if (rx1.exactMatch(text.at(i))) {

state = 4;

} else if (rx2.exactMatch(text.at(i))) {

state = 3;

} else {

state = 1;

}

break;

default:

break;

}

}

return result;

}

qint32 main(qint32 argc, char** const argv) {

QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));

QTextStream qtin(stdin);

QString text = qtin.readLine();;

if (!text.isEmpty())

cout << SentenceEnd(text) << "\n";

return 0;

}

4 Результат работы программы

Рисунок 2 – Результат работы программы

5 Тесты

Рисунок 3 – Тесты

6 Заключение

В процессе выполнения лабораторной работы был разработан алгоритм, определяющий конец предложения в тексте, написанном на русском языке.

Соседние файлы в предмете Языки программирования