문장기호들이 연속으로 나올때 묶음으로 분석

Issue #2 resolved
Wanhee Lee created an issue

다음과 같은 텍스트에서 마지막 부분의 ."-가 한 묶음으로 분석이 됩니다.

"오늘밤 나는 피로와 더위에 잠을 이루지 못하고 있다. 더욱이 오늘 일을 글로 써두고 싶은 마음에 침대에 누워 불을 끌 수가 없다."- 로베르토 볼라뇨

문제의 원인은 CharSet.splitCharSet() 함수의 다음 코드에 있는 것 같습니다. ."- 연속으로 나올 때 세개가 모두 같은 Category로 분류되어 각각의 Charset으로 분류되지 못하고 한 묶음으로 분류됩니다.

    text.view.zipWithIndex.foreach { case (ch, idx) =>
      val categoryTerm: (Category, Morpheme) = getCategoryTerm(ch)
      if (categoryTerm != curCategoryTerm) {
        // first loop
        if (curCategoryTerm == null) {
        } else {
          val charsetString = text.substring(start, idx)
          charsets.append(CharSet(charsetString, charsetString.length, curCategoryTerm._1, curCategoryTerm._2))
          start = idx
        }
        curCategoryTerm = categoryTerm
      }
    }

Comments (5)

  1. Wanhee Lee reporter

    일단 다음과 같이 수정하여 해결하였습니다.

      def isSymbol(morpheme: Morpheme) = {
        val symbols = Seq("SF", "SE", "SSO", "SSC", "SC", "SY")
        symbols.contains(morpheme.feature(0))
      }
    
      def splitCharSet(text: String): Seq[CharSet] = {
          ...
          if (categoryTerm != curCategoryTerm || isSymbol(categoryTerm._2)) {
            // first loop
            if (curCategoryTerm == null) {
            } else {
              val charsetString = text.substring(start, idx)
              charsets.append(CharSet(charsetString, charsetString.length, curCategoryTerm._1, curCategoryTerm._2))
              start = idx
            }
            curCategoryTerm = categoryTerm
          }
          ...
       }
    
  2. 영호 유

    char.def 에 SYMBOL 1 1 0 아래와 같이 되어 있어서 통으로는 뽑고 문자 단위로는 안뽑아서 그렇게 되는것같습니다. (마지막 0이 unknown token 을 뽑는 길이입니다. 1이면 한글자씩 뽑게 되고 2이면 1글자 2글자 각각 만들게 됩니다.) 마침표(.)는 사전에 있어서 KnownToken으로 뽑혔는데 ("-) 가 토큰으로 뽑히지 않고 (."-) 만 토큰으로 뽑히다보니 (.) + ("-) 가 연결이 안된것같습니다.

    그렇다고 SYMBOL 1 1 1 로 하자니 (.^^)와 같은 경우 (.) + (^) + (^) 로 처럼 각자 뽑히게되어 이모티콘형의 특수문자열을 한 문자씩 토큰으로 뽑게 되더라구요. 이것또한 아쉬운점이라.. 그냥 무조건 한글자씩 뽑고 이모티콘같은경우는 사전으로 관리를 하는게 좋을까요?

    다양한 의견주시면 감사하겠습니다. ^^

  3. 영호 유

    pull request 주신 버그처리떄문에 급하게 하다보니. 요 문제까지는 신경을 못쓰고 릴리즈를 해버렷네요. 아직 SYMBOL이 뭉쳐서 나오고 있습니다. SYMBOL 분석방법을 옵션으로 처리하는 방법도 생각해봐야할것 같습니다. 혹시 분석해 나온 symbol을 따로 사용하는 곳이 있나요? 아니면 단순히 오분석으로 보여서 리포팅을 주신건가요?

  4. Wanhee Lee reporter

    문장단위로 분리하는 로직이 있었는데 따옴표와 마침표가 분리되지 않는 바람에 정확하게 작동을 하지 않았었습니다. 문장의 마침부호가 마침표, 느낌표, 물음표 등이 있는데 이들 기호가 다른 부호가 묶음으로 나오기때문에 문장분리하는 로직이 오작동을 합니다.

  5. Log in to comment