All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kr.bydelta.koala.Implicit.scala Maven / Gradle / Ivy

package kr.bydelta.koala

import kr.bydelta.koala.POS.POSTag
import kr.bydelta.koala.data.{Morpheme, Sentence, Word}
import kr.bydelta.koala.traits.{CanDepParse, CanSplitSentence, CanTag}

import scala.language.implicitConversions

/**
  * Object for implicit conversions.
  */
object Implicit {
  /**
    * Implicit conversion from POSTag into Boolean filter
    *
    * @param pos POSTag to be checked
    * @return Boolean function, which gives true if morpheme has given pos tag.
    */
  implicit def filterMorpheme(pos: POSTag): Morpheme => Boolean = (m: Morpheme) => m.tag == pos

  /**
    * Implicit conversion from POSTags into Boolean filter
    *
    * @param poses Sequence of POSTag to be checked
    * @return Boolean function, which gives true if morpheme has given pos tags.
    */
  implicit def filterMorpheme(poses: collection.Seq[POSTag]): Morpheme => Boolean = {
    val set = poses.toSet
    (m: Morpheme) => set.contains(m.tag)
  }

  /**
    * Implicit conversion from POSTag into Boolean filter
    *
    * @param pos POSTag to be checked
    * @return Boolean function, which gives true if word contains given pos tag.
    */
  implicit def filterWord(pos: POSTag): Word => Boolean = (w: Word) => w.exists(pos)

  /**
    * Implicit conversion from POSTags into Boolean filter
    *
    * @param poses Sequence of POSTags to be checked
    * @return Boolean function, which gives true if word contains given pos tags.
    */
  implicit def filterWord(poses: collection.Seq[POSTag]): Word => Boolean = (w: Word) => w.exists(poses)

  /**
    * String operation
    *
    * @param str String
    */
  implicit class StringOp(str: String) {
    /**
      * Tag given sentence.
      *
      * @param tagger Tagger to be used
      * @return Sentence instance (tagged)
      */
    def toTagged(implicit tagger: CanTag[_]) = tagger.tagSentence(str)

    /**
      * Parse given sentence
      *
      * @param parser Parser to be used
      * @return Sentence instance (parsed)
      */
    def toParsed(implicit parser: CanDepParse) = parser.parse(str)

    /**
      * Split string into sentences
      *
      * @param split SentenceSplitter to be used
      * @return Sequence of Sentence Strings
      */
    def sentences(implicit split: CanSplitSentence) = split.sentences(str)
  }

  /**
    * Sentence operation
    *
    * @param sent Sentence
    */
  implicit class SentenceOp(sent: Sentence) {
    /**
      * Parse given sentence
      *
      * @param parser Parser to be used
      * @return Sentence instance (parsed)
      */
    def toParsed(implicit parser: CanDepParse) = parser.parse(sent)
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy