Создание поискового движка на естественном языке в PHP - PullRequest
0 голосов
/ 24 марта 2011

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

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

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

Большое спасибо!

Редактировать: Мне просто любопытно, вот и все. Я предпочел бы сделать свой собственный (чтобы посмотреть, как это работает), чем прыгать в нечто вроде Lucene.

Ответы [ 3 ]

2 голосов
/ 24 марта 2011

Вы должны посмотреть на mapReduce и распараллеливание:

http://code.google.com/edu/parallel/mapreduce-tutorial.html

Вот как Google это делает, я верю. Конечно, у вас нет миллиарда компьютеров, чтобы помочь вам.

(я бы также сказал, что делать это на чистом php будет очень медленно)

0 голосов
/ 23 августа 2011

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

Для этого есть расширение PHP, stem. http://pecl.php.net/package/stem

В PHP реализован Porter Stemmer, это ключевая операция, описанная выше, реализованная как функция.

0 голосов
/ 08 апреля 2011

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

Кроме того, если вы хотите серьезно работать в этой области, вам, вероятно, следует перейти на более «эффективный» язык (C #, Java, C / C ++ ...).

...