Ejemplo n.º 1
0
  public Word(String word) {
    this.word = word.trim();
    this.syllables = new ArrayList<Syllable>();

    SyllabicSeparation syllabicSeparation = splitSyllablesOfThisWord();
    List<String> syllables = syllabicSeparation.getSyllables();
    for (int i = 0; i < syllables.size(); i++) {
      // check if this syllable is the tonic syllable.
      if (i == syllabicSeparation.getTonicSyllableIndex()) {
        this.syllables.add(new Syllable(syllables.get(i), Tonicity.TONICA));
      } else {
        this.syllables.add(new Syllable(syllables.get(i), Tonicity.ATONA));
      }
    }

    this.numSyllables = this.syllables.size();
  }
Ejemplo n.º 2
0
  private SyllabicSeparation splitSyllablesOfThisWord() {
    SyllabicSeparation ss = new SyllabicSeparation();

    int wordLength = this.word.length();

    String syllable = "";
    String letter = "";
    String prev = "";
    String post = "";

    for (int i = 0; i < wordLength; i++) {
      letter = String.valueOf(this.word.charAt(i));
      post = ((i + 1) >= wordLength) ? "" : String.valueOf(this.word.charAt(i + 1));
      String prevPrevLetter = ((i - 2) < 0) ? "" : String.valueOf(this.word.charAt(i - 2));
      String nextPost = ((i + 2) >= wordLength) ? "" : String.valueOf(this.word.charAt(i + 2));

      if (syllable.equals("")) {
        syllable = syllable + letter;
      } else if (letter.equals(prev)) {
        ss.addSyllable(syllable);
        syllable = letter;
      } else if (isConsonant(letter)) {
        if (isConsonant(prev)) {
          if (isConsonant(post) && !inArray(post.toUpperCase(), new String[] {"L", "R", "H"})) {
            syllable = syllable + letter;
          } else if (prev.toUpperCase().equals("D") && !letter.toUpperCase().equals("R")) {
            ss.addSyllable(syllable);
            syllable = letter;
          } else if (prev.toUpperCase().equals("N") && letter.toUpperCase().equals("R")) {
            ss.addSyllable(syllable);
            syllable = letter;
          } else if (inArray(letter.toUpperCase(), new String[] {"L", "R", "H"})) {
            syllable = syllable + letter;
          } else if (i == 1) {
            syllable = syllable + letter;
          } else {
            ss.addSyllable(syllable);
            syllable = letter;
          }
        } else if (isVogal(prev)) {
          if (isConsonant(post)
              && (!inArray(post.toUpperCase(), new String[] {"L", "R", "H"})
                  || (letter.toUpperCase().equals(post.toUpperCase()))
                  || letter.toUpperCase().equals("N"))) {
            if (inArray(letter.toUpperCase(), new String[] {"N"})
                && inArray(post.toUpperCase(), new String[] {"H"})) {
              ss.addSyllable(syllable);
              syllable = letter;
            } else {
              syllable = syllable + letter;
            }
          } else if (isConsonant(post)
              && letter.toUpperCase().equals("D")
              && post.toUpperCase().equals("R")) {
            syllable = syllable + letter;
          } else if (isVogal(post)) {
            ss.addSyllable(syllable);
            syllable = letter;
          } else {
            ss.addSyllable(syllable);
            syllable = letter;
          }
        }
      } else if (isVogal(letter)) {
        if (isConsonant(prev)) {
          syllable = syllable + letter;
        } else if (isVogal(prev)) {
          if ((vogal(prev).equals("U"))
              && (i > 1)
              && (inArray(prevPrevLetter.toUpperCase(), new String[] {"Q", "G"}))) {
            syllable = syllable + letter;
          } else if ((vogal(prev).equals("U"))
              && (vogal(letter).equals("I"))
              && (isConsonant(post))) {
            syllable = syllable + letter;
          } else if (hasAccentuation(letter)
              || (inArray(post.toUpperCase(), new String[] {"M", "N"}) && !isVogal(nextPost))) {
            ss.addSyllable(syllable);
            syllable = letter;
          } else if (!post.equals("") && isVogal(post) && isGreater(letter, post)) {
            ss.addSyllable(syllable);
            syllable = letter;
          } else if (isGreater(prev, letter)) {
            syllable = syllable + letter;
          } else {
            ss.addSyllable(syllable);
            syllable = letter;
          }
        }
      }
      prev = letter;
    }
    ss.addSyllable(syllable);

    int numSyllables = ss.getSyllables().size();

    int tonicSyllIndex = 0;
    if (numSyllables != 1) {
      int proparoxitona = numSyllables - 3;
      int paroxitona = numSyllables - 2;
      int oxitona = numSyllables - 1;

      tonicSyllIndex = paroxitona;
      if (hasAccentuation(ss.getSyllables().get(oxitona))) {
        tonicSyllIndex = oxitona;
      } else if (hasAccentuation(ss.getSyllables().get(paroxitona))) {
        tonicSyllIndex = paroxitona;
      } else if (numSyllables > 2 && hasAccentuation(ss.getSyllables().get(proparoxitona))) {
        tonicSyllIndex = proparoxitona;
      } else if (isOxitona(ss.getSyllables().get(oxitona))) {
        tonicSyllIndex = oxitona;
      }
    }

    ss.setTonicSyllableIndex(tonicSyllIndex);
    return ss;
  }