Использование разнесения сочетания слов - PullRequest
0 голосов
/ 08 июня 2019

Интересно, как решить эту проблему.

Пользователь дает мне предложение, например: «Я люблю кодировать». У меня в базе данных есть ключевое слово «love to code», и я хочу посмотреть, есть ли ключевое слово в данном предложении.

Так что я вытащу все ключевые слова из базы данных, зациклю их и посмотрю, есть ли preg_match. Теперь возникает проблема, многие люди делают опечатки. Я думал о сравнении ключевых слов со словами в предложении с помощью метода Левенштейна.

Проблема в том, чтобы взорваться. Поскольку мое ключевое слово состоит из нескольких слов, функция разнесения разбивает целое предложение на отдельные слова. Таким образом, мое ключевое слово не распознается. Есть ли способ разделить вышеприведенное предложение на несколько комбинаций, а не только на отдельные слова?

Я думал об удалении всех пробелов из $ input. (станет «ilovetocodr»), сделайте то же самое для чувств db и используйте levenshtein.

Этот код будет работать, но только для ключевых слов, состоящих из одного слова. Функция разнесения разделит предложение на отдельные слова.

$input = 'I love to codr';

$keywords = \Layla\Keyword::all();
$words = explode(' ', $input);

foreach ($words as $word) {
    foreach ($keywords as $keyword) {
        $similarity = levenshtein($word, $keyword);
        if ($similarity <= 1) 
            print "$keyword is similar to $word";
    }
}

Затем я попытался убрать пробелы и сравнить ключевое слово с предложением, но тогда разница оказалась большой (ожидал этого).

$sentence = 'ilovetocodrandstuff';
$keyword = 'ilovetocode';

$similarity = levenshtein($sentence, $keyword);

echo $similarity;

Будет выводить 9.

...