Как сделать маленький механизм как Wolfram|Alpha?

Позволяет говорят, что у меня есть три модели/таблицы: operating_systems, words, и programming_languages:

# operating_systems
name:string created_by:string family:string
Windows     Microsoft         MS-DOS
Mac OS X    Apple             UNIX
Linux       Linus Torvalds    UNIX
UNIX        AT&T              UNIX

# words
word:string defenitions:string
window      (serialized hash of defenitions)
hello       (serialized hash of defenitions)
UNIX        (serialized hash of defenitions)

# programming_languages
name:string created_by:string example_code:text
C++         Bjarne Stroustrup #include <iostream> etc...
HelloWorld  Jeff Skeet        h
AnotherOne  Jon Atwood        imports 'SORULEZ.cs' etc...

Когда пользователь ищет hello, система показывает определения 'привет'. Это относительно легко реализовать. Однако, когда пользователь ищет UNIX, механизм должен выбрать: word или operating_system. Кроме того, когда пользователь ищет windows (строчная буква 'w'), механизм выбирает word, но должен также показать Assuming 'windows' is a word. Use as an <a href="etc..">operating system</a> instead.

Кто-либо может указать на меня в правильном направлении с парсингом и выбором темы поискового запроса?Спасибо.


Примечание: это не должно мочь выполнить вычисления, как WA может сделать.

5
задан Jon Seigel 9 May 2010 в 03:54
поделиться

3 ответа

Иметь новая индексная таблица, называемая термины , которая содержит токенизированную версию каждого действительного термина. Таким образом, вам нужно будет искать только в одной таблице.

# terms
Id Name     Type               Priority
1  window   word               false
2  Windows  operating_system   true

Затем вы можете увидеть, насколько близко соответствует поисковый запрос пользователей. Т.е. «Windows» будет на 100% совпадать с 2 - так что предположим, но также будет близким совпадением с 1 , поэтому предложите это в качестве альтернативы. Вы должны написать свой собственный механизм правил, который определял бы, насколько близко слово соответствует (то есть, что предполагается с «windows» против «Windows»?) Поле Priority может быть окончательным решающим, если механизм правил не может принять решение и теоретически может определяться действиями пользователя, чтобы узнать, о чем пользователи, скорее всего, имеют в виду.

2
ответ дан 15 December 2019 в 06:19
поделиться

Wolfram Alpha намного сложнее, чем ваш пример ... Я не уверен в его внутренней работе (я очень мало читал о нем), но я считаю, что это очень большой и сложный автоматический вывод система . Их довольно легко реализовать (Prolog, по сути, является универсальным, вы можете поместить в него любые нужные вам данные), но их очень сложно сделать полезными.

0
ответ дан 15 December 2019 в 06:19
поделиться

А как насчет того, чтобы сделать кеш в виде таблицы базы данных, где будут все ключевые слова.

Поисковый запрос будет выглядеть примерно так:

SELECT * FROM keywords WHERE keyword = '<YourKeyWord>'   /* mysql */

таблица ключевых слов будет содержать ссылки на ваши модули.

Преимущество этого подхода, конечно, в быстром поиске.

Вы можете использовать два запроса, чтобы смоделировать запрашиваемое поведение:

  • Точное совпадение (без проблем в mysql)
  • Поиск без учета регистра
1
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: