classLanguageServiceTest {
privatevalsut = LanguageService()
@TestfundetectLanguageTest() {
assertEquals(sut.detectLanguage("나는 배고프다."), "ko")
assertEquals(sut.detectLanguage("If it weren't for you, it would be really hard."), "en")
}
}
@TestfundetectLanguageTest() {
vallanguageDetector = LanguageDetector.getDefaultLanguageDetector().loadModels()
println(
languageDetector.detectAll(
"""
나는 정말 힘들었을 거야 라는 문장은 다음과 같이 더 자연스럽게 'I would have really struggled'로 번역될 수 있습니다.
""".trimIndent()
)
)
/**
* [ko: MEDIUM (0.571428), en: MEDIUM (0.428569)]
*/}
@TestfundetectLanguageTest() {
vallanguageDetector = LanguageDetector.getDefaultLanguageDetector().loadModels()
println(
languageDetector.detectAll(
"""
나는 정말 힘들었을 거야는 더 자연스럽게 'I would have really struggled'로 번역될 수 있습니다.
""".trimIndent()
)
)
/**
* [en: MEDIUM (0.857138), ko: MEDIUM (0.142857)]
*/}
이 경우 문장이 짧아서 그렇지 않나라고 생각할 수 있어서 다음과 같이 시도해보면, 아래와 같이 바뀌기는 한다.
@TestfundetectLanguageTest() {
vallanguageDetector = LanguageDetector.getDefaultLanguageDetector().loadModels()
println(
languageDetector.detectAll(
"""
나는 정말 힘들었을 거야는 더 자연스럽게 'I would have really struggled'로 번역될 수 있습니다.
나는 정말 힘들었을 거야는 더 자연스럽게 'I would have really struggled'로 번역될 수 있습니다.
나는 정말 힘들었을 거야는 더 자연스럽게 'I would have really struggled'로 번역될 수 있습니다.
나는 정말 힘들었을 거야는 더 자연스럽게 'I would have really struggled'로 번역될 수 있습니다.
나는 정말 힘들었을 거야는 더 자연스럽게 'I would have really struggled'로 번역될 수 있습니다.
""".trimIndent()
)
)
/**
* [ko: MEDIUM (0.571427), en: MEDIUM (0.428570)]
*/}
하지만, 저 기준을 어떻게 잡아야 할까? 상당히 문장에 의존적인 변수가 될 것으로 보인다.
따라서 해당 방법을 적용할 때 위의 내용을 유의하면 좋을 것 같다.
결론
이 라이브러리의 동작 방식은 n-gram 을 통해 언어 프로필을 뽑아낸 뒤에 상대 빈도 비교를 통해 추론해내는 방식이다.
하지만, 언어란 워낙 다양하게 쓰이기 때문에, 라이브러리만으로 정확하게 판단하기란 쉽지 않다는 것을 알게 되었다.