Сравнение двух словосочетаний (морфология, синтаксис, семантика...)



  • Нужно дать понять скрипту что словосочетание "Клавиатура" примерно одно и то же что и "Игровые клавиатуры".

    Например: (совпадения я выдумал сам)
    "Клавиатура" vs "Игровые клавиатуры" (совпадение 45%)
    "Обои" vs "Обои на рабочий стол" (совпадение 90%)
    "Красивое фото" vs "Красивы фотографии" (совпадение 95%)
    "Записать в блокнот" vs "блокнот" (совпадение 50%)

    Возможно кто-то уже сталкивался с этим и тестировал на каких-то модулях npm или сторонними методами?

    Просто поиск точного вхождения это к сожалению не совсем то, что нужно(
    Вот нашел примитивный сайт который по символам делает сравнение, хватило бы и такого, только понять бы как это работает
    alt text


  • administrators

    @venom777 Модуль string-similarity выдает довольно неплохие результаты.
    Вот простенький скрипт

    var stringSimilarity = require('string-similarity');
    var words = 
    [
        ["Клавиатура","Игровые клавиатуры"],
        ["Обои", "Обои на рабочий стол"],
        ["Красивое фото", "Красивы фотографии"],
        ["Записать в блокнот", "блокнот"]
    ]
    words.forEach((w)=>{
        console.log(`Compare ${w[0]} and ${w[1]} ${stringSimilarity.compareTwoStrings(w[0], w[1])}`)
    })
    

    Вот результаты:
    [983794920] [03:31:11] Поток №1 : Compare Клавиатура and Игровые клавиатуры 0.6666666666666666
    [983794920] [03:31:11] Поток №1 : Compare Обои and Обои на рабочий стол 0.375
    [983794920] [03:31:11] Поток №1 : Compare Красивое фото and Красивы фотографии 0.64
    [983794920] [03:31:11] Поток №1 : Compare Записать в блокнот and блокнот 0.631578947368421



  • @support То, что нужно! Спасибо)

    Ковырял эти два дня diff-match-patch , работает очень даже неплохо, но как только начал сравнивать варианты по 4-6 слов стал неправильно засчитывать слова как отсутствующие.


  • administrators

    @venom777 diff-match-patch отличная либа, но нахождения коэффициента "похожести" не лучший вариант.