как найти подходящие шаблоны в строках независимо от порядка? - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь сопоставить шаблоны между двумя строками. Например, у меня есть

pattern_search = ['education four year'] 
string1 = 'It is mandatory to have at least of four years of professional education'
string2 = 'need to have education four years with professional degree'

Я пытаюсь сказать правду, когда пытаюсь найти соответствие между pattern_search и string1 & string2.

Когда я использую библиотеку регулярных выражений, поиск / поиск / поиск мне не помогает. В строке у меня есть все необходимые слова, но не по порядку, в строке 2 у меня есть одно дополнительное слово с добавленным множественным числом.

В настоящее время я разделяю проверку строк по каждому слову в pattern_search на каждое слово в string1 & 2 после предварительной обработки. Есть ли способ найти совпадение между предложениями?

Ответы [ 3 ]

2 голосов
/ 11 июня 2019

Вам следует хорошенько взглянуть на библиотеку difflib, в частности, функцию get_close_matches, которая возвращает слова, которые "достаточно близки", чтобы выполнить то требование слов, которое может не совсем совпадать Обязательно настройте свой порог (cutoff=) соответственно.

from difflib import get_close_matches
from re import sub

pattern_search = 'education four year'
string1 = 'It is mandatory to have at least of four years of professional education'
string2 = 'need to have education four years with professional degree'
string3 = 'We have four years of military experience'

def match(string, pattern):
  pattern = pattern.lower().split()
  words = set(sub(r"[^a-z0-9 ]", "", string.lower()).split())  # Sanitize input
  return all(get_close_matches(word, words, cutoff=0.8) for word in pattern)

print(match(string1, pattern_search))  # True
print(match(string2, pattern_search))  # True
print(match(string3, pattern_search))  # False

Если вы хотите сделать pattern_search списком шаблонов, то вам, вероятно, следует выполнить цикл с помощью функции match.

0 голосов
/ 11 июня 2019

В Python, чтобы проверить, содержит ли строка другую строку, вы можете попробовать пару вещей:

Использовать в

>>> pattern_search in string
True

Или найти

>>> string1.find(pattern_search)
[returns value greater than 1 if True or -1 if False]
0 голосов
/ 11 июня 2019

Попробуйте:

def have_same_words(string1, string2):
    return sorted(string1.split()) == sorted(string2.split())

print(have_same_words("It is mandatory to have at least of four years of professional education", "education four year"))

Если это поможет, примите ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...