2015-05-01 1 views
1

У меня есть большое количество строк, содержащих название продукта и несколько других свойств (размер, объем, возраст и т. Д.). Но строки не стандартизированы вообще. Названия продуктов могут быть написаны с ошибками, объем может отличаться от нотации (0,5 л, 1/2 литра, 500 мл и т. Д.). Количество вариаций ограничено, хотя, например, всего несколько сотен продуктов. Какие инструменты я могу использовать для анализа каждой строки и сказать мне, содержит ли она определенные токены? Я предполагаю, что какой-то механизм обучения будет полезен, но я не уверен, какие инструменты будут предлагать именно это. Я посмотрел на ElasticSearch, но я не уверен, что это путь. Все мои данные в настоящее время находятся в базе данных PostgreSQL, и я также посмотрел на pg_grm. Опять же, не уверен, что это соответствует моей потребности.Нечеткое соответствие строк: какой инструмент?

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

EDIT Вот несколько примеров строк я пытаюсь извлечь ключевые слова из:

wine Bardolo red 1L 12b 12% 
La Tulipe, 13* box 3 bottles, 2005 
Great Johnny Walker 7CL 22% red label 
Wisky Jonny Walken .7 Red limited editon 

Я уже довольно много искал, но еще не нашел подходящего способа решения этой проблемы.

+0

Возможно, анализ всей строки в виде ngram с использованием токенизатора 'ngram' будет работать для вас с помощью Elasticsearch? Это позволит нечеткое согласование подслов. –

+0

Может быть, но я думаю, что мне нужно подстрочное нечеткое совпадение вместо подгоночного нечеткого соответствия. Будет ли это работать? –

ответ

0

Я использовал расширение pg_trgm для аналогичной задачи (я сравнивал орфографические строки с орфографическими ошибками и названия компаний) вместе с алгоритмом кластеризации (может быть не нужен в вашем случае).

Это проделанная работа с некоторыми препаратами данных (регулярные замены). Может быть, не очень легко, но я уверен, что можно решить и вашу проблему. И поддержка индексов в pg_trgm отличная.

+0

Спасибо, но адреса имеют несколько похожий порядок слов. В моем случае «токены», которые я ищу, могут быть в любом месте строки (и тоже написаны неправильно). –