2010-10-23 5 views
6

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

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

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

Любые советы о том, как это сделать?

ответ

9

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

Шаг 1. Остановка.

Шаг 2. Получить что-то для работы.

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

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

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

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

Но не начинайте с интеграции и не останавливайтесь из-за вопросов интеграции. Установите интеграцию в сторону и получите что-то для работы.

+0

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

+0

@DevX: Пожалуйста, замедляйтесь. «Более интеллектуальный двигатель» - это одно. Постройте это в первую очередь. Интеграция - это наименьшее из ваших забот. Сохраните это для последнего после того, как вы получите «более интеллектуальный движок». Я повторю это, потому что вы, кажется, не читаете его: интеграцию можно оставить надолго, после того, как вы получите некоторый опыт работы с инструментами и решите основную проблему. –

+0

+1 для шага 2. – Skarab

1

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

Всякий раз, когда поисковый запрос поступает, для каждого слова вы

  1. Посмотрите на буквального матч
  2. «Normalize/canonicalze» слово с использованием морфологии двигателя, т.е. сделать его в единственном числе, первая форма, и т.д., и искать совпадения
  3. Поищите синонимов слова

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

На самом деле вам также необходимо хранить данные индекса в канонической форме (singluar, first form и т. Д.) Вместе с буквальной формой.

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

+1

Отличная идея по использованию нормализации в первую очередь. Для этого можно использовать библиотеку NLTK/WordNet. Я бы не упустил концептуальную маркировку как непрактичную, потому что Google еще не сделал этого. Google предлагает очень открытые запросы на миллиарды страниц. Выполнение концептуальных поисков для них открывает банку червей, и, кроме того, пользователей, как правило, интересуют только 10 лучших ответов. То есть, общие поисковики хотят высокой точности. Для моего приложения, однако, ширина является важной характеристикой качества результата. Я не хочу пропустить что-то потенциально важное. – DevX

0

Сначала напишите фрагмент кода на языке python, который вернет вам ананас, апельсин, папайю, когда вы введете яблоко. Сосредоточив внимание на «есть» отношение семантической сети. Затем продолжим с отношениями и так далее.

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

1

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

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

  • Нет связанных вопросов^_^