mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Add Ukrainian language
This commit is contained in:
@ -54,10 +54,28 @@ object DateFind {
|
||||
(sep + "md") -> text
|
||||
} else sep -> text
|
||||
|
||||
val ukrFlexion = List(
|
||||
"р",
|
||||
"рік",
|
||||
"року",
|
||||
"ого",
|
||||
"го",
|
||||
"ий",
|
||||
"ій",
|
||||
"й",
|
||||
"ше",
|
||||
"ге",
|
||||
"тє",
|
||||
"те",
|
||||
"ме",
|
||||
"е",
|
||||
"є"
|
||||
)
|
||||
TextSplitter
|
||||
.splitToken(stext, separators.toSet)
|
||||
.filter(w => lang != Language.Latvian || w.value != "gada")
|
||||
.filter(w => lang != Language.Spanish || w.value != "de")
|
||||
.filter(w => lang != Language.Ukrainian || !ukrFlexion.contains(w.value))
|
||||
}
|
||||
|
||||
case class SimpleDate(year: Int, month: Int, day: Int) {
|
||||
@ -111,6 +129,7 @@ object DateFind {
|
||||
case Language.Lithuanian => ymd
|
||||
case Language.Polish => dmy
|
||||
case Language.Estonian => dmy
|
||||
case Language.Ukrainian => dmy.or(ymd)
|
||||
}
|
||||
p.read(parts) match {
|
||||
case Result.Success(sds, _) =>
|
||||
|
@ -62,6 +62,8 @@ object MonthName {
|
||||
polish
|
||||
case Language.Estonian =>
|
||||
estonian
|
||||
case Language.Ukrainian =>
|
||||
ukrainian
|
||||
}
|
||||
|
||||
private val numbers = List(
|
||||
@ -392,4 +394,19 @@ object MonthName {
|
||||
List("november", "nov"),
|
||||
List("detsember", "dets")
|
||||
)
|
||||
|
||||
private val ukrainian = List(
|
||||
List("січня", "січн", "січ"),
|
||||
List("лютого", "лют"),
|
||||
List("березня", "бер"),
|
||||
List("квітня", "квіт", "кві"),
|
||||
List("травня", "трав", "тра"),
|
||||
List("червня", "черв", "чер"),
|
||||
List("липня", "лип"),
|
||||
List("серпня", "серп", "сер"),
|
||||
List("вересня", "вер"),
|
||||
List("жовтня", "жовт", "жов"),
|
||||
List("листопада", "лист", "лис"),
|
||||
List("грудня", "груд", "гру")
|
||||
)
|
||||
}
|
||||
|
@ -287,4 +287,82 @@ class DateFindTest extends FunSuite {
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
test("find ukrainian dates") {
|
||||
// officially used ones
|
||||
assertEquals(
|
||||
DateFind
|
||||
.findDates(
|
||||
"Цей текст був написаний 5 листопада 2022 року. Слава Україні!",
|
||||
Language.Ukrainian
|
||||
)
|
||||
.toVector,
|
||||
Vector(
|
||||
NerDateLabel(
|
||||
LocalDate.of(2022, 11, 5),
|
||||
NerLabel("5 листопада 2022", NerTag.Date, 24, 40)
|
||||
)
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
DateFind
|
||||
.findDates("05.11.2022 — це субота", Language.Ukrainian)
|
||||
.toVector,
|
||||
Vector(
|
||||
NerDateLabel(
|
||||
LocalDate.of(2022, 11, 5),
|
||||
NerLabel("05.11.2022", NerTag.Date, 0, 10)
|
||||
)
|
||||
)
|
||||
)
|
||||
// less common but also used
|
||||
assertEquals(
|
||||
DateFind
|
||||
.findDates(
|
||||
"Сьогодні 5 лист. 2022 р. Слава Україні!",
|
||||
Language.Ukrainian
|
||||
)
|
||||
.toVector,
|
||||
Vector(
|
||||
NerDateLabel(
|
||||
LocalDate.of(2022, 11, 5),
|
||||
NerLabel("5 лист. 2022", NerTag.Date, 9, 21)
|
||||
)
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
DateFind
|
||||
.findDates("Дата: 2022.11.05", Language.Ukrainian)
|
||||
.toVector,
|
||||
Vector(
|
||||
NerDateLabel(
|
||||
LocalDate.of(2022, 11, 5),
|
||||
NerLabel("2022.11.05", NerTag.Date, 6, 16)
|
||||
)
|
||||
)
|
||||
)
|
||||
// vernacular variants
|
||||
assertEquals(
|
||||
DateFind
|
||||
.findDates("Ілля Рєпін народився 5-го серпня 1844-го року.", Language.Ukrainian)
|
||||
.toVector,
|
||||
Vector(
|
||||
NerDateLabel(
|
||||
LocalDate.of(1844, 8, 5),
|
||||
NerLabel("5-го серпня 1844", NerTag.Date, 21, 37)
|
||||
)
|
||||
)
|
||||
)
|
||||
assertEquals(
|
||||
DateFind
|
||||
.findDates("3-тє жовт., 2022-й рік — це 33 дні тому", Language.Ukrainian)
|
||||
.toVector,
|
||||
Vector(
|
||||
NerDateLabel(
|
||||
LocalDate.of(2022, 10, 3),
|
||||
NerLabel("3-тє жовт., 2022", NerTag.Date, 0, 16)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user