Я реализую небольшую словарную базу данных, в которой я хотел бы выполнять поиск на основе лексического / семантического сходства между ними ..
Например, beer
имеет «сестринские слова», такие как soda, lemonade, wine, champagne
, каждое из которых «отличается» в «различном направлении» (например: первые два являются «умеренными» версиями идеи «пива», в то время как последние две являются «более экстремальными» версиями)
Я знаю, что в WordNet есть API, но большинство слов (и фраз) в моем словаре связаны в более неформальной форме
(другой пример. «Гангстер» относится к [nun, orphan, rebel
] {criminal, mafia boss, murderer
}, где конечности меняются слева направо, а те, что в [], считаются «положительными конечностями», а те, что в { } являются "отрицательными конечностями")
В использовании:
- Пользователь вводит поисковый ввод (слово)
- Слово соответствует сестринским словам.
- У пользователя есть шанс "подстроить слово", изменяя конечности как минимум в 2 направлениях, как, например, в примерах выше.
Как лучше всего осуществить такой поиск - шаги 2 и 3 выше?
Я подумываю об использовании PHP / MySQL, так как это то, с чем я знаком, но какие есть лучшие альтернативы? Опять же - имейте в виду, что это не большой словарь. Это просто подборка общих слов.
Вот моя попытка ответить на это - это очень, очень просто ... предложения по улучшению приветствуются:
Слова таблицы MySQL:
id, (primary key, autoincrement)
word (varchar 75),
relatedword (varchar 75)
relationscore (int 11)
direction (tinyint, -1 or 1)
С учетом запроса $ word и $ direction:
"SELECT relatedword FROM words WHERE word='$word' AND direction=$direction ORDER BY relationscore DESC"