ptstem

Stemming Algorithms for the Portuguese Language

OTHER License

Stars
21
Committers
2

ptstem

Stemming Algorithms for the Portuguese Language

This packages wraps 3 stemming algorithms for the portuguese language available in R. It unifies the API for the stemmers and provides easy stemming completion.

Installing

You can install directly from Github using:

devtools::install_github("dfalbel/ptstem")

or from CRAN using:

install.packages("ptstem")

Using

Consider the following text, extracted from Stemming in Wikipedia

text <- "Em morfologia lingustica e recuperao de informao a stemizao (do ingls, stemming) 
o processo de reduzir palavras flexionadas (ou s vezes derivadas) ao seu tronco (stem), base ou
raiz, geralmente uma forma da palavra escrita. O tronco no precisa ser idntico  raiz morfolgica
da palavra; ele geralmente  suficiente que palavras relacionadas sejam mapeadas para o mesmo
tronco, mesmo se este tronco no for ele prprio uma raiz vlida. O estudo de algoritmos para
stemizao tem sido realizado em cincia da computao desde a dcada de 60. Vrios motores de
buscas tratam palavras com o mesmo tronco como sinnimos como um tipo de expanso de consulta, em
um processo de combinao."

This will use the rslp algorithm to stem the text.

library(ptstem)
ptstem(text, algorithm = "rslp", complete = FALSE)
#> [1] "Em morfolog linguis e recuper de inform a stemiz (do ingl, stemming) \no process de reduz palavr flexion (ou s vez deriv) ao seu tronc (st), bas ou\nraiz, geral uma form da palavr escrit. O tronc nao precis ser ident  raiz morfolog\nda palavr; ele geral  sufici que palavr relacion sej mape par o mesm\ntronc, mesm se est tronc nao for ele propri uma raiz val. O estud de algoritm par\nstemiz tem sid realiz em cienc da comput desd a dec de 60. Vari motor de\nbusc trat palavr com o mesm tronc com sinon com um tip de expans de consult, em\num process de combin."

You can complete stemmed words using the argument complete = T.

ptstem(text, algorithm = "rslp", complete = TRUE)

The other implemented algorithms are:

  • hunspell: the same algorithm used in OpenOffice corrector. (available via hunspell package)
  • porter: available via SnowballC package.

You can stem using those algorithms by changing the algorithm argument in ptstem function.

library(ptstem)
ptstem(text, algorithm = "hunspell")
#> [1] "Em morfologia lingustica e recuperao de informao a stemizao (do ingls, stemizao) \no processo de reduzir palavras flexionadas (ou s vezes derivadas) ao seu tronco (stemizao), base ou\nraiz, geralmente uma forma da palavras escrita. O tronco no precisa ser idntico  raiz morfologia\nda palavras; ele geralmente  suficiente que palavras relacionadas ser mapeadas para o mesmo\ntronco, mesmo se este tronco no for ele prprio uma raiz vlida. O estudo de algoritmos para\nstemizao tem ser realizado em cincia da computao desde a dcada de 60. Vrios motores de\nbuscas tratam palavras com o mesmo tronco como sinnimos como um tipo de expanso de consulta, em\num processo de combinao."
ptstem(text, algorithm = "porter")
#> [1] "Em morfologia lingustica e recuperao de informao a stemizao (do ingls, stemming) \no processo de reduzir palavras flexionadas (ou s vezes derivadas) ao seu tronco (stem), base ou\nraiz, geralmente uma forma da palavras escrita. O tronco no precisa ser idntico  raiz morfolgica\nda palavras; ele geralmente  suficiente que palavras relacionadas sejam mapeadas para o mesmo\ntronco, mesmo se este tronco no for ele prprio uma raiz vlida. O estudo de algoritmos para\nstemizao tem sido realizado em cincia da computao desde a dcada de 60. Vrios motores de\nbuscas tratam palavras com o mesmo tronco com sinnimos com um tipo de expanso de consulta, em\num processo de combinao."

Performance

The goal of stemming algorithms is to group related words and to separate unrelated words. With this in mind, you can talk about two kinds of possible errors when stemming:

  • Understemming: Related words were not grouped because you didn't stem enought.
  • Overstemming: Unrelated words were grouped because you removed a large part of the word when stemming.

To measure these errors the function performance was implemented. It returns a data.frame with 3 columns. The name of the stemmer and 2 metrics:

  • UI: the undersampling index. It's the proportion of related words that were not grouped.
  • OI: the overstemming index. It's the proportion of unrelated words that were grouped.

Remember that OI is 0 if you don't stem. So I think the true objective of a stemming algorithm is to reduce UI without augmenting OI too much.

ptstem package provides a dataset of grouped words for the portuguese language (found in this link). It's in this dataset that performance function calculates the metrics described above.

See results:

performance()
#>                 .id         UI         OI
#> 1              rslp 0.08540752 0.04929234
#> 2          hunspell 0.12835530 0.03221083
#> 3            porter 0.13958028 0.03221083
#> 4 modified-hunspell 0.05466081 0.06295754

This is not the only approach for measuring performance of the those algorithms. The article Assessing the impact of Stemming Accuracy on Information Retrieval A multilingual perspective describes various ways to analyse stemming performance.