Thanks to visit codestin.com
Credit goes to www.slideshare.net

РАСПОЗНАЕМ ЯЗЫКИ НА 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 PROCESSING 
TRUE 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 
destination from city digit month 
to city from city digit month
GRAMMAR 
destination origin digit month 
destination from city digit month
GRAMMAR 
destination origin date 
destination origin digit month
GRAMMAR 
request 
destination origin date
(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 STEMMER 
1. Выделить часть 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

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