text in search queries with examples in perl 6

85
Using text in search queries with examples in Perl 6

Upload: andysh

Post on 15-Jan-2015

2.439 views

Category:

Technology


2 download

DESCRIPTION

1. Using Perl 5.10 for parsing search queries like "99 EUR in LVL". 2. Perl 6 grammars. 3. Gearman.

TRANSCRIPT

Page 1: Text in search queries with examples in Perl 6

Using textin search queries

with examplesin Perl 6

Page 2: Text in search queries with examples in Perl 6

It is aboutunderstanding

human language

Page 3: Text in search queries with examples in Perl 6

It is aboutunderstanding

human languageat a limited scale

Page 4: Text in search queries with examples in Perl 6
Page 5: Text in search queries with examples in Perl 6

whoyougle.com

Page 6: Text in search queries with examples in Perl 6

Perland

Wolfram|Alpha

Page 7: Text in search queries with examples in Perl 6

wolframalpha.com

Page 8: Text in search queries with examples in Perl 6
Page 9: Text in search queries with examples in Perl 6
Page 10: Text in search queries with examples in Perl 6
Page 11: Text in search queries with examples in Perl 6
Page 12: Text in search queries with examples in Perl 6
Page 13: Text in search queries with examples in Perl 6

Search queries

Italy

Page 14: Text in search queries with examples in Perl 6

Search queries

Pisa

Page 15: Text in search queries with examples in Perl 6

Search queries

10 miles in km

Page 16: Text in search queries with examples in Perl 6

Search queries

exchange rate of USD

Page 17: Text in search queries with examples in Perl 6

Search queries

rate of PHP

Page 18: Text in search queries with examples in Perl 6

Search queries

100 USD in EUR

Page 19: Text in search queries with examples in Perl 6

Search queries

100 £ in €

Page 20: Text in search queries with examples in Perl 6

Scanners (parsers)

Page 21: Text in search queries with examples in Perl 6

Scanners (parsers)

Page 22: Text in search queries with examples in Perl 6

100 £ in €Area.pm

Calendar.pm

Energy.pm

Force.pm

Length.pm

Money.pm

Mass.pm

Asking in parallel

Page 23: Text in search queries with examples in Perl 6

100 £ in €Area.pm

Calendar.pm

Energy.pm

Force.pm

Length.pm

Money.pm

Mass.pm

120.71

Page 24: Text in search queries with examples in Perl 6

Perl 5.10is great for parsing

Page 25: Text in search queries with examples in Perl 6

Perl 6is even more

Page 26: Text in search queries with examples in Perl 6

Named captures in 5.10’s regexes

Page 27: Text in search queries with examples in Perl 6

Grammarsin Perl 6

Page 28: Text in search queries with examples in Perl 6

Examples in Perl 5.10 (5.12)

Page 29: Text in search queries with examples in Perl 6

my $sentence = qr/ ^ (?: $Infolavka::Search::Grammar::how_many \s (?<to> $currency ) \s $Infolavka::Search::Grammar::convert \s (?: (?<amount> $Infolavka::Search::Grammar::number ) \s )? (?<from> $currency ) ) | (?: (?: (?<amount> $Infolavka::Search::Grammar::number ) \s )? (?<from> $currency ) \s $Infolavka::Search::Grammar::equal ) | (?: (?: $rate \s )? (?: (?<amount> $Infolavka::Search::Grammar::number ) \s? )? (?<from> $currency ) (?: \s (?: $Infolavka::Search::Grammar::convert \s )? (?<to> $currency ) )? ) $/xop;

Page 30: Text in search queries with examples in Perl 6

(?<amount> $Search::Grammar::number ) \s? )?(?<from> $currency)(?: \s (?: $Search::Grammar::convert \s )? (?<to> $currency ))?

Page 31: Text in search queries with examples in Perl 6

(?<amount> $Search::Grammar::number ) \s? )?(?<from> $currency)(?: \s (?: $Search::Grammar::convert \s )? (?<to> $currency ))?

Page 32: Text in search queries with examples in Perl 6

(?<amount> $Search::Grammar::number ) \s? )?(?<from> $currency)(?: \s (?: $Search::Grammar::convert \s )? (?<to> $currency ))?

100 £ in €

Page 33: Text in search queries with examples in Perl 6

(?<amount> $Search::Grammar::number ) \s? )?(?<from> $currency)(?: \s (?: $Search::Grammar::convert \s )? (?<to> $currency ))?

£

100

€in

Page 34: Text in search queries with examples in Perl 6

Examples in Perl 6

Page 35: Text in search queries with examples in Perl 6

grammar TestGrammar { rule TOP { ^ <sign>? <digit>+ $ } token sign { '-' | '+' }

token digit { <[0..9]> }}

Page 36: Text in search queries with examples in Perl 6

grammar TestGrammar { rule TOP { ^ <sign>? <digit>+ $ } token sign { '-' | '+' }

token digit { <[0..9]> }}

Page 37: Text in search queries with examples in Perl 6

grammar TestGrammar { rule TOP { ^ <sign>? <digit>+ $ } token sign { '-' | '+' }

token digit { <[0..9]> }}

Page 38: Text in search queries with examples in Perl 6

while my $string = prompt('> ') { if TestGrammar.parse($string) { say "OK"; } else { say "Failed"; }}

Page 39: Text in search queries with examples in Perl 6

grammar CurrencyGrammar { rule TOP { ^ <rate_question> $ } rule rate_question { 'rate of' <currency_code> } token currency_code { <[A..Z]> ** 3 }}

