Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/193: Рейтинг темы: голосов - 193, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45

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

19.01.2017, 01:19. Показов 39851. Ответов 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 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru