Форум программистов, компьютерный форум CyberForum.ru

Схожесть текстов (расстояние Левенштейна) - C++

Восстановить пароль Регистрация
 
r0mzes121
7 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 4
19.06.2014, 07:28     Схожесть текстов (расстояние Левенштейна) #1
Программа, которая сравнивает 2 теста на схожесть из 1.txt и 2.txt нужно что бы программа не подсчитывала восклицательные знаки и вопросительные

то есть 2 одинаковых текста но в конце второго будет куча восклицательных знаков процентовка всё ровно будет 100%

C++
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
#include <stdio.h>
#include <vector>
#include <fstream>
#include <string.h>                                      
#include <conio.h>                                       
#include  <time.h>                                      
using namespace std;
 
char * read_file (const char * name) {
    FILE * file = fopen(name, "r");
 
    fseek(file, 0, SEEK_END);
    int len = ftell(file);
    fseek(file, 0, SEEK_SET);
 
    char * s = new char[len + 1];
    len = fread(s, 1, len, file);
    s[len] = 0;
 
    fclose(file);
 
    return s;
}
 
int min3(int n1, int n2, int n3) {
    int ans = n1;
    if (n2 < ans)
        ans = n2;
    if (n3 < ans)
        ans = n3;
    return ans;
}
 
int m(char a, char b) {
    if (a == b)
        return 0;
    else
        return 1;
}
 
int levenstein_distance(char * s1, char * s2) {
    int l1 = strlen(s1);
    int l2 = strlen(s2);
 
    vector<int> current_row(l2 + 1);
    vector<int> previous_row(l2 + 1);
 
 
    for (int j = 0; j <= l2; j++)
        current_row[j] = j;
 
    for (int i = 1; i <= l1; i++) {
        previous_row = current_row;
        current_row[0] = i;
        for (int j = 1; j <= l2; j++) {
            int temp1, temp2, temp3;
            temp1 = previous_row[j] + 1;
            temp2 = current_row[j-1] + 1;
            temp3 = previous_row[j-1] + m(s1[i-1], s2[j-1]);
            current_row[j] = min3(temp1, temp2, temp3);
 
        }
    }
 
    return current_row[l2];
}
 
int main () {
    clock_t time;
    time=clock();
    const char * NAME1 = "1.txt", * NAME2 = "2.txt";
    char * s1, * s2;
    int l1, l2;
 
    s1 = read_file(NAME1);
    s2 = read_file(NAME2);
    if (strlen(s1) == 0 && strlen(s2) == 0)
    printf("100%%\n");
    else
    printf("%.3f%%\n", 100 * (1 - (float)levenstein_distance(s1, s2) / max(strlen(s1), strlen(s2))));
    time=clock() - time;
    printf("%f", (double)time/CLOCKS_PER_SEC);
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2014, 07:28     Схожесть текстов (расстояние Левенштейна)
Посмотрите здесь:

Вывод случайных текстов на экран C++
Совмещение текстов C++
Степень похожести двух строк (слов). Расстояние Левенштейна C++
Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили пе C++
Написать программу-кодировщик английских текстов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
8-BITOV
513 / 455 / 83
Регистрация: 05.05.2014
Сообщений: 1,077
19.06.2014, 11:35     Схожесть текстов (расстояние Левенштейна) #2
r0mzes121, Вы бы хоть рассказали нам, что такое расстояние ливейнштейна, или хотя бы ссылочку дали...
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
19.06.2014, 11:37     Схожесть текстов (расстояние Левенштейна) #3
Цитата Сообщение от r0mzes121 Посмотреть сообщение
лИвейнштейна

Левенштейн, Владимир Иосифович
r0mzes121
7 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 4
19.06.2014, 11:43  [ТС]     Схожесть текстов (расстояние Левенштейна) #4
Расстояние Левенштейна (также редакционное расстояние или дистанция редактирования) между двумя строками в теории информации и компьютерной лингвистике — это минимальное количество операций вставки одного символа, удаления одного символа и замены одного символа на другой, необходимых для превращения одной строки в другую.
Впервые задачу упомянул в 1965 году советский математик Владимир Иосифович Левенштейн при изучении последовательностей . Впоследствии более общую задачу для произвольного алфавита связали с его именем. Большой вклад в изучение вопроса внёс Дэн Гасфилд. Источник: Статья Артемьева Ю.М. http://*******/khyCmi
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
19.06.2014, 11:50     Схожесть текстов (расстояние Левенштейна) #5
Цитата Сообщение от r0mzes121 Посмотреть сообщение
не подсчитывала восклицательные знаки и вопросительные
Вы же все равно держите текст в памяти. Что мешает их просто выбросить?
r0mzes121
7 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 4
19.06.2014, 11:56  [ТС]     Схожесть текстов (расстояние Левенштейна) #6
Преподаватель.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 21:45     Схожесть текстов (расстояние Левенштейна)
Еще ссылки по теме:

Копирование текстов с сайта в вордовский документ C++
C++ Составить и отладить программу редактор текстов
Генератор случайных текстов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
19.06.2014, 21:45     Схожесть текстов (расстояние Левенштейна) #7
А как точно сформулировано задание?

Если требуется НЕ различать эти знаки, достаточно установить в 0 цену замены. А если НЕ учитывать - то только выбрасывать.

Добавлено через 9 часов 13 минут
Цитата Сообщение от gazlan Посмотреть сообщение
только выбрасывать
Гм. Правильно будет так: цена вставки/удаления этих символов должна быть нулевой.
Yandex
Объявления
19.06.2014, 21:45     Схожесть текстов (расстояние Левенштейна)
Ответ Создать тему
Опции темы

Текущее время: 15:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru