Ние изучаваме графично-ориентираната СУБД Neo4j, използвайки примера на лексикалната база данни Wordnet, SavePearlHarbor

Още едно копие на пристанището

Главно меню

Навигация на публикации

Ние изучаваме графично ориентираната СУБД Neo4j, използвайки примера на лексикалната база на Wordnet

графично-ориентираната
СУБД Neo4j е NoSQL графично ориентирана база данни. Акцентът на продукта е декларативният език за заявки на Cypher.

Cypher заимства ключови думи като WHERE, ORDER BY от SQL; синтаксис от различни езици като Python, Haskell, SPARQL; и резултатът беше език, който ви позволява да правите заявки за графики във визуална форма като ASCII art. Например, бих представил заглавието на тази статия като графика(Neo4j) - [обучение] -> (Wordnet). И това е почти завършена заявка към базата данни!

Инсталиране на Neo4j

Процесът на инсталиране за различни операционни системи е описан на сайта. Целият софтуер, описан тук, е независим от платформата, но за категоричност всички инструкции ще бъдат за Debian/Ubuntu.

1. Добавяне на хранилище

2. Инсталирайте Neo4j (издание на общността)

Тази команда ще инсталира софтуера във вашата домашна директория и ще стартира услуга, която ще работи като потребител на neo4j.

3. Разрешете отдалечен достъп

Ако сте инсталирали Neo4j на вашия компютър, пропуснете тази стъпка. Ако имате нужда от достъп до сървъра от други компютри в локалната мрежа, редактирайте файла /var/lib/neo4j/conf/neo4j-server.properties

За достъп от всеки компютър в локалната мрежа задайте следните параметри:

Портът по подразбиране е 7474, можете да промените порта, като добавите ред към същия файл:

Инсталиране на клиент (Python)

За да импортираме базата данни на Wordnet в Neo4j, ще използваме скрипт на Python.

1. Първо трябва да инсталирате библиотеката py2neo

2. Изтеглете моя скрипт от github

Касова бележкаwordnet лексикална база данни

  • Най-новата версия на англоезичната база данни Wordnet е достъпна на линка
  • Предишни версии (напр. за съвместимост с ImageNet)
  • Предлагам да изтеглите българската версия от wordnet.ru

Разархивирайте файловете на достъпно място.

Импортиране на данни в Neo4j

Лексикалните данни в Wordnet се съхраняват във файлове по части на речта. Например съществителните имена са във файла data.noun; глаголи - в data.verb; С други части на речта не съм пробвала.

1. Внасяне на съществителни

За да импортирате съществителни, отидете в директорията, в която поставихте моите скриптове (току-що я нарекохме habrawordnet2neo4j) и изпълнете командата в конзолата:

Нека разгледаме параметрите по-подробно.

2. Вносни глаголи

За да импортирате глаголи, изпълнете командата в конзолата:

Не е необходимо да се внасят глаголи, въпреки че някои от тях са свързани със съществителни и са интересни за научаване.

3. Уверете се, че данните са импортирани

Ако получите изображение на графика на екрана, значи всичко е минало добре.

Изпълнение на прости заявки

Всички по-нататъшни действия ще се извършват в браузъра, в конзолата Neo4j. Предполагам, че сте използвали Ruswordnet като етикети на възли и Pointer като тип край (както е посочено в предишния раздел). И че си импортирал точно българската Wordnet база данниизцяло.

1. Здравей свят

Както се посочва на сайта на българската база данни Wordnet, около половината от семантичните единици, съдържащи най-често използваните думи, са преведени. Затова нека се опитаме да намерим първото нещо, което ви дойде наум в базата данни:

Пуснете запитване, уверете се, че това понятие е намерено, което означава, че според българските лингвисти е едно от най-често използваните. Нека даНека да разгледаме тази проста заявка.

Ключовата думаMATCHозначава приблизително същото като SELECT в SQL. Грубо казано, „намерете елементи на графиката, съответстващи на шаблона“.

Скобите обозначават възлите на графиката. Моделът(n:Ruswordnet)ще покаже, че искаме да намерим всички възли с надпис "Ruswordnet". Тукnе идентификатор, можете да кажете "променлива".

Графичните възли (и ръбовете също) могат да бъдат снабдени с произволни атрибути. За да намерим конкретен възел, задаваме условие за атрибути в заявката във формат, подобен на JSON:. Така фраза

означава, че всички възли с етикета Ruswordnet и атрибута име, равен на посочената там концепция, ще бъдат избрани от цялата графика.

