44
РАСПОЗНАЕМ ЯЗЫКИ НА LISP Антон Плешивцев aviasales.ru

2014.12.06 05 Антон Плешивцев — Разбираем естественные языки на Lisp'е

Embed Size (px)

Citation preview

РАСПОЗНАЕМ ЯЗЫКИ НА LISPАнтон Плешивцев

aviasales.ru

МЕТАПОИСК

МЕТАПОИСК

МЕТАПОИСК

МЕТАПОИСК

МЕТАПОИСК

NATURAL LANGUAGE PROCESSING

INFORMATION EXTRACTION

время 20:30

место большая вилла

день сегодня

дела мясо и пиво

SENTIMENT ANALYSIS

размер 7/10

удобство 9/10

камера 4/10

маркет 2/10

Телефон большеват, но удобно лежит в руке, камера удовлетворительная, пока приложений мало

MACHINE TRANSLATION

武⼠士の⼑刀のような剣のない侍が、剣なし

самурай без меча как самурай с мечом, только без меча

РЕШЕННЫЕ

• Определение спама

• Определение частей речи

• Определение сущностей

ДОСТАТОЧНО ХОРОШО РЕШЕННЫЕ

• Анализ предложений

• Машинный перевод

• Вытаскивание информации

ВСЕ СЛОЖНО

• Ответы на вопросы

• Перефразирование

• Обобщение

AVIASALES PROCESSING

AVIASALES PROCESSING

• из Мурманска в Краснодар 29 декабря

• из Москвы на Пхукет завтра

• Сыктывкар Омск 11.05 вдвоем

AVIASALES PROCESSING

из Мурманска в Краснодар 29 декабря

начало словадата (\d+\s+\w+)

вылет/прилет

AVIASALES PROCESSING

в Краснодар из Мурманска 29 декабря

AVIASALES PROCESSING

в краснодар из мурманска 29 декабря

AVIASALES PROCESSING

29 декабря в краснодар из мурманска

AVIASALES PROCESSINGTRUE WAY

TOKENIZE

в Краснодар из Мурманска 29 Декабря

[«в», «Краснодар», «из», «Мурманска», «29», «Декабря»]

CASE INSENSITIVE[«в», «Краснодар», «из», «Мурманска», «29», «Декабря»]

[«в», «краснодар», «из», «мурманска», «29», «декабря»]

STEMMING[«в», «краснодар», «из», «мурманска», «29», «декабря»]

[«в», «краснодар», «из», «мурманск», «29», «декабр»]

RECOGNIZE[«в», «краснодар», «из», «мурманска», «29», «декабря»]

[[«в», :to], [«краснодар», :city], [«из», :from], [«мурманск», :city], [«29», :digit], [«декабр», :month]]

RECOGNIZE

to city from city digit month

GRAMMAR

destination ::= to city

origin ::= from city

date ::= digit month

request ::= destination origin date

GRAMMAR

to city from city digit month

destination from city digit month

GRAMMAR

destination from city digit month

destination origin digit month

GRAMMAR

destination origin digit month

destination origin date

GRAMMAR

destination origin date

request

(CLOJURE)

The shape of a program should reflect only the problem it needs to solve. Paul Graham

TOKENIZE(defn tokenize [sentence] (->> sentence (split-tokens) (map lower-case) (map stem) (map recognize) (filter identity) vec))

STEMMING

Декабрьский -> ДекабрДекабря -> ДекабрДекабре -> Декабр

STEMMING

• Словари

• Алгоритмы

PORTER STEMMER1. Выделить часть rv (после первой гласной)

2. Удалить окончания причастия сов. вида (далее - прилагательное, глагол, существительное)

3. Если на конце «и» - удалить

4. Если заканчивается на «ост/ость» - удалить

5. Если есть «ейш/ейше» удалить

PORTER STEMMER

(def i #"и$")

(defn step-2 [word] (del word i))

PORTER STEMMER

(defn stem [word] (if (empty? (rv word)) word (-> word step-1 step-2 step-3 step-4a step-4b step-4c)))

GRAMMAR(defgrammar G ( ((:to :city) ::= (:destination (fn [to city] {:destination (get-iata city)}))) ((:from :city) ::= (:origin (fn [from city] {:origin (get-iata city)}))) ((:number :month) ::= (:date (fn [number month] {:date (str (day-to-dd number) (month-to-number month))})))

((:city :city :dates) ::= (:request (fn [origin destination dates] (merge {:origin (get-iata origin)} {:destination (get-iata destination)} dates)))) ) )

GRAMMAR

((:to :city) ::= (:destination (fn [to city] {:destination (get-iata city)})))

FINAL PROGRAM

(defn rec [phrase] (-> phrase tokenize (deduct G)))

FRONTEND

#React

#Om

#virtualdom#immutable

#persistent

#cursor#macro

#RAF

#clojurescript

ABOUT

АНТОН ПЛЕШИВЦЕВtwitter.com/allaud github.com/allaud

https://www.facebook.com/ant.pl.3

aviasales.ru