• Nie Znaleziono Wyników

Przetwarzanie języka w praktyce, na przykładzie problemu rozstrzygania wieloznaczności

N/A
N/A
Protected

Academic year: 2021

Share "Przetwarzanie języka w praktyce, na przykładzie problemu rozstrzygania wieloznaczności"

Copied!
35
0
0

Pełen tekst

(1)

Przetwarzanie j ˛ezyka w praktyce, na

przykładzie problemu rozstrzygania

wieloznaczno´sci

Aleksander Pohl http://apohllo.pl

Katedra Informatyki, Akademia Górniczo-Hutnicza

(2)

Plan prezentacji

Okre ´slenie celu

Wymagania

Ferret

(3)

Cel

Podstawowy cel:

Obsługa fleksji w napisanej w Ruby bibliotece Ferret,

b ˛ed ˛acej portem Apache Lucene.

Po co?

◮ Wyszukiwanie pełnotekstowe na polskoj ˛ezycznych stronach WWW

Co ´s wi ˛ecej?

(4)

Cel

Podstawowy cel:

Obsługa fleksji w napisanej w Ruby bibliotece Ferret,

b ˛ed ˛acej portem Apache Lucene.

Po co?

◮ Wyszukiwanie pełnotekstowe na polskoj ˛ezycznych

stronach WWW

Co ´s wi ˛ecej?

(5)

Cel

Podstawowy cel:

Obsługa fleksji w napisanej w Ruby bibliotece Ferret,

b ˛ed ˛acej portem Apache Lucene.

Po co?

◮ Wyszukiwanie pełnotekstowe na polskoj ˛ezycznych

stronach WWW Co ´s wi ˛ecej?

(6)

Wymagania

Interpreter Rubiego (lub Pythona):ruby-lang.org

Biblioteka Morfeusz (alternatywnie: CLP, fsa_morph): nlp.ipipan.waw.pl/∼wolinski/←֓

morfeusz/morfeusz.html

gem RubyInline (dla Pythona - niepotrzebne)gem ferret (dla Pythona - lupy)

binding Ruby - Morfeusz:

apohllo.pl/src/morfeusz.rb ◮ binding Python - Morfeusz:

students.mimuw.edu.pl/∼jw209508/←֓ nlp/morfeusz.py

(7)

Wymagania

Interpreter Rubiego (lub Pythona):ruby-lang.org

Biblioteka Morfeusz (alternatywnie: CLP, fsa_morph):

nlp.ipipan.waw.pl/∼wolinski/←֓

morfeusz/morfeusz.html

gem RubyInline (dla Pythona - niepotrzebne)gem ferret (dla Pythona - lupy)

binding Ruby - Morfeusz:

apohllo.pl/src/morfeusz.rb ◮ binding Python - Morfeusz:

students.mimuw.edu.pl/∼jw209508/←֓ nlp/morfeusz.py

(8)

Wymagania

Interpreter Rubiego (lub Pythona):ruby-lang.org

Biblioteka Morfeusz (alternatywnie: CLP, fsa_morph):

nlp.ipipan.waw.pl/∼wolinski/←֓

morfeusz/morfeusz.html

gem RubyInline (dla Pythona - niepotrzebne)

gem ferret (dla Pythona - lupy)binding Ruby - Morfeusz:

apohllo.pl/src/morfeusz.rb ◮ binding Python - Morfeusz:

students.mimuw.edu.pl/∼jw209508/←֓ nlp/morfeusz.py

(9)

Wymagania

Interpreter Rubiego (lub Pythona):ruby-lang.org

Biblioteka Morfeusz (alternatywnie: CLP, fsa_morph):

nlp.ipipan.waw.pl/∼wolinski/←֓

morfeusz/morfeusz.html

gem RubyInline (dla Pythona - niepotrzebne)

gem ferret (dla Pythona - lupy)

binding Ruby - Morfeusz:

apohllo.pl/src/morfeusz.rb ◮ binding Python - Morfeusz:

students.mimuw.edu.pl/∼jw209508/←֓ nlp/morfeusz.py

(10)

Wymagania

Interpreter Rubiego (lub Pythona):ruby-lang.org