Page 40: Text in search queries with examples in Perl 6

my $result = CurrencyGrammar.parse($string); if $result { say "OK"; say $<rate_question><currency_code>; }

Page 41: Text in search queries with examples in Perl 6

grammar CurrencyGrammar { rule TOP { ^ <rate_question> $ } rule rate_question { 'rate of'? <currency_code> [<ws> 'to' <ws> <currency_code>]? } token currency_code { <[A..Z]> ** 3 }}

Page 42: Text in search queries with examples in Perl 6

my $result = CurrencyGrammar.parse($string); if $result { say "OK"; my ($from, $to) = $<rate_question><currency_code>; say "$from -> $to"; }

Page 43: Text in search queries with examples in Perl 6

grammar CurrencyGrammar { rule TOP { ^ <rate_question> $ } rule rate_question { 'rate of'? <ws> <money> [<ws> 'to' <currency_code>]? } rule money { [<value> <ws>]? $<code>=(<currency_code>) } token value { <[0..9]>+ } token currency_code { <[A..Z]> ** 3 }}

Page 44: Text in search queries with examples in Perl 6

say "OK"; my $value = $<rate_question><money><value> || 1; my $from = $<rate_question><money><code>; my $to = $<rate_question><currency_code> || 'EUR'; say "$value, $from -> $to";

Page 45: Text in search queries with examples in Perl 6

rule money { [<value> <ws>]? $<code>=(<currency_code>) }

Page 46: Text in search queries with examples in Perl 6

rule money { [<value> <ws>]? <code=currency_code> }

Page 47: Text in search queries with examples in Perl 6

my %rate = EUR => 1, USD => 0.7564, LVL => 1.4116, RUB => 0.02539, PHP => 0.01676, UAH => 0.09587;

my $codes = %rate.keys.join('|');say $codes;

Page 48: Text in search queries with examples in Perl 6

my $value = ~$<rate_question><money><value> || 1;my $from = $<rate_question><money><code>;my $to = $<rate_question><currency_code> || 'EUR';

my $ratio = 0 + %rate{~$from} / %rate{~$to}; say $ratio * $value;

Page 49: Text in search queries with examples in Perl 6

my $value = ~$<rate_question><money><value> || 1;my $from = $<rate_question><money><code>;my $to = $<rate_question><currency_code> || 'EUR';

my $ratio = 0 + %rate{~$from} / %rate{~$to}; say $ratio * $value;

:-/

Page 50: Text in search queries with examples in Perl 6

HTTP::Daemon

Rakudo Star

comes with

Page 51: Text in search queries with examples in Perl 6
Page 52: Text in search queries with examples in Perl 6
Page 53: Text in search queries with examples in Perl 6

Dispatching jobs with Gearman

Page 54: Text in search queries with examples in Perl 6

gearman.org

Page 55: Text in search queries with examples in Perl 6
Page 56: Text in search queries with examples in Perl 6

Originally written in Perl

Page 57: Text in search queries with examples in Perl 6

Rewritten in C

Page 58: Text in search queries with examples in Perl 6

Clients in Perl, PHP, Phython,

Java, C# (.NET)

Page 59: Text in search queries with examples in Perl 6

Clients in Perl, PHP, Phython,

Java, C# (.NET),even MySQL and PostgreSQL

Page 60: Text in search queries with examples in Perl 6

Application

Job

Page 61: Text in search queries with examples in Perl 6

Application

Job (or task)

Page 62: Text in search queries with examples in Perl 6

Application

Job

gearmand

Page 63: Text in search queries with examples in Perl 6

Application

Job

gearmand

Worker

Job

Page 64: Text in search queries with examples in Perl 6

Application

Job

gearmand

Worker

Job Response

Page 65: Text in search queries with examples in Perl 6

Application

gearmand

Worker

Worker

Worker

Page 66: Text in search queries with examples in Perl 6

Application

gearmand

Worker

Worker

gearmand

Page 67: Text in search queries with examples in Perl 6

Application

gearmand

Worker

Worker

gearmand

Application

Page 68: Text in search queries with examples in Perl 6

Workers are scalable

Page 69: Text in search queries with examples in Perl 6

Run any number you need

Page 70: Text in search queries with examples in Perl 6

Run on remote servers

Page 71: Text in search queries with examples in Perl 6

Application only talks with gearmand server

Page 72: Text in search queries with examples in Perl 6

Application only talks with gearmand server

(one or more)

Page 73: Text in search queries with examples in Perl 6

One or more application

Page 74: Text in search queries with examples in Perl 6

One or more application

Applications throw jobs

Page 75: Text in search queries with examples in Perl 6

One or more job servers

Page 76: Text in search queries with examples in Perl 6

One or more job servers

Job servers dispatch jobs

Page 77: Text in search queries with examples in Perl 6

One or more workers

Page 78: Text in search queries with examples in Perl 6

One or more workers(clones or different)

Page 79: Text in search queries with examples in Perl 6

One or more workers

Workers do jobs

Page 80: Text in search queries with examples in Perl 6

One or more workers

Workers do jobsand may issue new jobs

Page 81: Text in search queries with examples in Perl 6

Scalable also means redundant

Page 82: Text in search queries with examples in Perl 6

Really need Gearman?

Page 83: Text in search queries with examples in Perl 6

Really need Gearman?

No!

Page 84: Text in search queries with examples in Perl 6

Use HTTP servers instead

Page 85: Text in search queries with examples in Perl 6

__END__

Andrew Shitov

talks.shitov.ru | [email protected]