Хороший белый список для условий поиска - PullRequest
2 голосов
/ 05 ноября 2010

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

preg_replace('/[^a-z0-9 -]/i', '', $s);

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

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

А как насчет 2010 (A space odyssey)?А как насчет автобиографии Жискара д`Эстена?... На этот вопрос вообще невозможно ответить, это будет зависеть от вашего приложения и структур данных.

Вы хотите изучить функции полнотекстового поиска в выбранной вами базе данных или даже специализированные поисковые устройства, такие как Sphinx,

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

0 голосов
/ 05 ноября 2010

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

В зависимости от того, какостальная часть вашего поиска реализована, вы можете удалить допустимые символы и при этом вернуть релевантные результаты поиска.В этом случае вы хотите, чтобы в вашем выражении допускались неанглийские символы (поскольку вы не хотите разбивать слово), но вы могли бы удалить все знаки препинания, которые не находятся внутри фразы, разделенной кавычками.Например, поиск red haired должен дать вам все результаты, которые вы получите при поиске red-haired, плюс несколько дополнительных.

0 голосов
/ 05 ноября 2010

У Google есть довольно продвинутые правила поиска, но их основное правило таково:

Как правило, знаки препинания игнорируются, включая @ # $% ^ & * () = + [] \ и другие специальные символы.

Однако Google делает исключения для общих поисковых терминов, таких как C ++, C # или $ 100.

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

...