Создание обратного языкового словаря - PullRequest
3 голосов
/ 17 ноября 2009

Мне было интересно, что нужно для создания словаря обратного языка.

Пользователь вводит что-то вроде: "красный съедобный фрукт", и приложение возвращает: "помидоры, клубника, ..."

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

Это онлайн-реализация этой концепции.

Что там происходит и в чем дело?

РЕДАКТ. 1: Вопрос больше о том, «как», а не о том, «какой инструмент»; Тем не менее, не стесняйтесь предоставлять инструменты, которые вы думаете, чтобы сделать работу.

Ответы [ 9 ]

5 голосов
/ 17 ноября 2009

OpenCyc - это компьютерная база данных реальных концепций и значений. С их веб-сайта:

OpenCyc - это версия технологии Cyc с открытым исходным кодом, крупнейшая в мире и наиболее полная база общих знаний и механизм здравого смысла. OpenCyc может быть использован в качестве основы широкого спектра интеллектуальных приложений

Остерегайтесь, однако, что это чрезвычайно сложный механизм рассуждений - реальные факты никогда не были простыми. Документация довольно скудная, а кривая обучения крутая.

3 голосов
/ 17 ноября 2009

Чтобы ответить на вопрос «как» вашего вопроса, вы можете использовать человеческие вычисления: по всему миру есть полчища скучающих подростков с айфонами, поэтому создайте глупую игру, побочным продуктом которой будет заполнение вашей базы данных фактами - чтобы использовать умственные способности для ваших целей.

Поначалу звучит как неуклюжая концепция, но посмотрите на эту лекцию по человеческим вычислениям для примера.

3 голосов
/ 17 ноября 2009

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

// terms
+-------------------+
| id | name         |
| 1  | tomatoes     |
| 2  | strawberries |
| 3  | peaches      |
| 4  | plums        |
+-------------------+

// descriptions
+-------------------+
| id | name         |
| 1  | red          |
| 2  | edible       |
| 3  | fruit        |
| 4  | purple       |
| 5  | orange       |
+-------------------+

// connections
+-------------------------+
| terms_id | descript_id  |
| 1        | 1            |
| 1        | 2            |
| 1        | 3            |
| 2        | 1            |
| 2        | 2            |
| 2        | 3            |
| 3        | 1            |
| 3        | 2            |
| 3        | 5            |
| 4        | 1            |
| 4        | 2            |
| 4        | 4            |
+-------------------------+

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

Ваше приложение должно будет разбивать строки и иметь возможность обрабатывать нормализацию ввода, например, избавляясь от суффиксов с помощью ввода пользователя. Затем скрипт запросит таблицу connections и выдаст результаты.

1 голос
/ 17 ноября 2009

Как ваш двигатель узнает, что

  • "Невероятно универсальный ингредиент, необходимый для любого ящика холодильника. Используется ли он для салатов, супов, соусов или просто в сыром виде в бутербродах, убедитесь, что они приобретают твердый и насыщенный красный цвет при покупке",
  • "мягкокислые красные или желтые мясистые плоды, употребляемые в пищу в качестве овоща", и
  • "американский музыкант, известный тем, что он является вокалистом / барабанщиком альтернативной рок-группы Sound of Urchin"

все карты на одно и то же оригинальное слово ? Определения естественного языка не структурированы, их нельзя хранить в нормализованной базе данных. Вы можете попытаться структурировать его, сократив до онтологию , например, WordNet Принстона, но создание и использование онтологий является чрезвычайно трудной проблемой, темой диссертаций PhD и хорошо финансируемых расширенных исследований. 1017 *

1 голос
/ 17 ноября 2009

Во-первых, должен быть какой-то способ связать понятия (например, «снег») с определенными словами.

Поэтому вместо того, чтобы просто хранить список слов, вам также необходимо хранить понятия или свойства, такие как «красный», «фрукт» и «съедобный», а также сами ключевые слова и моделировать отношения между ними.

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

Итак, если у вас есть:

ключевые слова:

0001  aardvark
....
0050  strawberry
....
0072  tomato
....
0120  zoo

и понятия:

0001  big
0002  small
0003  fruit
0004  vegetable
0005  mineral
0006  metal
....
0250  black
0251  blue
0252  red
....
0570  edible

вам потребуется отображение, содержащее:

0050 -> 0003
0050 -> 0252
0050 -> 0570
0072 -> 0003
0072 -> 0252
0072 -> 0570

Вы можете подумать об этом как о моделировании отношения "есть": 0050 (клубника) "это" 0003 (фрукт), "это" 0252 (красный) и "это" 0570 (съедобный).

0 голосов
/ 10 августа 2016

Есть несколько способов сделать это в зависимости от того, сколько работы вы хотите вложить в него. Одним из способов создания обратного словаря является использование определений, чтобы помочь вычислить, какие слова тесно связаны. Этот способ может быть самым сложным, потому что вам нужен довольно обширный алгоритм, который может связывать фразы.

Поиск похожих определений

Один из способов сделать это - сопоставить строку определения с другими и посмотреть, какие из них соответствуют наиболее близким. В php вы можете использовать функцию Similar_text . Проблема этого метода заключается в том, что если в вашей базе данных есть тонна слов и определений, то вы будете использовать много ресурсов вашей базы данных SQL.

Использовать API

Существует несколько ресурсов, которые вы можете использовать, чтобы помочь вам получить обратный словарь с помощью API. Вот некоторые из них.

0 голосов
/ 17 ноября 2009

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

0 голосов
/ 17 ноября 2009

Это звучит как работа для Пролога.

0 голосов
/ 17 ноября 2009

Это должно быть довольно просто. Вы можете использовать прямые синонимы в дополнение к серии слов для определения каждого слова. Порядок слов в определении иногда важен. Конечно, каждое слово может иметь несколько определений.

Вы можете разработать рейтинговую систему, чтобы увидеть, какие определения ближе всего соответствуют вводу, а затем отобразить 3 или 4 верхних слова.

...