2010-10-21 6 views
2

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

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....... 

Строка пользователя: Возьмите первый шаг для достижения ваших целей в фитнесе, Pay Rs 199 для аэробики, йога, Kick Boxing, Болливуд танец и многое другое стоит 1000 рупий, по крайней Премиум F Долото Отказов, Koramangala.

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

Просьба дать вам какие-либо советы по этому вопросу. Я буду использовать php, чтобы вы знали. благодаря

ответ

0

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

$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); 

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

1

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

+0

благодарит ссылки действительно интересно, но я искал что-нибудь попроще, как мои потребности не настолько сложна, ч ERE. – Anubhav

0

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

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

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

Открыть Кале возвратят

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

+0

Я уже загружаю много внешних файлов в свой код, поэтому не могу использовать другой api – Anubhav

Смежные вопросы