Здравствуйте, я ваша тётя ['здравств', 'я', 'ваш', 'тет']
Здрасьте, я ваша тётя ['здрасьт', 'я', 'ваш', 'тет']
[3, 0, 0, 0]
.from nltk import word_tokenize
from nltk.metrics.distance import edit_distance
from nltk.stem import SnowballStemmer
sentences = ['Здравствуйте, я ваша тётя', 'Здрасьте, я ваша тётя']
stemmer = SnowballStemmer('russian')
prepared = []
for sentence in sentences:
tokens = word_tokenize(sentence)
tokens = [token for token in tokens if token.isalpha()]
tokens = [stemmer.stem(token.lower()) for token in tokens]
prepared.append(tokens)
combined = zip(*prepared)
distances = [edit_distance(a, b) for a, b in combined]
print(prepared) # [['здравств', 'я', 'ваш', 'тет'], ['здрасьт', 'я', 'ваш', 'тет']]
print(distances) # [3, 0, 0, 0]
part
схожие буквы по типу А↔О
, И↔Й
, Е↔Ё↔Э
и т.д. не составит проблем. const isSimilar = (string, needle) => {
const expression = new RegExp(
string
.split(/\s+/g)
.map(part => [...part].join('(.*?)'))
.join('(\\s+)'),
'i'
);
return expression.test(needle);
}
console.log(isSimilar('Я купил молоко', 'Я купиил моллокко!!!####' )); // true
console.log(isSimilar('Я купил молоко', 'я КупИилЛ МоллОкКкОО' )); // true
console.log(isSimilar('Я купил молоко', 'Ты купил молоко' )); // false