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

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

19.01.2017, 01:19. Показов 39696. Ответов 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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru