Proszę o przekazywanie wsparcia w ramach 1 proc. podatku dla Krzysia Bulczaka, największego bohatera, jakiego znam. KRS 0000037904 z dopiskiem 20374 Bulczak Krzysztof

Prosta i szybka lematyzacja w R z wykorzystaniem usług Clarin

Konsorcjum Clarin udostępnia interfejs programistyczny, pozwalający na zdalne przetwarzanie dokumentów tekstowych. Można swobodnie wykorzystać te usługi do pracy z tekstem w R. Oto prosty sposób na sprowadzanie do wspólnej, podstawowej postaci wyrazów z wektora (czyli – w dużym skrócie – wskazanie lematów, podstawowych form hasłowych). Dzięki temu jesteśmy w stanie np. przygotować dobrą statystykę wyrazów czy wygenerować poprawną chmurę słów kluczowych dla tekstu.

Poniższy przykład wykorzystuje tager WCRFT. Tager to narzędzie, które dzieli tekst na wyrazy i dla każdego rozpoznaje określone właściwości gramatyczne.

getLemma <- function(t,u) {
  library(httr)
  library(xml2)
  p <- list(lpmn="any2txt|wcrft2",text=t,user=u)
  s <- POST("http://ws.clarin-pl.eu/nlprest2/base/process", body = p, encode = "json", verbose())
  r <- content(s, "text")
  r <- gsub('[[:punct:] ]+','',unlist(as_list(xml_find_all(read_xml(r),"//base"))))
  return(r[r != ""])
}

Źródło: GitHub

Jak to działa? Funkcja korzysta z pakietów xml2 (przetwarzanie danych w xml) i httr (komunikacja z API). Przyjmuje dwa argumenty: t – wektor z tekstem do przetworzenia i u – adres email, wymagany przez API do identyfikacji użytkownika. API przyjmuje tekst w postaci JSON i zwraca wynik w XML. Struktura opisu wyrazu wygląda tak:

<tok>
       <orth>naturalnego</orth>
        <lex disamb="1">
          <base>naturalny</base>
          <ctag>adj:sg:gen:m1:pos</ctag>
        </lex>
</tok>

Ponieważ nie interesują mnie tu informacje gramatyczne dotyczące każdego wyrazu (a tylko jego podstawowa postać), za pomocą xml_find_all filtruję gałęzie otrzymanego XMLa zapytaniem w języku XPath. Użycie gsub i wzorca wyrażeń regularnych (BRE) usuwa z otrzymanego wektora wszystkie znaki interpunkcyjne.

Przykładowy efekt dla fragmentu przemówienia Andrzeja Dudy:

W maju mięło 13 lat od momentu przystąpienia Polski do Unii Europejskiej. Było to wydarzenie absolutnie przełomowe. Jego historyczny charakter bierze się z faktu, że to właśnie w 2004 roku nastąpiło realne zjednoczenie Europy. Polegało ono na likwidacji trwającego od zakończenia II wojny światowej podziału Starego Kontynentu na część zachodnią i wschodnią.

I odpowiedź:

[1] "w"             "maj"           "miąć"          "13"            "lato"          "od"           
[7] "moment"        "przystąpienie" "Polska"        "do"            "unia"          "europejski"   
[13] "być"           "to"            "wydarzenie"    "absolutnie"    "przełomowy"    "on"           
[19] "historyczny"   "charakter"     "brać"          "się"           "z"             "fakt"         
[25] "że"            "to"            "właśnie"       "w"             "2004"          "rok"          
[31] "nastąpić"      "realny"        "zjednoczenie"  "Europa"        "polegać"       "on"           
[37] "na"            "likwidacja"    "trwać"         "od"            "zakończenie"   "II"           
[43] "wojna"         "światowy"      "podział"       "stare"         "kontynent"     "na"           
[49] "część"         "zachodni"      "i"             "wschodni"     

Warto zwrócić uwagę na to, że w wyniku pojawił się wyraz miąć – poprawnie, bo w oryginalnym tekście mamy literówkę mięło 13 lat zamiast minęło 13 lat.

Usługa działa synchronicznie i jest przeznaczona do przetwarzania krótkich tekstów. Można je także automatycznie opracowywać z wykorzystaniem tagera przeglądarkowego.

Udostępnij na na Twitterze | Udostępnij na Facebooku

Przeczytaj także