Поиск ключевых слов (из матрицы) в строке (около 500 символов) - PullRequest
2 голосов
/ 21 октября 2010

Эй, в основном я пытаюсь автоматически назначить теги на строку ввода пользователя.Теперь у меня есть 5 тегов для назначения.Каждый тег будет иметь около 10 ключевых слов.Строка может быть назначена только один тег.Чтобы присвоить тегу строку, мне нужно найти слова, соответствующие ключевым словам для всех пяти тегов.Пример:

TAGS:     Keywords
Drink:    Beer, whiskey, drinks, drink, pint, peg.....
Fitness:  gym, yoga, massage, exercise......
Apparels: men's shirt, shirt, dress......
Music:    classical, western, sing, salsa.....
Food:     meal, grilled, baked, delicious.......

Пользовательская строка: сделайте первый шаг, чтобы достичь своих целей в фитнесе, заплатите 199 рупий за аэробику, йогу, кик-боксерский танец, танец Болливуда и многое другое на сумму 1000 рупий в The Premium Premium Chisel Bounce, Koramangala.


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

Пожалуйста, дайте любые советы по этому поводу.Я буду использовать php, чтобы вы знали.спасибо

Ответы [ 3 ]

1 голос
/ 21 октября 2010

Интересная тема!То, что вы ищете, является чем-то похожим на скрытое семантическое индексирование.Здесь есть квест .

0 голосов
/ 21 октября 2010

Если вы не возражаете против использования внешнего API, попробуйте один из них:

Чтобы привести пример, Zemanta вернет следующие теги (среди прочего) для вашей пользовательской строки:

Болливуд, Кикбоксинг, Корамангала, Аэробика, Бокс, Спорт, Индия, Азия

Открытый Кале вернется

Спорт, Гостиничный отдых, Здоровье, Отдых, Поведение человека, Пинок, Йога, Зубило Аэробика, Медитация, Индийская философия, Единоборства, Аэробика, Упражнение

0 голосов
/ 21 октября 2010

Если количество тегов и ключевых слов мало, я бы сэкономил на написании сложного алгоритма и просто сделал бы:

$tags = array(
    'drink' => array('beer', 'whiskey', ...),
    ...
);
$string = 'Take first step ...';
$bestTag = '';
$bestTagCount = 0;
foreach ($tags as $tag => $keywords) {
    $count = 0;
    foreach ($keywords as $keyword) {
        $count += substr_count($string, $keyword);
    }
    if ($count > $bestTagCount) {
        $bestTagCount = $count;
        $bestTag = $tag;
    }
}
var_dump($bestTag);

Алгоритм довольно очевиден, но подходит только для небольшого количества тегов / ключевых слов..

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