Ключовата думаRETURNни казва кои променливи ни интересуват. В този случай ние просто искахме да видим възела(ите), които отговарят на дадените условия, така че пишемRETURN n. Важно е да се разбере, чеnе колекция от възли, които съответстват на заявката. За да проверите това, просто заменете концепцията в заявката:

Ако сте импортирали цялата база данни на Wordnet, ще видите шест концептуални възела на лъва. Да видим защо.

2. Променливи = Колекции

Нека изпълним следната заявка:

Тук вече сме задали по-сложен модел на търсене. Искаме да намерим всички(n)възли, съответстващи на понятието "лъв", както и всички(m)възли, свързани с лъвове. Връзка, т.е. край на графика, се обозначава с две тирета. Можете изрично да посочите посоката, която ни интересува, със символа -> (това нарекох ASCII изкуство).

графично-ориентираната

Ако не виждате имената на семантичните единици, щракнете върху бутона Ruswordnet(23) в горния ляв ъгъл на графиката и в лентата на състоянието в долната част на конзолата изберете „име“ в полето Надпис. Така ще е по-ясно.

Сегаразбрахме, че това е лъв, оказва се не само българската валута (bulgarian_money), за която стотинката е стотинка, но и голяма котка, и съзвездие, астрологичен знак и нещо, свързано с прайда.

3. Свържете краищата

Ръбовете се наричат ​​указатели в Wordnet и има много използвани типове лингвистични указатели. Те са обозначени със символи, някои от които давам в таблицата:

По време на процеса на импортиране присвоихме атрибута pointer_symbol на ръбовете на графиката и сега можем да правим заявки въз основа на атрибутите на ръбовете. Нека разберем какво е обобщение (хипернум):

Квадратните скоби означават спецификации на ръба. В тази заявка искаме да намерим ръбове от тип Pointer, чийто атрибут pointer_symbol е "@", т.е. заместващ знак. Между другото, обратното на обобщението е символът за усъвършенстване "

субд

Сега е ясно, че обобщението за лъв е котка, както и човек. Разбира се, говорим за различни семантични единици: лъвът (котка) е един възел на графиката, а лъвът (човек) е друг възел, съответстващ на знака на зодиака. Лев (слава) е резултат от лош превод на български; означаващ лъв (знаменитост), т.е. знаменитост, светски лъв.

Нека разберем каква част е холонимът:

И сега е ясно: лъвът влиза в зодиака като неразделна част, което означава, че зодиакът е част от холонима на лъва.

От таблицата може да се види, че Wordnet съдържа много интересни връзки, например от какви вещества какво е направено. За съжаление няма информация, че лъвът е направен от месо, така че нека поставим въпроса по различен начин: намерете такива възли на графиката, които са свързани с връзката „от какво вещество е направен“.

В тази заявка ние не налагаме никакви условия на възлите(n)и(m). Искаме само да сме вързаниръбове с атрибута "#s". Имайте предвид, че се появи ключовата думаLIMIT, позната ни от SQL. Ако не беше тук, сървърът щеше да ни върне много резултати и това би било лошо за нашия браузър.

В резултат на запитването разбрахме, че цигарите се правят от марихуана, а супата от волски опашки.

4. Вериги с произволна дължина

В детството всички са играли на тази игра: превърнете мухата в слон. За да направите това, беше необходимо да промените една буква в думата, докато думата FLY се превърна в думата ELEPHANT. Нека разберем в лексикалната графика дали ЛЪВ и ОВЦА са свързани.

Конструкцията[p:Pointer*1..3]гласи, че е необходимо да се намери верига от ръбове тип Pointer с дължина от едно до три, свързващи възела „лъв“ с възела „овца“.

neo4j

Това е различна от класическата детска игра, но и интересна: ОВЦА - ПРОСТ - ЧОВЕК - ЛЪВ ... звучи гордо. Между другото, можете да опитате да намерите връзка между муха и слон, просто леко увеличете максималната дължина на веригата. Използвах стойността 6. Между другото, не се опитвайте да зададете 100 веднага - процесът на търсене най-вероятно ще се провали, защото броят на опциите за итериране на пътища в графиката ще бъде твърде голям. И така, ето как слонът и мухата са свързани лексикално:

Мисля, че на този етап сте разбрали много за базата данни Neo4j и сте в състояние самостоятелно да откриете много интересни неща в базата данни Wordnet или можете да приложите Neo4j във вашите проекти. Използваме връзката Neo4j c Wordnet в търсачката на филмовите архиви. Ако искате да правите изследвания в областта на машинното обучение, каня ви на стаж или постоянна работа в НИКФИ, изследователски институт за филми и фотографии.