shineware / KOMORAN

Korean Morphological Analyzer by shineware
Apache License 2.0
286 stars 63 forks source link

안드로이드 스튜디오 코모란 사용자 사전 #146

Closed SSonjin closed 1 year ago

SSonjin commented 1 year ago

문제 설명

무엇이, 어떻게 문제인가요? 안드로이드 스튜디오에서 코모란3.3.9 사용하고 있는데 setUserDic()을 해도 사용자 사전이 적용이 안됩니다.

재현 경로

어떻게 하면 동일한 문제가 계속 발생하나요?

기대 상황

정상적인 상황에서는 어떻게 동작해야 한다고 생각하세요?

환경 정보

어떤 환경에서 이 문제가 발생하였나요?

추가 정보

스크린샷이나 에러 로그 등, 추가 정보가 있다면 남겨주세요. 11 13 132

shin285 commented 1 year ago

먼저 userdic.user의 단어와 품사 사이가 tab이 아닌 여러개의 space로 되어있는지 확인 부탁드립니다. 그래도 안된다면 userdic.user의 경로가 맞는지 확인 부탁드립니다. 위 방법으로도 안된다면 안드로이드와 관련된 이슈로 보여지는데 동일 경로에 있는 다른 파일을 dummy로 만들어서 파일을 read 했을 때 내용이 출력되는지 확인 부탁드립니다!

SSonjin commented 1 year ago
스크린샷 2023-05-11 오후 1 25 47 스크린샷 2023-05-11 오후 1 26 21

동일 경로에 있는 다른 파일 읽어와지기는 하는데 위의 방법은 되고 아래 방법은 안되네요 setUserDic()도 두번째 사진과 같은 오류가 뜹니다. if(!directory.exists())으로 경로 존재하는지 확인한후에 setUserDic()을 해도 같은 오류가 뜹니다.

gamamoe commented 1 year ago

@SSonjin 안녕하세요. 제 환경에서 Android 사용자사전을 테스트 한 결과를 공유드립니다 image

짧게 말씀드리면 사용자 사전 기능에는 문제가 없고, 몇 가지 확인해보셔야 하는 부분이 있습니다

  1. 사전 파일이 UTF-8이 맞는 지와, Tab seprated 형태가 맞는 지 확인 (e.g., 제트플립\tNNP, 즉 공백이 탭 문자여야합니다)
  2. assets이 아닌 내부저장소 또는 외부저장소 활용, assets의 경로는 안드로이드 런타임에서 해당 경로가 보존된다고 보장할 수 없으므로 내부 또는 외부 저장소에서 파일 경로를 가져와야 합니다. 다시 말해서 본문처럼 "C:/foo/bar/assets/user.dic" 과 같은 경로는 런타임에서 제대로 인식할 수 없습니다

제 경우, assets에서 파일을 읽고 그것을 다시 internal storage에 저장 후 absolutePath로 가져오는 방식으로 테스트를 해보았는데요. 제가 안드로이드 개발 경험은 거의 없어서, 이것이 Best Practice라고 얘기하긴 어려울 것 같습니다. 저장소 관련 공식 문서를 참고하세요 ( https://developer.android.com/training/data-storage/app-specific?hl=ko )

val assetFileName = "my_dict.txt"
val outputFile = File(this.applicationContext.filesDir, "my_dict.txt")

// Copy the file from assets to internal storage
this.applicationContext.assets.open(assetFileName).use { inputStream ->
    outputFile.outputStream().use { outputStream ->
        inputStream.copyTo(outputStream)
    }
}

// Obtain the full file path of the copied file
val filePath = outputFile.absolutePath
SSonjin commented 1 year ago

내부 저장소 사용하니까 되네요. 정말 감사합니다!!

gamamoe commented 1 year ago

내부 저장소 사용하니까 되네요. 정말 감사합니다!!

해결되셨다니 다행입니다 :) 해당 이슈는 close 하겠습니다