0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45

Как найти процент совпадения 2х строки?

19.01.2017, 01:19. Показов 39885. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите как вычислить процент совпадения двух строк? Берем их из файла или массива не важно.
например есть строка "Мама мыла раму" в нашем массиве array1 и такая же строка есть в массиве array2.
Совпадение 100%.
в массиве array1 есть строка "Мама мыла раму" и в массиве array2 есть строка "Мама мыла малину"
Совпадение 70%
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2017, 01:19
Ответы с готовыми решениями:

Как вычислить процент совпадения строк на всех страницах?
Здравствуйте,Господа Можете ли Вы, помочь мне в решении одной задачи ? Задача по математике - теория вероятности. Есть x =...

Процент совпадения значения в ячейках
Всем привет. Нужна помощь. Необходимо сравнить две ячейки на совпадения. Результат вывести в процентах. Сравнить нужно не просто...

Сравнить текстовые файлы и определить процент совпадения
Даны два текстовых файла. Сравнить их и определить процент совпадения. Результат представить в виде таблицы на экране и записать в файл

5
20 / 20 / 17
Регистрация: 12.12.2015
Сообщений: 71
19.01.2017, 04:09
Python
1
2
3
4
5
6
7
8
9
def fun(s1, s2):
    if len(s1) > len(s2):
        s1, s2 = s2, s1
    p = 0
    for i in range(len(s1)):
        if s1[i] == s2[i]:
            p += 1
    return str(int(p/len(s1)*100))+'%'
print(fun(input(), input()))
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.01.2017, 13:30
Редакционные расстояния между строками\словами вычисляются специализированными функциями статистической направленности с применением тех или иных метрик. Для строк традиционно используется метрика Левенштейна (хотя есть еще и уточненная метрика Левенштейна-Дамерау, метрика Хэмминга (работает только для слов\строк одинаковой длины), менее точная чем прочие метрика Джаро-Винклера и т.д.)
Вот пример использования соответствующих функций из сторонних модулей:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from fuzzywuzzy import fuzz
import Levenshtein
import statistics as st
 
# токенизируем слова по пробелу - самый элементарный способ, хотя в модулях для natural language processing (например, nltk) есть спец. токенизаторы
sentences = "Мама мыла раму".split(), 'Мама мыла малину'.split()
l =[]
l2=[]
l3=[]
for w1,w2 in zip(sentences[0],sentences[1]):
    l.append(Levenshtein.ratio(w1,w2))
    l2.append(fuzz.ratio(w1,w2))
    l3.append(Levenshtein.jaro_winkler(w1,w2))
 
print('Levenshtein:',st.mean(l))   # 0.8
print('fuzzywuzzy %:',st.mean(l2)) # 80
print('jaro_winkler:',st.mean(l3)) # 0.8796296296296297
Того же результата можно добиться и с помощью встроенного модуля difflib, который для вычисления дистанций пользуется, похоже, той же метрикой Левенштейна:
Python
1
2
3
from difflib import SequenceMatcher
s = SequenceMatcher(lambda x: x==" ", "Мама мыла раму", "Мама мыла малину") 
print('difflib:',s.ratio())  #0.8
1
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
19.01.2017, 14:12
id_2020, немного не точно.
так точнее будет
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding: utf-8 -*-
 
s1 = 'Мама мыла раму'
s2 = 'Мама мыла малину'
 
 
def search_partial_text(src, dst):
    dst_buf = dst
    result = 0
    for char in src:
        if char in dst_buf:
            dst_buf = dst_buf.replace(char, '', 1)
            result += 1
    r1 = int(result / len(src) * 100)
    r2 = int(result / len(dst) * 100)
    return '{}%'.format(r1 if r1 < r2 else r2)
 
print(search_partial_text(s1, s2))
результат 81%

Добавлено через 8 минут

Не по теме:

Garry Galler, ну вот... а я тут со своими костылями :D

0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
19.01.2017, 16:01
lepus007, так каков алгоритм?
"Мама" и " Мама", с пробелом в начале - насколько совпадают?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.01.2017, 16:22
Wi0M,
Высчитывать разницу\совпадение между словами по всякому можно, просто в вашем случае это чистая алгебра, а не статистика получается.
То есть если взять классическое сравнение "ABCD", "DCBA", то ваш алгоритм скажет, что строки идентичны, поскольку просто вычитает символы одной строки из другой, тогда как стат. алгоритмы сравнения считают кол-во операций вставки\удаления\замены минимально необходимых для превращения одной строки в другую (плюс еще могут учитываться веса каждой операции и пр. вещи).

Python
1
2
3
4
print(search_partial_text("ABCD", "DCBA"))      # 100 %
print(fuzz.ratio("ABCD", "DCBA"))               # 25
print(Levenshtein.ratio("ABCD", "DCBA"))        # 0.25
print(Levenshtein.jaro_winkler("ABCD", "DCBA")) # 0.5
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2017, 16:22
Помогаю со студенческими работами здесь

Найти совпадения дата/логин в 2 таблицах и вывести рядом факт совпадения
Коллеги, задачка следующая: Дана таблица (A-B-C) с указанием логина сотрудника и периода его отпуска, рядом дана таблица (H-I) фактов...

Найти все совпадения строки и вывести их в текстовое поле
Добрый день! Застряла в написании обработки кнопки. По нажатию открывается диалоговое окно, куда пользователь вводит параметр поиска. Далее...

[Perl] Как заставить (.+) искать до первого совпадения, а не до конца строки?
Добрый вечер! Не будет ли кто-нибудь любезен помочь с решением проблемы? Имеем 1.html файл с содержанием: 1 &lt;a...

Как вытащить из строки один или два совпадения по условию?
Добрый день, Есть 2 строки: 1) 5818M8001966ABHF- 2) 4137M33X24001- Интересует такой вопрос: Как в 1) узнать, что перед -...

Как получившиеся совпадения при сопоставлении строки с регулярным выражением
Почему не работает? let str = &quot;Астрономия это наука о небесных объектах&quot;; let symb = &quot;о&quot;; let count = (item1, item2) =&gt;...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru