# Pascoale Minor utilities for text processing in **Brazilian Portuguese**. I'm going to add new functions as I need them. Currently it has: - Pluralization and singularization (>= v0.3.0); - Proparoxytone, paroxytone and oxytone detection (>= v0.3.0); - Simple formatting considering accents in portuguese (upcase, downcase, capitalize); - Title formatting, considering prepositions; - Variations of a word at one and two **edit distances** (Reference: http://norvig.com/spell-correct.html); - Heuristic syllabic separation. My tests against a corpus of ~170K words shows 99.36% correctness (improved to ~99.56% on v0.3.0). The name of the gem is a homage to "Prof. Pasquale Cipro Neto" (http://pt.wikipedia.org/wiki/Pasquale_Cipro_Neto), a great teacher! And yes, the name of the gem is wrong spelled as a joke ^_^ ## Installation Add this line to your application's Gemfile: gem 'pascoale' And then execute: $ bundle Or install it yourself as: $ gem install pascoale ## Usage Pluralization and singularization *(Lowercase only) ```ruby require 'pascoale' capt = Pascoale::Inflector.new('capitão') puts capt.pluralize # => capitães capts = Pascoale::Inflector.new('capitães') puts capts.singularize # => capitão captn = Pascoale::Inflector.new('capitãozinho') puts captn.singularize # => capitãezinhos qq = Pascoale::Inflector.new('qualquer') puts qq.singularize # => quaisquer ``` Proparoxytones, Paroxytones and Oxytones *(Lowercase only) ```ruby require 'pascoale' diox = Pascoale::Reflector.new('dióxido') puts diox.proparoxytone? # => true puts diox.paroxytone? # => false puts diox.oxytone? # => false ideia = Pascoale::Reflector.new('ideia') puts ideia.proparoxytone? # => false puts ideia.paroxytone? # => true puts ideia.oxytone? # => false parati = Pascoale::Reflector.new('parati') puts parati.proparoxytone? # => false puts parati.paroxytone? # => false puts parati.oxytone? # => true ``` Text formatter ```ruby require 'pascoale' text = Pascoale::Formatter.new('Isso é um teste de formatação') # Basic formatting puts text.upcase # => ISSO É UM TESTE DE FORMATAÇÃO puts text.downcase # => isso é um teste de formatação puts text.capitalize # => Isso é um teste de formatação # Fancy formatting (good for titles) puts text.as_title # => Isso É um Teste de Formatação # Predicates puts text.upcase.upcase? # => true puts text.upcase.downcase? # => false puts text.capitalize? # => true ``` Variations of a word (typos and misspelling) ```ruby require 'pascoale' edits = Pascoale::Edits.new('você') # 1 edit distance puts edits.editions.inspect # 2 edits distance puts edits.editions2.inspect # LOTS of output, beware. ``` Syllabic separation *(Lowercase only) ```ruby require 'pascoale' separator = Pascoale::SyllableSeparator.new('exceção') puts separator.separated.inspect # => ["ex", "ce", "ção"] separator = Pascoale::SyllableSeparator.new('aéreo') puts separator.separated.inspect # => ["a", "é", "re", "o"] separator = Pascoale::SyllableSeparator.new('apneia') puts separator.separated.inspect # => ["ap", "nei", "a"] separator = Pascoale::SyllableSeparator.new('construir') puts separator.separated.inspect # => ["cons", "tru", "ir"] ``` ## Contributing 1. Fork it ( http://github.com/<my-github-username>/pascoale/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request