2015-02-04 3 views
1

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

http://postimg.org/image/p1xviagk7/

и здесь у меня есть все другие химические вещества, которые имеют немного разные имена, но они одинаковы. http://postimg.org/image/dyh76t08h/

есть много химических веществ с NULL ingredient_id

Например: Camelia является основным химическим названием. А в идеале я хочу написать код SQL, что если видит

ORGANIC Camelia Sinensis (белый чай) LEAF EXTRACT

или

CAMELIA SINENSIS (WHITE TEA) LEAF EXTRACT

группирует их под основным ингредиентом, который является Camelia.

Способ, которым это работает прямо сейчас, заключается в том, что если я вижу вещество с NULL component.inid, я просто ищу его аналогичное имя в основной папке с химическими названиями или другими веществами, а затем, если я его найду, я копирую идентификатор из найдено вещество и пасту в NULL component._id. У меня есть 30 тысяч веществ NULL для ингредиентов.

Есть ли какой-то код, который будет соответствовать веществам с NULL ингредиентом_ид с ​​другими веществами с похожими именами, а затем он каким-то образом скопирует их идентификатор ингредиента. Или он может искать в папке с основными химическими именами для аналогичных имен, и если найден, этот идентификатор будет найден.

Я провел некоторое исследование, и я обнаружил, что с использованием индекса Jaccard я могу решить эту проблему.

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

Просто обновление

Так что теперь я просто нужен код, который будет найти все подобные продукты с похожими названиями и сделать их ID равно. Можно ли это сделать?

+0

Вы можете попробовать поиск использование MySQL естественного языка [ссылка] (http://www.mysqltutorial.org/mysql-natural-language-search.aspx) для поиска продуктов с похожими именами и получения ингредиента для продукта с наилучшим соответствием. – tomcyr

ответ

0

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

create table #substances (s_name nvarchar(100)); 
create table #main_ingredients (mi_name nvarchar(100)); 
insert into #substances (s_name) values ('ORGANIC CAMELIA SINENSIS (WHITE TEA) LEAF EXTRACT'),('CAMELIA SINENSIS (WHITE TEA) LEAF EXTRACT'),('HIGH FRUCTOSE CORN SYRUP'),('WHEATFLOUR'); 
insert into #main_ingredients (mi_name) values ('Camelia'),('Fructose'), ('Wheat'); 

select mi_name, 
     s_name 
from #substances as S 
join #main_ingredients as M on 
S.s_name like '%'+mi_name+'%'; 

drop table #substances; 
drop table #main_ingredients; 
Смежные вопросы