From 21afc211603c962d3fb51791526bf2597fd9a3a8 Mon Sep 17 00:00:00 2001 From: Waldi Ravens Date: Mon, 17 Aug 2015 23:25:55 +0200 Subject: [PATCH 1/2] Updated Croatian/Serbian language detection (Logic/Utilities) --- src/Logic/Utilities.cs | 62 ++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/src/Logic/Utilities.cs b/src/Logic/Utilities.cs index 259efb540..66c10e0d5 100644 --- a/src/Logic/Utilities.cs +++ b/src/Logic/Utilities.cs @@ -1189,11 +1189,14 @@ namespace Nikse.SubtitleEdit.Logic public static readonly string[] AutoDetectWordsRomanian = { "Какво", "тук", "може", "Как", "Ваше", "какво" }; public static readonly string[] AutoDetectWordsArabic = { "Какво", "тук", "може", "Как", "Ваше", "какво" }; public static readonly string[] AutoDetectWordsHebrew = { "אתה", "אולי", "הוא", "בסדר", "יודע", "טוב" }; - public static readonly string[] AutoDetectWordsSerbian = { "sam", "što", "öto", "äto", "ovo", "vas", "nije", "Šta", "ovde", "za" }; public static readonly string[] AutoDetectWordsVietnamese = { "không", "tôi", "anh", "đó", "Tôi", "ông" }; public static readonly string[] AutoDetectWordsHungarian = { "hogy", "lesz", "tudom", "vagy", "mondtam", "még" }; - public static readonly string[] AutoDetectWordsCroatian = { "sam", "öto", "äto", "ovo", "vas", "što" }; public static readonly string[] AutoDetectWordsTurkish = { "için", "Tamam", "Hayır", "benim", "daha", "deðil", "önce", "lazým", "benim", "çalýþýyor", "burada", "efendim" }; + public static readonly string[] AutoDetectWordsCroatianAndSerbian = { "sam", "što", "öto", "äto", "ovo", "vas", "nije", "Šta", "ovde", "za" }; + public static readonly string[] AutoDetectWordsCroatian = { "sigurnošću", "ubojstvo", "službeni", "nedjelja", "izražava", "dogodilo", "svjetlo", "sigurno", "shvaćam", + "obitelj", "vijest", "svijet", "sjećam", "lijepa", "dijete", "cijeli", "bijeli", "smije", "smije", "ured", "otok", "opći", "križ", "htio", "gdje", "auto", "sat", "kći" }; + public static readonly string[] AutoDetectWordsSerbian = { "ispoljava", "porodica", "ponaosob", "bukvalno", "ubistvo", "ubediti", "suštini", "komitet", "dejstvo", + "uopšte", "štampa", "ostrvo", "naučni", "kiriju", "kćerke", "nauka", "ivica", "čovek", "lepa", "krst", "kola", "hteo", "drug", "dete", "celi", "sme", "sem", "gde", "čas" }; public static string AutoDetectGoogleLanguage(string text, int bestCount) { @@ -1301,15 +1304,11 @@ namespace Nikse.SubtitleEdit.Logic if (count > bestCount) return "he"; // Hebrew - count = GetCount(text, AutoDetectWordsSerbian); + count = GetCount(text, AutoDetectWordsCroatianAndSerbian); if (count > bestCount) { - int croatianCount = GetCount(text, "sigurnošću", "ubojstvo", "službeni", "nedjelja", "izražava", "dogodilo", "svjetlo", "sigurno", "shvaćam", - "obitelj", "vijest", "svijet", "sjećam", "lijepa", "dijete", "cijeli", "bijeli", "smije", "smije", "ured", - "otok", "opći", "križ", "htio", "gdje", "auto", "sat", "kći"); - int serbianCount = GetCount(text, "ispoljava", "porodica", "ponaosob", "bukvalno", "ubistvo", "ubediti", "suštini", "komitet", "dejstvo", - "uopšte", "štampa", "ostrvo", "naučni", "kiriju", "kćerke", "nauka", "ivica", "čovek", "lepa", "krst", - "kola", "hteo", "drug", "dete", "celi", "sme", "sem", "gde", "čas"); + int croatianCount = GetCount(text, AutoDetectWordsCroatian); + int serbianCount = GetCount(text, AutoDetectWordsSerbian); if (croatianCount > serbianCount) return "hr"; // Croatian @@ -1408,12 +1407,18 @@ namespace Nikse.SubtitleEdit.Logic bool containsEnGb = false; bool containsEnUs = false; + bool containsHrHr = false; + bool containsSrLatn = false; foreach (string name in dictionaryNames) { if (name.Contains("[en_GB]")) containsEnGb = true; if (name.Contains("[en_US]")) containsEnUs = true; + if (name.Contains("[hr_HR]")) + containsHrHr = true; + if (name.Contains("[sr-Latn]")) + containsSrLatn = true; } foreach (string name in dictionaryNames) @@ -1453,33 +1458,27 @@ namespace Nikse.SubtitleEdit.Logic count = GetCount(text, AutoDetectWordsEnglish); if (count > bestCount) { + languageName = shortName; if (containsEnGb) { int usCount = GetCount(text, "color", "flavor", "honor", "humor", "neighbor", "honor"); int gbCount = GetCount(text, "colour", "flavour", "honour", "humour", "neighbour", "honour"); - if (usCount >= gbCount) - languageName = "en_US"; - else + if (gbCount > usCount) languageName = "en_GB"; } - else - { - languageName = shortName; - } } break; case "en_GB": count = GetCount(text, "we", "are", "and", "you", "your", "what"); if (count > bestCount) { + languageName = shortName; if (containsEnUs) { int usCount = GetCount(text, "color", "flavor", "honor", "humor", "neighbor", "honor"); int gbCount = GetCount(text, "colour", "flavour", "honour", "humour", "neighbour", "honour"); - if (usCount >= gbCount) + if (gbCount < usCount) languageName = "en_US"; - else - languageName = "en_GB"; } } break; @@ -1559,9 +1558,32 @@ namespace Nikse.SubtitleEdit.Logic } break; case "hr_HR": // Croatian - count = GetCount(text, AutoDetectWordsCroatian); + count = GetCount(text, AutoDetectWordsCroatianAndSerbian); if (count > bestCount) + { languageName = shortName; + if (containsSrLatn) + { + int croatianCount = GetCount(text, AutoDetectWordsCroatian); + int serbianCount = GetCount(text, AutoDetectWordsSerbian); + if (serbianCount > croatianCount) + languageName = "sr-Latn"; + } + } + break; + case "sr-Latn": // Serbian (Latin) + count = GetCount(text, AutoDetectWordsCroatianAndSerbian); + if (count > bestCount) + { + languageName = shortName; + if (containsHrHr) + { + int croatianCount = GetCount(text, AutoDetectWordsCroatian); + int serbianCount = GetCount(text, AutoDetectWordsSerbian); + if (serbianCount < croatianCount) + languageName = "hr_HR"; + } + } break; case "pt_PT": // Portuguese count = GetCount(text, AutoDetectWordsPortuguese); From 80d2d6c28dd4251f41322ef80da94f916cf5c22f Mon Sep 17 00:00:00 2001 From: aaaxx Date: Tue, 18 Aug 2015 00:53:15 +0200 Subject: [PATCH 2/2] Updated Croatian/Serbian language detection (Logic/Utilities) --- src/Logic/Utilities.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Logic/Utilities.cs b/src/Logic/Utilities.cs index 66c10e0d5..dcb9cb5ed 100644 --- a/src/Logic/Utilities.cs +++ b/src/Logic/Utilities.cs @@ -1192,11 +1192,19 @@ namespace Nikse.SubtitleEdit.Logic public static readonly string[] AutoDetectWordsVietnamese = { "không", "tôi", "anh", "đó", "Tôi", "ông" }; public static readonly string[] AutoDetectWordsHungarian = { "hogy", "lesz", "tudom", "vagy", "mondtam", "még" }; public static readonly string[] AutoDetectWordsTurkish = { "için", "Tamam", "Hayır", "benim", "daha", "deðil", "önce", "lazým", "benim", "çalýþýyor", "burada", "efendim" }; - public static readonly string[] AutoDetectWordsCroatianAndSerbian = { "sam", "što", "öto", "äto", "ovo", "vas", "nije", "Šta", "ovde", "za" }; - public static readonly string[] AutoDetectWordsCroatian = { "sigurnošću", "ubojstvo", "službeni", "nedjelja", "izražava", "dogodilo", "svjetlo", "sigurno", "shvaćam", - "obitelj", "vijest", "svijet", "sjećam", "lijepa", "dijete", "cijeli", "bijeli", "smije", "smije", "ured", "otok", "opći", "križ", "htio", "gdje", "auto", "sat", "kći" }; - public static readonly string[] AutoDetectWordsSerbian = { "ispoljava", "porodica", "ponaosob", "bukvalno", "ubistvo", "ubediti", "suštini", "komitet", "dejstvo", - "uopšte", "štampa", "ostrvo", "naučni", "kiriju", "kćerke", "nauka", "ivica", "čovek", "lepa", "krst", "kola", "hteo", "drug", "dete", "celi", "sme", "sem", "gde", "čas" }; + public static readonly string[] AutoDetectWordsCroatianAndSerbian = { "sam", "ali", "nije", "samo", "ovo", "kako", "dobro", "sve", "tako", "će", "mogu", "ću", "zašto", "nešto", "za" }; + public static readonly string[] AutoDetectWordsCroatian = { "što", "ovdje", "gdje", "kamo", "tko", "prije", "uvijek", "vrijeme", "vidjeti", "netko", + "vidio", "nitko", "bok", "lijepo", "oprosti", "htio", "mjesto", "oprostite", "čovjek", "dolje", + "čovječe", "dvije", "dijete", "dio", "poslije", "događa", "vjerovati", "vjerojatno", "vjerujem", "točno", + "razumijem", "vidjela", "cijeli", "svijet", "obitelj", "volio", "sretan", "dovraga", "svijetu", "htjela", + "vidjeli", "negdje", "želio", "ponovno", "djevojka", "umrijeti", "čovjeka", "mjesta", "djeca", "osjećam", + "uopće", "djecu", "naprijed", "obitelji", "doista", "mjestu", "lijepa", "također", "riječ", "tijelo" }; + public static readonly string[] AutoDetectWordsSerbian = { "šta", "ovde", "gde", "ko", "pre", "uvek", "vreme", "videti", "neko", + "video", "niko", "ćao", "lepo", "izvini", "hteo", "mesto", "izvinite", "čovek", "dole", + "čoveče", "dve", "dete", "deo", "posle", "dešava", "verovati", "verovatno", "verujem", "tačno", + "razumem", "videla", "ceo", "svet", "porodica", "voleo", "srećan", "dođavola", "svetu", "htela", + "videli", "negde", "želeo", "ponovo", "devojka", "umreti", "čoveka", "mesta", "deca", "osećam", + "uopšte", "decu", "napred", "porodicu", "zaista", "mestu", "lepa", "takođe", "reč", "telo" }; public static string AutoDetectGoogleLanguage(string text, int bestCount) {