Учитывая строку слов: как найти каждое слово (без учета регистра) в столбце varchar (1000) в MySQL, игнорируя пунктуацию?

У меня есть две базы данных a и b с названиями научных работ в них. Я хочу объединить эти базы данных в одну базу данных c.

  • Возможно, что a содержит заголовки, которых нет в b, и наоборот.
  • Возможно, заголовок есть в обеих базах данных a и b.
  • It is possible that the cases of the letters and the punctuation do not match:
    • "This is a Title." VS. "this is a title"
    • «Это — еще один — титул». ПРОТИВ. «Это еще один титул»
    • «Алгоритм k-mean на основе bla». VS "Алгоритм k-mean на основе bla"

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

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


person Aufwind    schedule 06.08.2011    source источник
comment
Одна идея, которая приходит на ум, состоит в том, чтобы создать столбец поиска, содержащий текст без знаков препинания и в нижнем регистре, и сравнить его. Полнотекстовый поиск, вероятно, действительно не будет работать должным образом   -  person Pekka    schedule 06.08.2011
comment
Посмотри на Сфинкса, может поможет.   -  person Dor    schedule 06.08.2011
comment
@Pekka: Чувак, почему я не подумал об этом! :D Это простое осознание того, чего я хотел достичь сложным путем. Я думаю, что лучше сделать это внутри MySQL, не так ли?   -  person Aufwind    schedule 06.08.2011
comment
@Aufwind на самом деле, я не уверен - я не могу придумать встроенную функцию mySQL, которая удаляет знаки препинания и тому подобное. Возможно, ваш язык сценариев или выбранная платформа могут сделать это проще, когда данные будут заполнены. Я сделаю комментарий ответом   -  person Pekka    schedule 06.08.2011


Ответы (1)


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

Если вы используете какой-либо другой язык или платформу в связи с mySQL, может быть проще всего выполнить нормализацию там - я не могу придумать встроенную функцию mySQL для удаления пунктуации и тому подобного. Это, безусловно, возможно, но только с использованием чертовски сложного набора REPLACE() вызовов.

person Pekka    schedule 06.08.2011