Как построить концептуальный поисковик? - PullRequest
5 голосов
/ 23 октября 2010

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

В настоящее время я читаю книгу «Обработка естественного языка в Python», и, похоже, в WordNet есть некоторые сопоставления слов, которые могут оказаться полезными, хотя я не уверен, как интегрировать это в поисковую систему. Могу ли я использовать Lucene для этого? Как?

Из дальнейших исследований кажется, что «скрытый семантический анализ» имеет отношение к тому, что я ищу, но я не уверен, как это реализовать.

Какой-нибудь совет, как это сделать?

Ответы [ 4 ]

9 голосов
/ 23 октября 2010

Я не уверен, как интегрировать это в поисковик. Могу ли я использовать Lucene для этого? Как?

Шаг 1. Стоп.

Шаг 2. Получите что-то на работу.

Шаг 3. К тому времени вы узнаете больше о Python и Lucene, а также о других инструментах и ​​способах их интеграции.

Не начинайте с попыток решить проблемы интеграции. Программное обеспечение может всегда быть интегрированным. Это то, что делает операционная система. Он интегрирует программное обеспечение. Иногда требуется более тесная интеграция, но это никогда первая проблема, которую нужно решить.

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

Позже вы можете попытаться выяснить, как сделать взаимодействие с пользователем легким.

Но не начинайте с интеграции и не останавливайтесь из-за вопросов интеграции. Отложите интеграцию и заставьте что-то работать.

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

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

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

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

Когда бы ни поступил поисковый запрос, для каждого слова вы

  1. Ищите буквальное совпадение
  2. «Нормализовать / канонизировать» слово, используя механизм морфологии, то есть сделать его единичным, первой формы и т. Д. И искать совпадения
  3. Искать синонимы слова

Тогдаповторите для всех комбинаций входных слов, то есть "большие кошки", "большие кошки", "огромные кошки" огромные кошки "и т. д.

Фактически, вам также нужно хранить данные индекса в канонической форме.(Singluar, первая форма и т. д.) вместе с буквальной формой.

Что касается понятий, например, кошки также являются животными - это то, где это становится сложным. Это никогда не работало, потому что в противном случае Google вернул бы концептуальноеуже совпадает, но он этого не делает.

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

Во-первых, напишите кусок кода на Python, который вернет вам ананас, апельсин, папайю, когда вы вводите яблоко.Сосредоточив внимание на «есть» отношение семантической сети.Тогда продолжайте с «есть отношения» и т. Д.

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

...