Biblioteka Morfeusz (alternatywnie: CLP, fsa_morph):

nlp.ipipan.waw.pl/∼wolinski/←֓

morfeusz/morfeusz.html

gem RubyInline (dla Pythona - niepotrzebne)

gem ferret (dla Pythona - lupy)

binding Ruby - Morfeusz:

apohllo.pl/src/morfeusz.rb

binding Python - Morfeusz:

students.mimuw.edu.pl/∼jw209508/←֓

(11)

Indeksu

1: require ’ferret’ 2: include Ferret

3: index = Index::Index.new(:path => ”./index”) 4: index « {:id => 1, :content => ”Ala ma kota”} 5: index « {:id => 2, :content => ”To kot a to Ala”} 6: index.flush

5: index.search_each(”Ala”) do |id,score|

7: puts ”Dokument #{id}: #{score}”

8: highlights = index.

9: highlight(query,id, :field => :content,

10: :pre_tag => ”\033[36m”,

11: :post_tag => ”\033[m”)

12: puts highlights 12: end

(12)

Indeksu

1: require ’ferret’ 2: include Ferret

3: index = Index::Index.new(:path => ”./index”) 4: index « {:id => 1, :content => ”Ala ma kota”} 5: index « {:id => 2, :content => ”To kot a to Ala”} 6: index.flush

5: index.search_each(”Ala”) do |id,score| 7: puts ”Dokument #{id}: #{score}” 8: highlights = index.

9: highlight(query,id, :field => :content, 10: :pre_tag => ”\033[36m”,

11: :post_tag => ”\033[m”) 12: puts highlights

(13)

Indeksu

1: require ’ferret’ 2: include Ferret

3: index = Index::Index.new(:path => ”./index”) 4: index « {:id => 1, :content => ”Ala ma kota”} 5: index « {:id => 2, :content => ”To kot a to Ala”} 6: index.flush

5: index.search_each(”Ala”) do |id,score| 7: puts ”Dokument #{id}: #{score}” 8: highlights = index.

9: highlight(query,id, :field => :content, 10: :pre_tag => ”\033[36m”,

11: :post_tag => ”\033[m”) 12: puts highlights

(14)

Indeksu

1: require ’ferret’ 2: include Ferret

3: index = Index::Index.new(:path => ”./index”) 4: index « {:id => 1, :content => ”Ala ma kota”} 5: index « {:id => 2, :content => ”To kot a to Ala”} 6: index.flush

5: index.search_each(”Ala”) do |id,score| 7: puts ”Dokument #{id}: #{score}” 8: highlights = index.

9: highlight(query,id, :field => :content, 10: :pre_tag => ”\033[36m”,

11: :post_tag => ”\033[m”) 12: puts highlights

(15)

Analizator

1: class PolishLexer < Analysis::TokenStream

2: end

3: class MyAnalyzer < Analysis::Analyzer 4: def token_stream(field, str)

5: return PolishLexer.new(

6: Analysis::LowerCaseFilter.new(

7: Analysis::StandardTokenizer.new(str))))

8: end

9: end

10: index = Index::Index.new(:path => ”./index”, 11: :analyzer => MyAnalyzer.new)

(16)

Analizator

1: class PolishLexer < Analysis::TokenStream

2: end

3: class MyAnalyzer < Analysis::Analyzer 4: def token_stream(field, str)

5: return PolishLexer.new(

6: Analysis::LowerCaseFilter.new(

7: Analysis::StandardTokenizer.new(str))))

8: end

9: end

10: index = Index::Index.new(:path => ”./index”, 11: :analyzer => MyAnalyzer.new)

(17)

Analizator

1: class PolishLexer < Analysis::TokenStream

2: end

3: class MyAnalyzer < Analysis::Analyzer 4: def token_stream(field, str)

5: return PolishLexer.new(

6: Analysis::LowerCaseFilter.new(

7: Analysis::StandardTokenizer.new(str))))

8: end

9: end

10: index = Index::Index.new(:path => ”./index”, 11: :analyzer => MyAnalyzer.new)

(18)

Lexer

1: class PolishLexer < Analysis::TokenStream 2: def initialize(stream)

3: @stream = stream

4: end

5: def next

6: @stream.next

7: end

8: def text=(content)

9: @stream.text = content

10: end

(19)

Lexer – next

1: class PolishLexer < Analysis::TokenStream

2: def next

3: token = @stream.next

4: if !token.nil?

5: deflected = deflect(token.text)

6: case deflected

7: when String

8: token.text = deflected

9: when Array

10: token.text = deflected[0]

11: end

12: end

13: token

14: end

(20)

Lexer – deflect

1: Lexeme = Apohllo::Morfeusz::Lexeme

2: class PolishLexer < Analysis::TokenStream

3: private

4: def deflect(text)

5: lexemes = Lexeme.find(text) 6: if lexemes.size > 0

7: lexemes.collect{|l| l.base_form}.uniq

8: else

9: text

10: end

11: end

(21)

Czy to rozwi ˛

azanie jest zadowalaj ˛

ace?

»Nasza reprezentacja zdobyła sze ´s´c goli.«

nasza: 2 formy podstawowe: nasz, nasza ´cgoli: 3 formy podstawowe: gol, goli´c, goły

W naszym rozwi ˛azaniu brana jest tylko pierwsza forma

podstawowa!

when Array : token.text = deflected[0]

Rozwi ˛azanie: umie ´sci´c w indeksie wszystkie formy

(22)

Wszystkie formy

1: class PolishLexer < Analysis::TokenStream

2: def next

3: unless @my_tokens.nil? or @my_tokens.empty? 4: return @my_tokens.shift

5: end

6: case deflected

7: when Array

8: token.text = deflected[0]

9: @my_tokens = deflected.

10: collect{|d| Analysis::

11: Token.new(d,token.start,token.end)}

12: end

13: end

(23)

Czy to ju˙z koniec?

◮ Zeby rozwi ˛˙ azanie działało poprawnie, konieczne byłoby

modyfikowanie równie ˙z zapytania tak, aby uwzgl ˛edniało ten specyficzny przypadek.

◮ W istocie cz ˛e ´sciowo jest to zapewnione – je ´sli

wprowadzimy inn ˛a form ˛e, która posiada t ˛e sam ˛a form ˛e podstawow ˛a, to wszystko dzieje si ˛e wła ´sciwie.

◮ Jednak w przypadku gdy podamy dokładnie t ˛e form ˛e – goli, nie otrzymamy wyników gdzie b ˛edzie wyst ˛epowało słowo gol, golił, ani goły.

◮ A mo ˙ze powinni´smy inaczej podej´s´c do problemu? Przecie ˙z tylko jedna forma podstawowa jest poprawna: gol! Ale jak j ˛a wybra ´c?

(24)

Czy to ju˙z koniec?

◮ Zeby rozwi ˛˙ azanie działało poprawnie, konieczne byłoby

modyfikowanie równie ˙z zapytania tak, aby uwzgl ˛edniało ten specyficzny przypadek.

◮ W istocie cz ˛e ´sciowo jest to zapewnione – je ´sli

wprowadzimy inn ˛a form ˛e, która posiada t ˛e sam ˛a form ˛e podstawow ˛a, to wszystko dzieje si ˛e wła ´sciwie.

◮ Jednak w przypadku gdy podamy dokładnie t ˛e form ˛e – goli, nie otrzymamy wyników gdzie b ˛edzie wyst ˛epowało słowo gol, golił, ani goły.

◮ A mo ˙ze powinni´smy inaczej podej´s´c do problemu? Przecie ˙z tylko jedna forma podstawowa jest poprawna: gol! Ale jak j ˛a wybra ´c?

(25)

Czy to ju˙z koniec?

◮ Zeby rozwi ˛˙ azanie działało poprawnie, konieczne byłoby

modyfikowanie równie ˙z zapytania tak, aby uwzgl ˛edniało ten specyficzny przypadek.

◮ W istocie cz ˛e ´sciowo jest to zapewnione – je ´sli

wprowadzimy inn ˛a form ˛e, która posiada t ˛e sam ˛a form ˛e podstawow ˛a, to wszystko dzieje si ˛e wła ´sciwie.

◮ Jednak w przypadku gdy podamy dokładnie t ˛e form ˛e –

goli, nie otrzymamy wyników gdzie b ˛edzie wyst ˛epowało

słowo gol, golił, ani goły.

◮ A mo ˙ze powinni´smy inaczej podej´s´c do problemu? Przecie ˙z tylko jedna forma podstawowa jest poprawna: gol! Ale jak j ˛a wybra ´c?

(26)

Czy to ju˙z koniec?

◮ Zeby rozwi ˛˙ azanie działało poprawnie, konieczne byłoby

modyfikowanie równie ˙z zapytania tak, aby uwzgl ˛edniało ten specyficzny przypadek.

◮ W istocie cz ˛e ´sciowo jest to zapewnione – je ´sli

wprowadzimy inn ˛a form ˛e, która posiada t ˛e sam ˛a form ˛e podstawow ˛a, to wszystko dzieje si ˛e wła ´sciwie.

◮ Jednak w przypadku gdy podamy dokładnie t ˛e form ˛e –

goli, nie otrzymamy wyników gdzie b ˛edzie wyst ˛epowało

słowo gol, golił, ani goły.

◮ A mo ˙ze powinni´smy inaczej podej´s´c do problemu?

Przecie ˙z tylko jedna forma podstawowa jest poprawna:

(27)

Mo˙zliwe rozwi ˛

azania – gramatyka 1

◮ Wykorzystanie zale ˙zno ´sci gramatycznych:

»..zdobyła (kogo? co?) sze ´s´c (kogo? czego?) goli.«

◮ Na ostatnim miejscu oczekujemy rzeczownika w dopełniaczu. Spo ´sród słów: gol, goli´c, goli; tylko pierwsze jest rzeczownikiem.

Problem: ˙zeby okre ´sli´c to wymaganie musimy wcze ´sniej zna ´c wła ´sciwy opis morfosyntaktyczny elementów znajduj ˛acych si ˛e w kontek´scie danego słowa. Zwykle opisy te nie s ˛a jednoznaczne.

(28)

Mo˙zliwe rozwi ˛

azania – gramatyka 1

◮ Wykorzystanie zale ˙zno ´sci gramatycznych:

»..zdobyła (kogo? co?) sze ´s´c (kogo? czego?) goli.«

◮ Na ostatnim miejscu oczekujemy rzeczownika

w dopełniaczu. Spo ´sród słów: gol, goli´c, goli; tylko pierwsze jest rzeczownikiem.

Problem: ˙zeby okre ´sli´c to wymaganie musimy wcze ´sniej zna ´c wła ´sciwy opis morfosyntaktyczny elementów znajduj ˛acych si ˛e w kontek´scie danego słowa. Zwykle opisy te nie s ˛a jednoznaczne.

(29)

Mo˙zliwe rozwi ˛

azania – gramatyka 1

◮ Wykorzystanie zale ˙zno ´sci gramatycznych:

»..zdobyła (kogo? co?) sze ´s´c (kogo? czego?) goli.«

◮ Na ostatnim miejscu oczekujemy rzeczownika

w dopełniaczu. Spo ´sród słów: gol, goli´c, goli; tylko pierwsze jest rzeczownikiem.

Problem: ˙zeby okre ´sli´c to wymaganie musimy wcze ´sniej

zna ´c wła ´sciwy opis morfosyntaktyczny elementów

znajduj ˛acych si ˛e w kontek´scie danego słowa. Zwykle

(30)

Mo˙zliwe rozwi ˛

azania – gramatyka 2

Dla zdania:

Nie ma rzeczy bardziej zwykłej i naturalnej ni˙z to, ˙ze ludzie, którzy maj ˛a roszczenie, i˙z odkryli jak ˛a ´s rzecz now ˛a w ´swiecie filozofii i nauk, sugeruj ˛a innym, by chwalili ich własne systemy, osławiaj ˛ac jednocze ´snie wszystkie te, które powstały wcze ´sniej.

(31)

Mo˙zliwe rozwi ˛

azania – semantyka

»Nasza reprezentacja zdobyła sze ´s´c goli.«

Zdoby´c mo ˙zna: Mount Everest, kobiet ˛e, gol, ale nie gołych ani goli´c (to nie ma sensu!).

◮ Zale ˙zno ´sci semantyczne s ˛a znacznie bardziej specyficzne ni˙z zale ˙zno ´sci gramatyczne, dlatego łatwo mo ˙zna

zredukowa ´c liczb ˛e mo ˙zliwych interpretacji. ◮ Problem: stworzenie słownika, który zawierałby

wystarczaj ˛aco dokładne opisy słów – bardzo

czasochłonne, nie wiadomo, kiedy opis jest wystarczaj ˛aco dobry.

(32)

Mo˙zliwe rozwi ˛

azania – semantyka

»Nasza reprezentacja zdobyła sze ´s´c goli.«

Zdoby´c mo ˙zna: Mount Everest, kobiet ˛e, gol, ale nie gołych

ani goli´c (to nie ma sensu!).

◮ Zale ˙zno ´sci semantyczne s ˛a znacznie bardziej specyficzne ni˙z zale ˙zno ´sci gramatyczne, dlatego łatwo mo ˙zna

zredukowa ´c liczb ˛e mo ˙zliwych interpretacji. ◮ Problem: stworzenie słownika, który zawierałby

wystarczaj ˛aco dokładne opisy słów – bardzo

czasochłonne, nie wiadomo, kiedy opis jest wystarczaj ˛aco dobry.

(33)

Mo˙zliwe rozwi ˛

azania – semantyka

»Nasza reprezentacja zdobyła sze ´s´c goli.«

Zdoby´c mo ˙zna: Mount Everest, kobiet ˛e, gol, ale nie gołych

ani goli´c (to nie ma sensu!).

◮ Zale ˙zno ´sci semantyczne s ˛a znacznie bardziej specyficzne

ni˙z zale ˙zno ´sci gramatyczne, dlatego łatwo mo ˙zna zredukowa ´c liczb ˛e mo ˙zliwych interpretacji.

Problem: stworzenie słownika, który zawierałby wystarczaj ˛aco dokładne opisy słów – bardzo

czasochłonne, nie wiadomo, kiedy opis jest wystarczaj ˛aco dobry.

(34)

Mo˙zliwe rozwi ˛

azania – semantyka

»Nasza reprezentacja zdobyła sze ´s´c goli.«

Zdoby´c mo ˙zna: Mount Everest, kobiet ˛e, gol, ale nie gołych

ani goli´c (to nie ma sensu!).

◮ Zale ˙zno ´sci semantyczne s ˛a znacznie bardziej specyficzne

ni˙z zale ˙zno ´sci gramatyczne, dlatego łatwo mo ˙zna zredukowa ´c liczb ˛e mo ˙zliwych interpretacji.

Problem: stworzenie słownika, który zawierałby

wystarczaj ˛aco dokładne opisy słów – bardzo

czasochłonne, nie wiadomo, kiedy opis jest wystarczaj ˛aco

(35)

Koniec

Cytaty

Powiązane dokumenty

(schab ze śliwką i morelą, boczek, galantyna drobiowa) Deska serów. (sery pleśniowe, ser lazur, ser wędzony) Ryba

Wędliny z domowej spiżarni: kiełbasy, szynki, kaszanka, pasztet, smalec i ogórki, chleb wiejski.

Uzupełnienie ścian lub zamurowanie otworów o objętości do 2,0 m3 w jednym miejscu, bloczkami z betonu komórkowego na zaprawie cementowowapiennej,przy użyciu

wojewódzkiej nr 793 ul. Oferujemy wykonanie zamówienia za cenę netto ... Przyjmujemy do realizacji postawione przez zamawiającego, w zapytaniu ofertowym warunki. W przypadku

Projekt współfinansowany z Europejskiego Funduszu Rozwoju Regionalnego w ramach Regionalnego Programu Operacyjnego Województwa Małopolskiego na lata 2014-2020, 1 Oś

tive on the Mission, adding M.. His main advice was that the Mission should on no account omit to-be accompanied by aeroplanes. Ordinary prudence demanded that we should

[r]

Fontanna czekoladowa *minimum 30 osób czekolada mleczna + owoce sezonowe i pianki Cena: 12 zł x ilość gości weselnych..